【发布时间】:2014-11-19 23:15:55
【问题描述】:
我有一个简单的对象 (box.obj),它本质上是一个立方体,但由 50 个左右的向量、法线和纹理坐标组成。
然后我想要映射到它的砖块 jpeg 纹理:
我正在使用 jpeglib 将图像导入纹理,一切正常,我的问题在于纹理如何映射到立方体。这就是它最终的样子:
注意奇怪的卷曲侧面和正面和顶部的大砖块。我正在对立方体下方的“桌子”做同样的事情,它应该有木质纹理,但它是模糊/块状的。
这是我用来获取对象/纹理的解析器。这在显示函数中被调用。
for (int i = 0; i < m_nNumPolygon; i++) {
glBegin(GL_TRIANGLES);
glTexCoord2f(m_pUVArray[m_pTriangles[i].v1].u, m_pUVArray[m_pTriangles[i].v1].v);
glNormal3f(m_pNormalArray[m_pTriangles[i].n1].x,
m_pNormalArray[m_pTriangles[i].n1].y,
m_pNormalArray[m_pTriangles[i].n1].z);
glVertex3f(m_pVertexArray[m_pTriangles[i].v1].x,
m_pVertexArray[m_pTriangles[i].v1].y,
m_pVertexArray[m_pTriangles[i].v1].z);
glTexCoord2f(m_pUVArray[m_pTriangles[i].v2].u, m_pUVArray[m_pTriangles[i].v2].v);
glNormal3f(m_pNormalArray[m_pTriangles[i].n2].x,
m_pNormalArray[m_pTriangles[i].n2].y,
m_pNormalArray[m_pTriangles[i].n2].z);
glVertex3f(m_pVertexArray[m_pTriangles[i].v2].x,
m_pVertexArray[m_pTriangles[i].v2].y,
m_pVertexArray[m_pTriangles[i].v2].z);
glTexCoord2f(m_pUVArray[m_pTriangles[i].v3].u, m_pUVArray[m_pTriangles[i].v3].v);
glNormal3f(m_pNormalArray[m_pTriangles[i].n3].x,
m_pNormalArray[m_pTriangles[i].n3].y,
m_pNormalArray[m_pTriangles[i].n3].z);
glVertex3f(m_pVertexArray[m_pTriangles[i].v3].x,
m_pVertexArray[m_pTriangles[i].v3].y,
m_pVertexArray[m_pTriangles[i].v3].z);
glEnd();
}
如果我需要发布更多代码,请告诉我。对象是如何被读取的等等!
【问题讨论】:
-
加载几何图形后,打印所有顶点数据并检查它是否与输入文件匹配。此外,您应该将 glBegin()/glEnd() 移到 for 循环之外(使用 GL_TRIANGLES,您可以一次输出 许多 个三角形)。使用 VBO 会更好。
-
您为顶点和纹理坐标(v1、v2、v3)采用相同的索引。但是 obj 通常为顶点和纹理坐标使用单独的索引集。
-
目标文件格式为
v x.**, y.**, z.** vt u.** v.** vn x.** y.** z.** f vectorindex/vectorindex/vectorindex vectorindex/vectorindex/vectorindex vectorindex/vectorindex/vectorindex不确定是否有帮助?想不出你还能如何映射纹理......
标签: c++ object opengl textures glut