Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenGL纹理透明度 我用C++和OpenGL制作一个基本的2D游戏,我有一个PNG图像,我的播放器有透明区域。它在我的笔记本电脑和实验室电脑上运行得很好,但在我的桌面上,整个图像大部分都是透明的,而不仅仅是应该显示的区域。什么可以导致/修复此问题_C++_Opengl_Transparency - Fatal编程技术网

OpenGL纹理透明度 我用C++和OpenGL制作一个基本的2D游戏,我有一个PNG图像,我的播放器有透明区域。它在我的笔记本电脑和实验室电脑上运行得很好,但在我的桌面上,整个图像大部分都是透明的,而不仅仅是应该显示的区域。什么可以导致/修复此问题

OpenGL纹理透明度 我用C++和OpenGL制作一个基本的2D游戏,我有一个PNG图像,我的播放器有透明区域。它在我的笔记本电脑和实验室电脑上运行得很好,但在我的桌面上,整个图像大部分都是透明的,而不仅仅是应该显示的区域。什么可以导致/修复此问题,c++,opengl,transparency,C++,Opengl,Transparency,这是我使用过的代码,在所有机器上都是相同的 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); glTransla

这是我使用过的代码,在所有机器上都是相同的

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();
设置glColor4f(1,1,1,1)有帮助吗?(我不记得GL_替换是否受顶点颜色影响)

在适当的位置检查glGetError(),看看您是否做了任何真正错误的事情

其他通用提示:

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

    • 我发现了问题,我改变了

      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
      


      它工作正常,但不知道为什么。

      GL_REPLACE意味着替换顶点颜色(更确切地说,是前一阶段的输出),所以不,它不会影响它。我尝试了glGetError(),但没有从操作系统:Win 7 32位和lab vista 64位CPU:桌面上的Intel E6600中得到任何东西,笔记本电脑图形上的其他一些core 2 duo:在台式机ATI Radeon X1900上,笔记本电脑与Intel集成,因为mipmap不是更自动生成的?@Lucapicioni:Yup,在不同的计算机上结合不同的分辨率。
      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);