OpenGL纹理透明度

时间:2010-02-20 14:28:37

标签: c++ opengl transparency

我正在使用C ++和OpenGL制作基本的2D游戏,我的播放器有一个透明区域的png图像。它在我的笔记本电脑和实验室计算机上运行得非常好,但在我的桌面上,整个图像大部分是透视的,而不仅仅是那些想要的区域。什么可能导致/解决这个问题?

以下是我使用的代码,并且在所有机器上都是相同的

glPushMatrix(); 
glEnable(GL_TEXTURE_2D);    
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBindTexture(GL_TEXTURE_2D, playerTex);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

glTranslatef(XPos, YPos, 0.0);
glRotatef(heading, 0,0,1);
    glBegin(GL_POLYGON);
        glTexCoord2f(0.0, 1.0); glVertex2f(-40,40);
        glTexCoord2f(0.0, 0.0); glVertex2f(-40,-40);
        glTexCoord2f(1.0, 0.0); glVertex2f(40,-40);
        glTexCoord2f(1.0, 1.0); glVertex2f(40,40);
    glEnd();

glDisable(GL_BLEND);
glDisable(GL_TEXTURE_2D);
glPopMatrix();

2 个答案:

答案 0 :(得分:3)

我发现了问题,我改变了

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

并且它正常工作,但不确定为什么。

答案 1 :(得分:2)

设置glColor4f(1,1,1,1)有帮助吗? (我不记得GL_REPLACE是否受到顶点颜色的影响)

在适当的位置检查glGetError(),看看你是否做错了。

其他通用提示:

  • 尝试锁定渲染状态的所有松散末端。
  • 确保您的PNG读取库在任何地方都能正常工作。 (否则在代码中创建纹理数据)
  • 它可能与硬件有关,如果列出操作系统和CPU类型/驱动程序,它会有所帮助。
  • 我假设您在所有计算机上运行相同的可执行文件?