2014-09-25 142 views
0

我有一个简单的对象(box.obj),它本质上是一个立方体,但由50个左右的矢量,法线和纹理坐标组成。纹理映射问题OpenGL GLUT

然后,我有我想要映射到它一砖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(); 
} 

让我知道如果我需要发布任何更多的代码,例如。如何读取物体或进行什么操作!

+1

加载几何后,打印所有顶点数据并检查它是否与输入文件匹配。此外,您应该将glBegin()/ glEnd()移动到for循环外(使用GL_TRIANGLES可以一次输出_many_三角形)。使用维也纳国际组织会更好。 – XDnl 2014-09-25 08:58:39

+0

您对顶点和纹理坐标采用相同的索引(v1,v2,v3)。但obj通常为顶点和纹理坐标使用单独的indice集。 – galinette 2014-09-25 09:16:14

+0

目标文件的格式为v x。**,y。**,z。** vt u。** v。** vn x。** y。** z。** f vectorindex/vectorindex/vectorindex vectorindex/vectorindex/vectorindex vectorindex/vectorindex/vectorindex'不确定是否有帮助?想不到你会如何映射纹理... – Finn 2014-09-25 09:36:00

回答

1

我认为你给错了纹理坐标。

您可以在相邻面之间共享顶点,但不能共享纹理坐标。 形象化这个问题看这个图像

http://www.ozone3d.net/~geeks3d/public/satyr/200909/gettingstartedwithblender3/images/TutoScene.001_Cube.png

http://wiki.thedarkmod.com/images/thumb/f/fe/Cube_Representative_UV_Unwrapping.png/800px-Cube_Representative_UV_Unwrapping.png

试图通过了解此图片分配顶点。它基本上将立方体对象展开到纹理平面上。

所以想想你将纹理分配到背面的情况。如果你给予左右,底部和顶部脸部的纹理协调,最终会粘贴该单个脸部上所有四个脸部的整个纹理。

因此,它最终会粘贴在左侧脸上的立方体中具有的卷曲纹理。 查看图像并尝试理解为什么分配给中间行第一个面的左边缘的纹理坐标无法分配到第四个面的右侧边缘。

希望它有帮助。

+0

欢呼,为您的帮助!它对于我正在做的一个uni项目,以及其他一些项目有同样的问题,所以也许它的方形图像文件没有正确映射到立方体对象的纹理坐标? – Finn 2014-09-25 09:28:04