and*_*pcg 3 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);
}
Run Code Online (Sandbox Code Playgroud)
问题是在透明部分它显示纯白色。我可以使用 glColor4f(1.0, 1.0, 1.0, 0.5) 使纹理透明,但这不是我想要的,因为它使整个纹理透明,而不仅仅是透明部分。
我检查过,我的纹理文件是具有透明度的PNG。
小智 9
在这里重述解决方案,以便其他人可以轻松找到它。
您的渲染代码似乎是正确的,因此问题似乎出在纹理加载代码上。加载纹理时,必须确保为内部纹理像素格式(GL_RGBA8、GL_RGBA16 等)以及源图像像素格式(GL_RGBA 或 GL_BGRA 等)传递正确的标志。