OpenGL忽略像素与阿尔法

问题描述:

那么,我正在Modding 2D开源游戏客户端,我试图增加透明度的游戏对象纹理。它已经读取并加载Alpha通道。纹理已经加载到openGL中,格式和内部格式与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

是否启用alpha测试,而不是alpha混合? – JasonD

+0

感谢您的评论。我在整个源代码中进行了搜索,没有找到任何启​​用alpha测试的东西。 –

+0

着色器怎么样 - 他们做杀/抛弃? – JasonD

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 

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

glDisable(GL_DEPTH_TEST) 

我觉得这是你可能是想错了,因为这禁用Z深度测试,你不需要为2D渲染。

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

希望你能得到它的工作:)