我将glBlendFunc设置为
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
为了测试目的,我在片段着色器中设置了这样的颜色
gl_FragColor = vec4(1.0,0.0,0.0,0.0);
物体不应该完全透明吗?如果不是,原因是什么?
答案 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)显然不是预乘的α值!