在我的应用程序中进行一些更改后,我的纹理不再显示。到目前为止,我已经检查了以下内容:
- 相机方向没有改变。
- 我可以看到矢量(当着色而不是纹理时)。
有什么常见的嫌疑人吗?
您可能需要检查以下内容:
glEnable(GL_TEXTURE_2D);
在场
glBindTexture(GL_TEXTURE_2D,
texture[i]);
glBindTexture(GL_TEXTURE_2D, 0);
当你不再需要纹理时
我不时遇到的一个常见问题是
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
但我忘了提供 mipmap。快速解决:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
还有几件事要检查:
我假设你已经实现了必须的操作,比如 glEnable(GL_TEXTURE_2D) 和纹理绑定,因为你的纹理之前工作得很好,然后突然它们就不会显示了。
如果您正在执行面向对象的代码,您可能希望在实际执行绘制的线程被实例化时发生纹理生成,换句话说:避免在构造函数中执行它或来自构造函数的调用,这可能会实例化您的纹理窗口或将要使用它的应用程序打开之前的对象。
我通常做的是创建纹理创建的手动 Init 函数,该函数在 App 的 Init 函数中调用。因此,我保证在绑定发生时应用程序存在。
更多信息在这里:http ://www.opengl.org/wiki/Common_Mistakes#The_Object_Oriented_Language_Problem
渲染纹理对象之前的 glColor3ub(255,255,255) 有帮助吗?我认为默认的 OpenGL 状态将当前 glColor 乘以传入的纹素;一个流浪的 glColor3ub(0,0,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,而是使用引擎包装器。否则,您的代码无法与引擎代码的其余部分配合使用。