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)
启用混合。
答
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);
希望你能得到它的工作:)
是否启用alpha测试,而不是alpha混合? – JasonD
感谢您的评论。我在整个源代码中进行了搜索,没有找到任何启用alpha测试的东西。 –
着色器怎么样 - 他们做杀/抛弃? – JasonD