2014-09-25 188 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