Как порогить определенный цвет в 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 или шейдер? Скорость — главная проблема.

0

Решение

Вам нужно выделить свой FBO в формате с плавающей запятой.

В каталоге примеров openFrameworks есть пример, который показывает разницу между форматами с плавающей запятой и без форматов с плавающей запятой, и это кажется вашей проблемой (examples/gl/fboTrailsExample).

Распределение в формате с плавающей запятой:

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

а затем в методе обновления вы можете нарисовать в FBO между rgbaFboFloat.begin(); а также rgbaFboFloat.end();

Чтобы закончить, вы рисуете свою FBO в методе draw: rgbaFboFLoat.draw(0,0);

1

Другие решения