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

问题描述 投票:12回答:6

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

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

任何通常的嫌疑人?

opengl textures
6个回答
9
投票

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

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

2
投票

还有一些要检查的事情:

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

1
投票

我经常遇到的一个常见问题是

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);

但我忘了提供mipmap。快速解决:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

0
投票

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


0
投票

我假设您必须具有像glEnable(GL_TEXTURE_2D)和纹理绑定一样的操作,因为您的纹理之前工作正常,然后突然他们不会显示。

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

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

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


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);

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

© www.soinside.com 2019 - 2024. All rights reserved.