Alpha与OpenGL ES 2.0混合?

时间:2010-09-25 12:00:19

标签: iphone opengl-es glsl

最好的方法是什么?

我尝试使用看起来像这样的片段着色器天真地做到这一点:

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似乎不包含任何有意义的内容。

什么是正确的方法?

1 个答案:

答案 0 :(得分:7)

为您完成Alpha混合。在着色器退出时,gl_FragColor应该在w组件中保存alpha值,您必须使用普通API设置混合模式,就像根本没有着色器一样。例如,gl_FragColor = vec4(0,1,0,0.5)将生成绿色,50%透明的片段。