在我的应用程序中进行一些更改后,我的纹理不再显示。到目前为止,我已经检查了以下内容:
- 相机方向没有改变。
- 我可以看到矢量(当着色而不是纹理时)。
任何通常的嫌疑人?
在我的应用程序中进行一些更改后,我的纹理不再显示。到目前为止,我已经检查了以下内容:
任何通常的嫌疑人?
您可能需要检查以下内容:
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);
在渲染纹理对象之前,glColor3ub(255,255,255)是否有帮助?我认为默认的OpenGL状态将当前的glColor乘以输入的纹理元素;一个流浪的glColor3ub(0,0,0)将使你的所有纹理看起来都是黑色的。
我假设您必须执行像glEnable(GL_TEXTURE_2D)和纹理绑定这样的操作,因为您的纹理之前工作正常然后突然他们不会显示。
如果您正在执行面向对象的代码,您可能希望在实际执行绘制的线程实例化时生成纹理,换句话说:避免在构造函数中执行它或者来自构造函数的调用,这可能会实例化您的纹理窗口之前的对象或将要使用它的应用程序打开。
我通常做的是创建一个在App的Init函数中调用的纹理创建的手动Init函数。因此,我保证在绑定发生时App存在。
更多信息: http://www.opengl.org/wiki/Common_Mistakes#The_Object_Oriented_Language_Problem
我花了一些时间想出来......
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,而是使用引擎包装器。否则,您的代码与其余的引擎代码不兼容。