我正在尝试组合一个简单的程序,它只显示两个相互重叠的纹理四边形,并且纹理具有alpha通道。
我已经成功地将四边形显示出来了,纹理看起来正确,除了透明度。
在这个主题上,GL_BLEND标志似乎根本不做任何事情,无论是否启用。在使用着色器时,此特定标志是否不适用?
我知道alpha正在被正确渲染,因为如果我设置out_color = texture.aaaa,我会得到一个与原始纹理匹配的黑色/白色/灰色的漂亮图案。
那么,如果GL_BLEND不起作用,那么使alpha混合工作的常用方法是什么?
答案 0 :(得分:3)
glEnable(GL_BLEND)
所做的就是打开和关闭混合。它没有说混合会做什么;由various blending functions控制。如果您想要一个典型的Alpha透明度混合,请执行以下操作:
glBlendEquationSeparate(GL_FUNC_ADD, GL_FUNC_ADD);
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO);
如果你使用预乘的alpha(你可能应该),你会这样做:
glBlendEquationSeparate(GL_FUNC_ADD, GL_FUNC_ADD);
glBlendFuncSeparate(GL_ONE, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO);