2010-09-25 132 views
2

最好的方法是什么?Alpha与OpenGL ES 2.0混合?

我试图用一个片段着色器看起来像这样幼稚地做到这一点:

varying lowp vec4 color; 
void main() 
{ 
    lowp vec4 alpha = colorVarying.wwww; 
    const lowp vec4 one = vec4(1.0, 1.0, 1.0, 1.0); 
    lowp vec4 oneMinusAlpha = one-alpha; 
    gl_FragColor = gl_FragColor*oneMinusAlpha + colorVarying*alpha; 
    gl_FragColor.w = 1.0; 
} 

但这不起作用,因为它似乎gl_FragColor不包含任何着色器运行之前有意义。

什么是正确的方法?

回答

7

Alpha混合是为你完成的。在着色器出口处,gl_FragColor应该在w组件中保存alpha值,并且您必须使用常规API设置混合模式,就像完全没有着色器一样。例如gl_FragColor = vec4(0,1,0,0.5)将产生绿色的50%透明片段。

+1

Gah。谈论没有看到树木的森林。谢谢。 – 2010-09-25 13:12:13