我无法将3D模型设置为纹理,我只是潜入3D模型,因为我一直在使用基本原语进行测试,并且一直在研究更多特定于引擎的代码。我在使用glDrawElements函数时遇到问题,我知道我的纹理已正确加载,因为我能够将其绘制为四边形(请注意注释中的glBegin)。但是,当使用glDrawElements时,我没有得到纹理。它确实显示了部分纹理的颜色(黄色),当我删除纹理代码时,它将3D模型返回到已设置的最后一种颜色,因此它正在做一些事情。我想也许这与我的glVertexAttributePointer有关,我得到了这些函数的功能。
glMatrixMode(GL_MODELVIEW);
glMultMatrixf(m_Props.WorldMatrix.data);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glEnableVertexAttribArray(2);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(VertexPTN), 0);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(VertexPTN), (const GLvoid*)12);
glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, sizeof(VertexPTN), (const GLvoid*)20);
glBindBuffer(GL_ARRAY_BUFFER, pExtra->GetVB());
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, pExtra->GetIB());
glScalef(0.05, 0.05, 0.05);
glEnable(GL_TEXTURE_2D);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, pTexExtra->GetTexture());
glDrawElements(GL_TRIANGLES, pExtra->GetIndexCount(), GL_UNSIGNED_INT, 0);
/*glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f(0.0f, 0.0f, 0.0f);
glTexCoord2f(0, 1); glVertex3f(10.0f, 0.0f, 0.0f);
glTexCoord2f(1, 1); glVertex3f(10.0f, 10.0f, 0.0f);
glTexCoord2f(1, 0); glVertex3f(0.0f, 10.0f, 0.0f);
glEnd();*/
glDisable(GL_TEXTURE_2D);
glDisableVertexAttribArray(2);
glDisableVertexAttribArray(1);
glDisableVertexAttribArray(0);
我的VertexPTN类只是Position,Texture Coordinate和Normal的容器。所以我假设我的向量在课堂上的位置; Vector3f,Vector2f,Vector3f,我将glVertexAttributePointer的最后一个参数设置为0,12,20。
对于我遗失的任何事情有什么误解吗?我真的不喜欢openGL,但我确实理解了相当多的设置和基本渲染。是什么导致我的纹理不渲染到我的网格,一个未设置的GL状态?
答案 0 :(得分:0)
一些想法:
你在使用着色器吗? glVertexAttribPointer仅适用于着色器
此外,如果您正在使用着色器,则启用/禁用GL_TEXTURE_2D是多余的,它不会执行任何操作。