Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何像Canvas GlobalComposite操作那样模拟更轻的效果?_C++_Html5 Canvas_Sfml - Fatal编程技术网

C++ 如何像Canvas GlobalComposite操作那样模拟更轻的效果?

C++ 如何像Canvas GlobalComposite操作那样模拟更轻的效果?,c++,html5-canvas,sfml,C++,Html5 Canvas,Sfml,每年年底,我都会制作一个焰火表演画布效果(Javascript),最后一个是: 这种效果很简单:用createRadialGradient()方法填充了很多圆,并具有一定的透明度。秘密在于财产: globalCompositeOperation = "lighter"; 使用时,所有颜色都混合在一起,给人以光的感觉。今年,我想用SFML/C++做同样的事情。我是SFML的begginer,不知道从哪里开始产生这种效果。有谁能告诉我如何在SFML中模拟Canvas globalComposit

每年年底,我都会制作一个焰火表演画布效果(Javascript),最后一个是:

这种效果很简单:用createRadialGradient()方法填充了很多圆,并具有一定的透明度。秘密在于财产:

globalCompositeOperation = "lighter";

使用时,所有颜色都混合在一起,给人以光的感觉。今年,我想用SFML/C++做同样的事情。我是SFML的begginer,不知道从哪里开始产生这种效果。有谁能告诉我如何在SFML中模拟Canvas globalCompositeOperation()。请参见此示例:

    #include <SFML/Graphics.hpp>

    int main()
    {
        sf::RenderWindow window(sf::VideoMode(400, 400), "Blend::Mode Sample");
        sf::Shape square = sf::Shape::Rectangle(100, 100, 200, 200, sf::Color(250, 30, 30));
        sf::Shape circle1 = sf::Shape::Circle(100, 100, 50, sf::Color(30, 30, 250));
        sf::Shape circle2 = sf::Shape::Circle(300, 100, 50, sf::Color(30, 30, 250));
        sf::Shape circle3 = sf::Shape::Circle(100, 300, 50, sf::Color(30, 30, 250));
        sf::Shape circle4 = sf::Shape::Circle(300, 300, 50, sf::Color(30, 30, 250));
        circle1.SetBlendMode(sf::Blend::Alpha);
        circle2.SetBlendMode(sf::Blend::Add);
        circle3.SetBlendMode(sf::Blend::Multiply);
        circle4.SetBlendMode(sf::Blend::None);
        while (window.IsOpened())
        {
            sf::Event event;
            while (window.PollEvent(event))
                if (event.Type == sf::Event::Closed)
                    window.Close();

            window.Clear();
            window.Draw(square);
            window.Draw(circle1);
            window.Draw(circle2);
            window.Draw(circle3);
            window.Draw(circle4);
            window.Display();
        }
    }
#包括
int main()
{
sf::RenderWindow窗口(sf::VideoMode(400400),“Blend::Mode示例”);
sf::Shape square=sf::Shape::矩形(100100200200,sf::颜色(250,30,30));
sf::Shape circle1=sf::Shape::Circle(100,100,50,sf::Color(30,30,250));
sf::Shape circle2=sf::Shape::Circle(300,100,50,sf::Color(30,30,250));
sf::Shape circle3=sf::Shape::Circle(10030050,sf::Color(3030250));
sf::Shape circle4=sf::Shape::Circle(300,300,50,sf::Color(30,30,250));
圆圈1.模式(sf::Blend::Alpha);
圆圈2.SetBlendMode(sf::Blend::Add);
圆圈3.SetBlendMode(sf::Blend::Multiply);
圆圈4.SetBlendMode(sf::Blend::None);
while(window.IsOpened())
{
sf::事件;
while(window.PollEvent(事件))
如果(event.Type==sf::event::Closed)
window.Close();
window.Clear();
窗。画(正方形);
窗口。绘制(圆圈1);
窗口。绘制(圆圈2);
窗口。绘制(圆圈3);
窗口。绘制(圆圈4);
window.Display();
}
}
输出:

我认为您想要的效果是
SetBlendMode(sf::Blend::Add)