gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 00:44:35 31 4
gpt4 key购买 nike

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

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

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

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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com