纹理alpha通道在opengl中不起作用

纹理alpha通道在opengl中不起作用,opengl,textures,alpha,Opengl,Textures,Alpha,如何将图像与alpha通道一起使用?从现在起,我尝试了以下方法: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, bits); 使用此opengl命令: glBindTexture(

如何将图像与alpha通道一起使用?从现在起,我尝试了以下方法:

glTexImage2D(GL_TEXTURE_2D,
             0,
             GL_RGBA,
             width, height,
             0,      
             GL_BGRA,
             GL_UNSIGNED_BYTE,
             bits);
使用此opengl命令:

glBindTexture(GL_TEXTURE_2D, texgun5);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glColor3f(1.0f, 1.0f, 1.0f);
glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glBegin(GL_QUADS);
        glTexCoord2f(0.0, 0.0);
        glVertex3f(gun5[0], gun5[1], gun5[2]);
        glTexCoord2f(1.0, 0.0);
        glVertex3f(gun5[3], gun5[4], gun5[5]);
        glTexCoord2f(1.0, 1.0);
        glVertex3f(gun5[6], gun5[7], gun5[8]);
        glTexCoord2f(0.0, 1.0);
        glVertex3f(gun5[9], gun5[10], gun5[11]);
    glEnd();
glDisable(GL_BLEND);

我使用的是加载了Freeimage的png图像,但是trasparent像素都是黑色的,错误在哪里?

我想你忘了在纹理环境中指定混合。在您的glTexParameteri调用之后插入此命令:

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);

透明像素是白色的,因为您指定的颜色是白色的。根据
GL_贴花
参考
RGBA
格式,这里应用的公式是
Cp*(1-As)+Cs*As
,现在当你的纹理完全透明时,你的
As
将变为
0
,这将导致最终的颜色值等于
Cp
,这是你的四边形(白色)的颜色


我认为在这种情况下,您应该使用
glColor4f(1.0f,1.0f,1.0f,0.0f)将四边形的alpha设置为零。
纹理加载正确,但显示不正确。使用
glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE)而不是
glTexEnvi(GL_纹理环境、GL_纹理环境模式、GL_贴花)
如果这还不够,请尝试
glDepthMask(GL\u FALSE)
查看是否至少有alpha值。如果这还不够,试试看

glEnable( GL_ALPHA_TEST );
glAlphaFunc( GL_NOTEQUAL, 0.0 );

在您的init函数中

不,它有一个奇怪的行为,它反转所有的颜色textures@PhantomFav:查看在线文档,看起来应该是GL_贴花,而不是GL_混合。将我的答案更改为reflect。感谢您的帮助,但现在trasparent像素是白色而不是黑色。您必须致电glEnable(GL_ALPHA);在初始化过程中的某个地方。您的代码看起来非常好。错误一定在别处。现在纹理都是黑色的,甚至是非透射像素。@Luca显然从你的评论以来已经过去了很多时间,但这可能会帮助下一个家伙。我必须让GL_调制而不是GL_贴花来让它工作。使用GL_贴花时,根据当前颜色的不同,它是黑色还是白色,如您所述。我也不必启用GL_ALPHA。