簡體   English   中英

如何在OpenGL / GLSL中設置特定顏色的閾值

[英]How to threshold a specific color in OpenGL/GLSL

我在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();

粒子痕跡效果

問題在於,這些跡線直到變成純黑色才不會消失,而是保持灰色。

我可以設定深灰色值的閾值,也可以逐漸淡化它們,但是最好的方法是什么? OpenGL混合功能/操作或着色器? 速度是一個主要問題。

您需要以浮點格式分配fbo。

openFrameworks examples目錄中有一個示例,該示例顯示了浮點格式和非浮點格式之間的差異,這似乎是您的問題( examples/gl/fboTrailsExample )。

以浮點格式分配:

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

然后在update方法中,您可以在rgbaFboFloat.begin();之間繪制到fbo rgbaFboFloat.begin(); rgbaFboFloat.end();

最后,您可以使用draw方法繪制fbo: rgbaFboFLoat.draw(0,0);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM