我在OpenGL ES 2.0的objc中編寫了我自己的.obj解析器,以更好地理解OpenGLES的工作原理。加載頂點並顯示頂點顏色的模型就像魅力一樣。請注意:我正在使用索引緩衝區。解決波陣面.obj紋理座標的麻煩
真正的問題是紋理atm的映射。正如你會在下面看到更多,我的紋理沒有按照它應該的方式進行映射。
下面是我認爲.obj格式的工作原理,如果我錯了,請糾正我的錯誤:「f」-lines描述了一個面,其中斜線前的數字定義頂點索引和斜線後面的數字定義一個紋理座標。
考慮以下obj文件(通過四維影院出口):
v -75 75 -50
v 75 75 -50
v -75 -75 -50
v 75 -75 -50
vt 0 0
vt 0 1
vt 1 1
vt 1 0
f 4/3 3/2 1/1
f 2/4 4/3 1/1
而且質地如下:
現在,當我位置的OpenGL ES 3D空間中的頂點並嘗試將紋理座標映射到每個單獨的頂點,映射出錯。我可以通過移動一些紋理座標值來解決這個問題,但我意識到這不是做到這一點的方法。我還嘗試編輯一些.obj導出器設置來翻轉軸和/或uv映射,但其中不包含導致正確的映射。我的理論中有沒有關於.obj文件格式的內容?有一件事我可能已經說過了:昨天我讀到了.obj格式的座標系將topleft定義爲紋理的錨點。所以我解決了這個問題。
下面是對當前情況的小結: 更新:紋理的座標系是實際的.obj紋理座標系而非OpenGL的座標系。我翻譯我的解析算法中的座標來解決這個問題。
在座標系上添加了說明。 – polyclick 2012-01-13 16:08:47
仔細看看.obj文件中的「v」和「vt」值是如何關聯的。 OpenGL不會像處理OBJ文件一樣處理紋理座標(和法線)。因此,如果沒有「移動某些紋理座標值」,則會將紋理的左下角映射到右上角,反之亦然。請記住,您不能獨立於OpenGL中的頂點索引來進行紋理座標索引。請參閱http://stackoverflow.com/questions/4233152/how-to-setup-calculate-texturebuffer-in-gltexcoordpointer-when-importing-from-ob – Thalur 2012-01-27 13:59:06
您是否找到了解決方案? – 2012-05-31 16:32:54