2012-03-24 243 views
0

我已經寫了一個簡單的android模型查看器,解析一個.obj波前文件來創建一個3d模型。我導出一個簡單的icosphere已紋理用UV貼圖從攪拌機自帶這種格式opengl es 2.0紋理座標

v 0.000000 -1.000000 0.000000 
v 0.723600 -0.447215 0.525720 
v -0.276385 -0.447215 0.850640 
. 
. 
. 
v -0.723600 0.447215 -0.525720 
v 0.276385 0.447215 -0.850640 
v 0.894425 0.447215 0.000000 
vt 0.238062 0.172144 
vt 0.314133 0.212645 
vt 0.264721 0.263452 
. 
. 
. 
vt 0.176955 0.098382 
vt 0.327646 0.115775 
vt 0.361262 0.040083 
f 103/1 15/2 48/3 
f 48/3 44/4 103/1 
f 13/5 103/1 44/4 
. 
. 
. 
f 47/12 105/8 46/10 
f 14/9 46/10 105/8 
f 105/8 47/12 15/2 

「V」代表了頂點,「VT」表示紋理座標和「F」代表面孔其中正斜槓之前的值是與頂點相對應的索引,並且斜槓之後的值是與紋理座標相對應的索引。我的問題是我不知道如何將紋理座標索引輸入到opengl中,所以我的當前模型看起來很奇怪,因爲紋理座標不匹配。

enter image description here

回答

0

OBJ限定的紋理內的原點是在左上方。 OpenGL將其定義在左下角。您需要反轉從OBJ進入的y座標。

編輯:爲了迴應我對Christian Rau的下面部分的懷疑,對於OpenGL的目的,並將屬性限制爲只是實際使用的屬性,頂點是位置和紋理座標的組合。這是兩件事情在一起。你可能認爲它們邏輯上不同,但OpenGL不是。你可能會回答這個問題:「哪個OBJ頂點在傳遞給OpenGL的列表中的條目23?」與「這是頂點46/10」的答案。

通過任何字典子類(例如Hashtable)加載時實現的一種方法。當遇到需要使用頂點46/10的時候,你會創建一個合適的組合鍵,並檢查Hashtable是否映射到OpenGL數組索引位置。如果你找不到一個,你會分配下一個可用的索引位置並在你的字典中存儲一條記錄。

所以下面,從你的問題:

f 103/1 15/2 48/3 
f 48/3 44/4 103/1 
f 13/5 103/1 44/4 
. 
. 
. 
f 47/12 105/8 46/10 
f 14/9 46/10 105/8 
f 105/8 47/12 15/2 

產生十個頂點,它們是頂點1分之103,13/5,48/3,44/4,15/2,47/12號,第105/8號,第46/10號,第14/9號和第46/10號決議。

+0

所以你的意思是在他的問題中的圖像顯示正確的紋理只是垂直翻轉? – 2012-03-24 19:10:42

+0

我很樂觀,情況就是如此。每個問題的紋理座標已經自動解開,所以沒有理由認爲它看起來應該是倒過來。我會添加一個關於OpenGL頂點的討論,因爲你顯然對此持懷疑態度,我已經看到你在其他問題上給出了很好的答案。 – Tommy 2012-03-24 19:42:00