c++ - 如何像Canvas globalCompositeOperation那样模拟更亮的效果?

标签 c++ html5-canvas sfml

每年年底我都会制作烟花燃放 Canvas 效果(Javascript),最后一个是:

http://js1k.com/2011-dysentery/demo/955

这个效果很简单:用createRadialGradient()方法填充很多圆圈,并具有一定的透明度。 secret 在于属性:

globalCompositeOperation = "lighter";

使用时,所有颜色混合在一起,给人一种光的感觉。今年,我想做同样的事情,但是用 SFML/C++。我是 SFML 的初学者,不知道从哪里开始制作这种效果。谁能告诉我如何在 SFML 中模拟 Canvas globalCompositeOperation() ?

最佳答案

您可以使用sf::Blend::Mode获得此效果。请参阅此示例:

    #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();
        }
    }

输出:

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

关于c++ - 如何像Canvas globalCompositeOperation那样模拟更亮的效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8452301/

相关文章:

c++ - 卡在 if 语句中,以检查列表中的数字

javascript - 移动对象以使用 Canvas 单击 X 和 Y

c++ - 如何根据用户在c++中单击鼠标的位置旋转弹丸

c++ - 使用 if(...) 时,为什么这被认为是一种良好的编程习惯?

c++ - std::out 二维字符的外部维度

c++ - A*算法好像在兜圈子,我做错了什么?

javascript - 使用 Pixi.js/html Canvas 绘制鼠标选择区域(橡皮筋)

html5-canvas - 使用 konva 图像模拟 <img> object-fit/object-position 属性的最佳策略

c++ - SFMLtexture 形状像播放器

c++ - SFML 输入 GetMouseX 和 GetMouseY 未捕捉到鼠标移动