好吧,我正在修改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)
启用了广告。
答案 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);
希望你能让它发挥作用:)