OpenGL ES 2.0的混合
问题描述:
我设置glBlendFunc到OpenGL ES 2.0的混合
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
,并用于测试目的我设置的颜色在我的片段着色器这样的
gl_FragColor = vec4(1.0,0.0,0.0,0.0);
不宜对象是完全透明的?如果不是,原因是什么?
答
glBlendFunc()
的第一个参数是来源因子,第二个参数是目标因子。你的情况:
sfactor = 1.0;
dfactor = 1.0 - src.alpha;
为src.alpha = 0.0
,从gl_FragColor
:
sfactor = 1.0;
dfactor = 1.0;
所以把到缓冲区的颜色将是:
buffer = sfactor * src + dfactor * dst;
代...
buffer = (1.0,0.0,0.0,0.0) + dst;
所以,把它简单化,就是将1添加到现有缓冲区的红色通道中。
如果你想使输出完全透明的,通常的功能是:
glBlendFunc(GL_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
你写的一个通常用于在源预乘阿尔法。但是(1,0,0,0)显然不是预乘alpha值!
非常有帮助的解释,谢谢! – cboe