最好的方法是什么?
我试图用看起来像这样的片段着色器天真地做到这一点:
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似乎不包含任何有意义的内容。
正确的方法是什么?
最佳答案
Alpha混合已为您完成。在着色器退出时,gl_FragColor
应该在w
组件中保留alpha值,并且您必须使用普通API设置混合模式,就像根本没有着色器一样。例如,gl_FragColor = vec4(0,1,0,0.5)
将产生绿色的,透明度为50%的片段。
关于iphone - Alpha与OpenGL ES 2.0融合了吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3793691/