透明(alpha)的OpenGL纹理

时间:2014-06-25 02:48:55

标签: 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_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。

1 个答案:

答案 0 :(得分:0)

在此处重述解决方案,以便其他人可以轻松找到解决方案。

你的渲染代码似乎是正确的,所以似乎问题是纹理加载代码。加载纹理时,必须确保传入内部纹理像素格式(GL_RGBA8,GL_RGBA16等)的正确标记以及源图像像素格式(GL_RGBA或GL_BGRA等)。