我将 glBlendFunc 设置为
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
出于测试目的,我在片段着色器中设置颜色,如下所示
gl_FragColor = vec4(1.0,0.0,0.0,0.0);
对象不应该是完全透明的吗?如果不是,可能是什么原因?
我将 glBlendFunc 设置为
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);
您编写的通常用于源中的预乘 alpha。但是 (1, 0, 0, 0) 显然不是一个预乘的 alpha 值!