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值!

+0

非常有帮助的解释,谢谢! – cboe