我已經實現了將3DS文件加載到我的OpenGL程序中的能力,並遇到一個小問題。所有的頂點都被正確放置,並且繪製了面,但問題是大部分(或全部)頂點似乎保留了與一個或兩個頂點的連接,從而創建了大量額外的邊。任何人遇到這個問題之前,或者有什麼我可以修復它的建議?如何正確渲染3ds文件中的面孔
下面的代碼塊是我用來繪製面部的循環。它一次循環一個頂點,在理論上跳過每一個第四個值,因爲它們是未使用的面部修改器。
glBegin(GL_TRIANGLES);
for(int x = 1; x < 4*numberOfTriangles+1; x++)
{
//Face bit modifiers not needed, skip em.
if(tLoop == 4)
{
tLoop = 0;
continue;
}
else
{
glVertex3f(Vertices[Triangles[x]*3],Vertices[(Triangles[x]*3)+1],Vertices[(Triangles[x]*3)+2]);
tLoop++;
}
}
glEnd();
接下來是代表我遇到的問題的圖像。 http://img.photobucket.com/albums/v298/Reaperc89/Pistol.jpg
如果不知道3ds文件中的網格數據是什麼,這很難排除故障。這可能是因爲網格存儲爲索引三角形(即作爲一組索引(其中每個3個索引集引用三個三維的頂點)以及一組頂點)。 – axon
3ds文件網格數據一個接一個地存儲頂點,而面數據存儲爲表示頂點的3個索引。例如對於一個立方體來說,臉部一個的三個索引可能是4,0和7.這些將與頂點列表中的第5,第1和第8個頂點相關聯。還有第四個值也是面部數據的一部分,但它們是位面標誌修改器,對於構建幾何圖形不是必需的。 – Evan
你爲什麼以'x = 1'而不是'x = 0'開頭?如果每個第四個元素都帶有'if(x%4 == 3)''而不是單獨的變量,那麼你可以跳過,儘管我建議不讀取你不想要的值(或者展開循環,這樣每次迭代繪製一個三角形)。 – user786653