我无法让我的 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 类只是位置、纹理坐标和法线的容器。所以我假设我的向量在班级中的定位是这样的;Vector3f、Vector2f、Vector3f,我会将 glVertexAttributePointer 的最后一个参数设置为 0、12、20。
对我遗漏的任何东西有任何误解吗?我真的不是 openGL 专家,但我确实了解相当多的设置和基本渲染。是什么导致我的纹理不渲染到我的网格,未设置的 GL 状态?