OpenGL忽略带alpha的像素

时间:2012-12-18 18:30:31

标签: opengl opengl-es

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

问题是,当像素的alpha通道低于255(或1)时,它只是不会出现在屏幕上。它不是忽略alpha通道而只显示RGB,它隐藏了像素。 此客户端使用OpenGL和shadders进行绘制。

我已通过致电:glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA )glDisable(GL_DEPTH_TEST)glColorMask(1,1,1,1)启用了广告。

1 个答案:

答案 0 :(得分:2)

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA )

此行告诉Open GL如何混合源像素和目标像素。

glDisable(GL_DEPTH_TEST)

我认为这是你可能出错的地方,因为这会禁用你不应该进行2D渲染的Z-DEPTH测试。

glColorMask(1,1,1,1)

我不是百分之百,但我怀疑它会隐藏任何与指定RGBA相匹配的像素。 在这种情况下,任何R = 255,G = 255,B = 255和A = 255的像素都不会被渲染。

尝试使用:

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

renderEverything();

glDisable(GL_BLEND);

希望你能让它发挥作用:)