在OpenGL 3+中进行alpha混合纹理四边形的过程?

时间:2011-07-28 00:52:20

标签: opengl

我正在尝试组合一个简单的程序,它只显示两个相互重叠的纹理四边形,并且纹理具有alpha通道。

我已经成功地将四边形显示出来了,纹理看起来正确,除了透明度。

在这个主题上,GL_BLEND标志似乎根本不做任何事情,无论是否启用。在使用着色器时,此特定标志是否不适用?

我知道alpha正在被正确渲染,因为如果我设置out_color = texture.aaaa,我会得到一个与原始纹理匹配的黑色/白色/灰色的漂亮图案。

那么,如果GL_BLEND不起作用,那么使alpha混合工作的常用方法是什么?

1 个答案:

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