OpenGL纹理没有显示的常见故障排除步骤是什么?

时间:2009-04-11 14:09:12

标签: opengl textures

在我的应用程序中进行一些更改后,我的纹理不再显示。到目前为止,我已经检查了以下内容:

  • 相机方向没有改变。
  • 我可以看到矢量(当着色而不是纹理时)。

任何通常的嫌疑人?

6 个答案:

答案 0 :(得分:9)

您可能需要查看以下内容:

  • glEnable(GL_TEXTURE_2D);在场

  • glBindTexture(GL_TEXTURE_2D, texture[i]);glBindTexture(GL_TEXTURE_2D, 0); 当你不再需要纹理时

答案 1 :(得分:2)

还有一些事情需要检查:

  • glColorMaterial(...);确保颜色不会覆盖纹理
  • glEnable / glDisable(GL_LIGHTING);有时照明可以洗掉纹理
  • glDisable(GL_BLEND);确保你没有混合纹理
  • 确保正确设置纹理坐标。

答案 2 :(得分:1)

我不时遇到的一个常见问题是

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);

但我忘了提供mipmap。的quickfix:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

答案 3 :(得分:0)

在渲染纹理对象之前,glColor3ub(255,255,255)是否有帮助?我认为默认的OpenGL状态将当前的glColor乘以输入的texel;一个迷路glColor3ub(0,0,0)将使你的所有纹理看起来都是黑色。

答案 4 :(得分:0)

我假设您必须执行像glEnable(GL_TEXTURE_2D)和纹理绑定这样的操作,因为您的纹理之前工作正常,然后突然它们将无法显示。

如果您正在执行面向对象的代码,您可能希望在实际执行绘制的线程被实例化时发生纹理生成,换句话说:避免在构造函数中执行它或者来自构造函数的调用,这可能例如,在窗口或要使用它的应用程序打开之前,您的纹理对象。

我通常做的是创建一个在App的Init函数中调用的纹理创建的手动Init函数。因此,我保证在绑定发生时应用程序存在。

此处有更多信息:http://www.opengl.org/wiki/Common_Mistakes#The_Object_Oriented_Language_Problem

答案 5 :(得分:0)

我花了一些时间想出来......

glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glDisable(GL_TEXTURE_GEN_R);
glDisable(GL_TEXTURE_GEN_Q);

还要确保解开你的东西:

glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glBindVertexArray(0);

如果您使用经过优化的第三方引擎,它可能具有直接状态访问权限#34;用于OpenGL的层(不使用慢速OpenGL查询功能)。如果是这样,请不要直接调用OpenGL,而是使用引擎包装器。否则,您的代码与其余的引擎代码不一致。