2011-03-08 21 views
0

我有紋理的立方體這個OBJ文件:紋理從OBJ文件座標用於Android的

# Max2Obj Version 4.0 Mar 10th, 2001 
# 
mtllib cube2.mtl 
g 
# object Cube_1 to come ... 
# 
v -5.500000 0.000000 -1.000000 
v -5.500000 0.000000 1.000000 
v -7.500000 0.000000 1.000000 
v -7.500000 0.000000 -1.000000 
v -5.500000 2.000000 -1.000000 
v -5.500000 2.000000 1.000001 
v -7.500000 2.000000 1.000000 
v -7.500000 2.000000 -1.000000 
v -5.500000 0.000000 -1.000000 
v -5.500000 2.000000 -1.000000 
v -5.500000 2.000000 1.000001 
v -5.500000 0.000000 -1.000000 
v -5.500000 2.000000 1.000001 
v -5.500000 0.000000 1.000000 
v -5.500000 0.000000 1.000000 
v -5.500000 2.000000 1.000001 
v -7.500000 2.000000 1.000000 
v -5.500000 0.000000 1.000000 
v -7.500000 2.000000 1.000000 
v -7.500000 0.000000 1.000000 
v -7.500000 0.000000 1.000000 
v -7.500000 2.000000 1.000000 
v -7.500000 2.000000 -1.000000 
v -7.500000 0.000000 1.000000 
v -7.500000 2.000000 -1.000000 
v -7.500000 0.000000 -1.000000 
v -5.500000 2.000000 -1.000000 
v -5.500000 0.000000 -1.000000 
v -7.500000 0.000000 -1.000000 
v -5.500000 2.000000 -1.000000 
v -7.500000 0.000000 -1.000000 
v -7.500000 2.000000 -1.000000 
# 32 vertices 

vt 0.000500 0.999500 0.000500 
vt 0.000500 0.000500 0.000500 
vt 0.999501 0.000500 0.000500 
vt 0.999501 0.999500 0.000500 
vt 0.999500 0.999500 0.999501 
vt 0.999500 0.000500 0.999501 
vt 0.000499 0.000500 0.999501 
vt 0.000499 0.999500 0.999501 
vt 0.999500 0.000500 0.999500 
vt 0.999500 0.999501 0.999500 
vt 0.000500 0.999501 0.999500 
vt 0.999500 0.000500 0.999500 
vt 0.000500 0.999501 0.999500 
vt 0.000500 0.000500 0.999500 
vt 0.999500 0.000500 0.000500 
vt 0.999500 0.999501 0.000500 
vt 0.000499 0.999501 0.000500 
vt 0.999500 0.000500 0.000500 
vt 0.000499 0.999501 0.000500 
vt 0.000499 0.000500 0.000500 
vt 0.999500 0.000500 0.000499 
vt 0.999500 0.999501 0.000499 
vt 0.000500 0.999501 0.000499 
vt 0.999500 0.000500 0.000499 
vt 0.000500 0.999501 0.000499 
vt 0.000500 0.000500 0.000499 
vt 0.000500 0.999501 0.999500 
vt 0.000500 0.000500 0.999500 
vt 0.999501 0.000500 0.999500 
vt 0.000500 0.999501 0.999500 
vt 0.999501 0.000500 0.999500 
vt 0.999501 0.999501 0.999500 
vt 0.000500 0.999500 0.000500 
vt 0.999501 0.000500 0.000500 
vt 0.999500 0.999500 0.999501 
vt 0.000499 0.000500 0.999501 
# 36 texture vertices 

