繁体   English   中英

OpenGL纹理透明度

[英]OpenGL Texture 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();

我发现了问题,我改变了

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

它可以正常工作,但不确定为什么。

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

在适当的地方检查glGetError(),看看您是否确实做错了什么。

其他通用提示:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM