0

好吧,我正在修改一个 2D 开源游戏客户端,我试图为游戏对象纹理添加透明度。它已经读取并加载了 alpha 通道。纹理已经以 RGBA 格式和内部格式加载到 openGL 中。

问题是,当像素的 alpha 通道低于 255(或 1)时,它就不会出现在屏幕上。它没有忽略 alpha 通道并且只显示 RGB,它隐藏了像素。该客户端使用 OpenGL 和着色器进行绘图。

我已经通过调用: 和 启用glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA )glDisable(GL_DEPTH_TEST)混合glColorMask(1,1,1,1)

4

1 回答 1

2
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA )

这一行告诉 OpenGL 如何混合源像素和目标像素。

glDisable(GL_DEPTH_TEST)

我认为这可能是您出错的地方,因为这会禁用 2D 渲染不需要的 Z-DEPTH 测试。

glColorMask(1,1,1,1)

我对此不是 100%,但我怀疑这会隐藏任何与指定 RGBA 匹配的像素。在这种情况下,任何 R=255、G=255、B=255 和 A=255 的像素都不会被渲染。

尝试使用:

glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

renderEverything();

glDisable(GL_BLEND);

希望你能让它工作:)

于 2012-12-28T19:58:18.110 回答