vn 0.000000 -1.000000 -0.000000 
vn 0.000000 -1.000000 -0.000000 
vn 0.000000 -1.000000 -0.000000 
vn 0.000000 -1.000000 -0.000000 
vn 0.000000 1.000000 -0.000000 
vn 0.000000 1.000000 -0.000000 
vn 0.000000 1.000000 -0.000000 
vn 0.000000 1.000000 -0.000000 
vn 1.000000 0.000000 -0.000000 
vn 1.000000 0.000000 -0.000000 
vn 1.000000 0.000000 -0.000000 
vn 1.000000 0.000000 -0.000000 
vn 1.000000 0.000000 -0.000000 
vn 1.000000 0.000000 -0.000000 
vn -0.000000 -0.000000 1.000000 
vn -0.000000 -0.000000 1.000000 
vn -0.000000 -0.000000 1.000000 
vn 0.000000 0.000000 1.000000 
vn 0.000000 0.000000 1.000000 
vn 0.000000 0.000000 1.000000 
vn -1.000000 0.000000 -0.000000 
vn -1.000000 0.000000 -0.000000 
vn -1.000000 0.000000 -0.000000 
vn -1.000000 0.000000 -0.000000 
vn -1.000000 0.000000 -0.000000 
vn -1.000000 0.000000 -0.000000 
vn 0.000000 0.000000 -1.000000 
vn 0.000000 0.000000 -1.000000 
vn 0.000000 0.000000 -1.000000 
vn 0.000000 0.000000 -1.000000 
vn 0.000000 0.000000 -1.000000 
vn 0.000000 0.000000 -1.000000 
# 32 vertex normals 

g Cube_1 
usemtl 01_-_Default_1 
s 0 
f 1/33/1 2/2/2 3/34/3 
f 1/1/1 3/3/3 4/4/4 
f 5/35/5 8/8/8 7/36/7 
f 5/5/5 7/7/7 6/6/6 
f 9/9/9 10/10/10 11/11/11 
f 12/12/12 13/13/13 14/14/14 
f 15/15/15 16/16/16 17/17/17 
f 18/18/18 19/19/19 20/20/20 
f 21/21/21 22/22/22 23/23/23 
f 24/24/24 25/25/25 26/26/26 
f 27/27/27 28/28/28 29/29/29 
f 30/30/30 31/31/31 32/32/32 
# 12 faces 

g 

正如你所看到的VT有每行3個條目。這是否意味着它是3d紋理而不是2d? Android僅支持2d紋理。那麼這是否意味着上面的OBJ文件將無法在Android中工作? 我可以解析OBJ並獲得float [] textcoordinates = [0.000500,0.999900,0.000500,0.000500,0.000500,0.000500,.....]這些正確的前2個tex座標是否需要輸入到OpenGL-ES?或者,我需要從OBJ文件中的f個數字中將AFAIK索引中的紋理座標繪製到紋理座標中,以計算正確的tex座標。所以我不確定哪個是正確的。有OpenGL-ES和OBJ文件格式經驗的人可以清除所有這些。

回答

1

這個模型實際上是使用3d紋理。 OBJ文件格式的細節在http://paulbourke.net/dataformats/obj/描述,這裏是關於紋理部分座標:

VT U V W

頂點聲明兩個多邊形和自由幾何形狀。

指定紋理頂點及其座標。 1D紋理 僅需要u紋理座標,2D紋理需要u和 和v紋理座標,而3D紋理需要所有三個座標。

來自obj文件的頂點數據不能直接傳遞給opengl。您必須設置您的數組,以便每個數組中的相應索引屬於同一個頂點。例如,模型(1/33/1)中第一個面的第一個頂點由

  • 第一個「v」行的頂點座標組成。
  • 來自33.「vt」行的紋理座標。
  • 來自第一個「vn」行的法線向量。

設置opengl的最簡單方法是遍歷所有面,獲取頂點,紋理和法線值並將它們附加到新數組中。

+0

謝謝。我會檢查這一點,一旦完成就會有反饋。 – ace 2011-03-13 09:39:00

+0

我在原始問題中發現了這個問題。現在使用更多實際的OBJ文件,其中有多個usemtl語句,後面跟着更多的f語句以及更多的v和vt vn語句。我不確定是否需要在同一緩衝區中累積每個v,vt,vn語句的每個新系列,或者爲每個v vn vt語句系列創建單獨的緩衝區? – ace 2011-03-15 14:27:03