我使用这种颜色混合的光线投射在PS中进行循环
actual = <some color loaded from texture>;
actual.a *= 0.05; //reduce the alpha to have a more transparent result
//Front to back blending
actual.rgb *= actual.a;
last = (1.0 - last.a) * actual + last;
可以重写这个等式以使用OpenGL 3混合函数吗?目标是通过渲染更多的qauds来消除PS的循环
到目前为止,我使用的是:glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
,但结果看起来不同
修改
last = cumulated color (aka. final color)
actual = current color from texture
答案 0 :(得分:0)
主要问题是你仍然必须将源颜色与着色器中的alpha值预乘(actual.rgb * = actual.a)。
我认为要混合你必须使用这个功能:
glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_ONE);
glBlendEquation(GL_FUNC_ADD):
答案 1 :(得分:0)
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA) - 使用此方法,您可以使用以下公式:
last.rgb = actual.a * actual.rgb +(1.0 - actual.a)* last.rgb;
这与你的着色器公式完全不同:
actual.rgb * = actual.a;
last =(1.0 - last.a)* actual + last;
所以,你有不同的结果。