C++ 具有透明度的OpenGL纹理(alpha)

C++ 具有透明度的OpenGL纹理(alpha),c++,opengl,transparency,alphablending,C++,Opengl,Transparency,Alphablending,我试图渲染一个部分不透明颜色的纹理,另一部分透明 这是我对对象的绘制功能: void drawHighGrass(){ glDisable(GL_LIGHTING); glClearColor(1.0, 1.0, 1.0, 1.0); glColor4f(1.0, 1.0, 1.0, 1.0); glDisable(GL_DEPTH_TEST); glDepthMask(GL_FALSE); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_

我试图渲染一个部分不透明颜色的纹理,另一部分透明

这是我对对象的绘制功能:

void drawHighGrass(){
glDisable(GL_LIGHTING);
glClearColor(1.0, 1.0, 1.0, 1.0);
glColor4f(1.0, 1.0, 1.0, 1.0);

glDisable(GL_DEPTH_TEST);

glDepthMask(GL_FALSE);

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



glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texturas[HIGH_GRASS]);

glPushMatrix();
//glTranslatef(1000, 0, 1000);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex3f(0, 0, 0);
glTexCoord2f(1.0f, 0.0f); glVertex3f(100, 0, 0);
glTexCoord2f(1.0f, 1.0f); glVertex3f(100, 40, 0);
glTexCoord2f(0.0f, 1.0f); glVertex3f(0, 40, 0);
glEnd();

glPopMatrix();

glDisable(GL_TEXTURE_2D);

glEnable(GL_DEPTH_TEST);
glDisable(GL_BLEND);
glDepthMask(GL_TRUE);
glEnable(GL_LIGHTING);

}
问题是,在透明部分,它显示纯白。我可以使用glColor4f(1.0,1.0,1.0,0.5)使纹理透明,但这不是我想要的,因为它使整个纹理透明,而不仅仅是透明部分


我已经检查过了,我的纹理文件是一个透明的PNG。

在这里重新列出解决方案,以便其他人可以轻松找到它


您的渲染代码似乎是正确的,因此出现问题的似乎是纹理加载代码。加载纹理时,必须确保传入了内部纹理像素格式(GL_RGBA8、GL_RGBA16等)以及源图像像素格式(GL_RGBA或GL_BGRA等)的正确标志。

这听起来可能是纹理加载方式的问题。你加载纹理的代码是什么?@Maple,你是对的,这是纹理导入。谢谢