Alpha与OpenGL ES 2.0混合?

Sim*_*nes 2 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;
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为在着色器运行之前,gl_FragColor似乎不包含任何有意义的内容.

什么是正确的方法?

ybu*_*ill 7

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