OpenGL ES 2.0混合

时间:2014-01-12 08:59:25

标签: opengl-es-2.0 glblendfunc

我将glBlendFunc设置为

glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

为了测试目的,我在片段着色器中设置了这样的颜色

gl_FragColor = vec4(1.0,0.0,0.0,0.0);

物体不应该完全透明吗?如果不是,原因是什么?

1 个答案:

答案 0 :(得分:2)

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);

您编写的那个通常用于源中的预乘alpha。但是(1,0,0,0)显然不是预乘的α值!