首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何像Canvas globalCompositeOperation那样模拟较轻的效果?

如何像Canvas globalCompositeOperation那样模拟较轻的效果?
EN

Stack Overflow用户
提问于 2011-12-10 06:06:23
回答 1查看 3.8K关注 0票数 2

每年年底,我都会制作一个烟花展示画布效果(Javascript),最后一个是:

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

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

代码语言:javascript
复制
globalCompositeOperation = "lighter";

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-10 20:20:58

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

代码语言:javascript
复制
    #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)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8452301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档