gpt4 book ai didi

c++ - 如何在 OpenGL/GLSL 中对特定颜色进行阈值处理

转载 作者:行者123 更新时间:2023-11-28 06:46:47 25 4
gpt4 key购买 nike

我在 OpenGL 中制作了粒子尾迹效果。

诀窍是在屏幕上画一个半透明的矩形来逐渐淡出前一帧:

    ofSetColor(0,0,0,255*(1.0-persistence));
ofFill();
ofRect(0, 0, ofGetScreenWidth(), ofGetScreenHeight());

然后绘制粒子(大致):

    ofEnableBlendMode(OF_BLENDMODE_ADD);    
ofEnablePointSprites();
vbo.draw(GL_POINTS, 0, (int)points.size());
ofDisablePointSprites();

Particle trails effect

问题是轨迹在变成纯黑色之前不会褪色,而是保持灰色。

我可以设置深灰色值的阈值,或逐渐淡化它们,但最好的方法是什么? OpenGL 混合功能/操作或着色器?速度是一个主要问题。

最佳答案

您需要使用浮点格式分配您的 fbo。

openFrameworks 示例目录中有一个示例显示浮点和非浮点格式之间的区别,这似乎是您的问题 (examples/gl/fboTrailsExample)。

以浮点格式分配:

ofFbo rgbaFboFloat;
rgbaFboFloat.allocate(400, 400, GL_RGBA32F_ARB);

然后在更新方法中,您可以在 rgbaFboFloat.begin();rgbaFboFloat.end();

之间绘制 fbo

最后,您在 draw 方法中绘制 fbo:rgbaFboFLoat.draw(0,0);

关于c++ - 如何在 OpenGL/GLSL 中对特定颜色进行阈值处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24850226/

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