0

我在 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
4

2 回答 2

0

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) - 通过使用这个,你有如下公式:

最后一个.rgb = 实际.a * 实际.rgb + ( 1.0 - 实际.a ) * 最后一个.rgb;

它与您的着色器公式完全不同:

实际.rgb *=实际.a;

最后 = (1.0 - last.a) * 实际 + 最后;

所以,你有不同的结果。

于 2015-02-16T09:55:08.017 回答
0

主要问题是您仍然必须将源颜色与着色器中的 alpha 值进行预乘 (actual.rgb *= actual.a)。

我认为混合你必须使用这个功能:

glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_ONE);
glBlendEquation(GL_FUNC_ADD):
于 2013-11-04T14:18:33.973 回答