在我的应用程序中进行一些更改后,我的纹理不再显示。到目前为止,我已经检查了以下内容:
任何通常的嫌疑人?
答案 0 :(得分:9)
您可能需要查看以下内容:
glEnable(GL_TEXTURE_2D);
在场
glBindTexture(GL_TEXTURE_2D,
texture[i]);
和
glBindTexture(GL_TEXTURE_2D, 0);
当你不再需要纹理时
答案 1 :(得分:2)
还有一些事情需要检查:
答案 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,而是使用引擎包装器。否则,您的代码与其余的引擎代码不一致。