2009-04-11 79 views
11

在我的应用程序中进行了一些更改后,我的纹理不再显示。到目前为止,我已经检查了以下内容:什么是常见的OpenGL纹理故障排除步骤没有显示?

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

任何常见的嫌疑犯?

+0

你没有看到纹理,或者它们是纹理时的对象吗? – dragonfly 2009-04-11 14:19:52

+0

嗯,我知道对象在那里,因为我说过,但我不能确定他们不会以某种方式消失(尽管这不太可能,因为介绍颜色只是1代码更改)... – 2009-04-11 17:19:02

+0

所以你看到对象虽然没有纹理?例如。在一些着色但没有纹理? – dragonfly 2009-04-11 18:27:30

回答

9

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

  • glEnable(GL_TEXTURE_2D);存在

  • glBindTexture(GL_TEXTURE_2D, texture[i]);glBindTexture(GL_TEXTURE_2D, 0); 当你不需要再质感

2

一些事情检查:

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

在渲染纹理对象之前,glColor3ub(255,255,255)有帮助吗?我认为默认的OpenGL状态会将当前的glColor乘以传入的纹素;一个零散的glColor3ub(0,0,0)会让你所有的纹理看起来都是黑色的。

0

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

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

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

此处了解详情:http://www.opengl.org/wiki/Common_Mistakes#The_Object_Oriented_Language_Problem

1

一个共同的问题,我碰到不时为

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); 

,但我忘了供应的贴图。 Quickfix:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
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,而是使用引擎包装。否则,你的代码不能和其他的引擎代码一起玩。