OpenGL - 混合

时间:2013-11-04 11:00:59

标签: opengl blending

我使用这种颜色混合的光线投射在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

2 个答案:

答案 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;

所以,你有不同的结果。