2012-04-21 45 views
0

我正在製作一個給定obj文件的程序,它將呈現模型。目前它的工作原理沒有紋理貼圖,但是我想實現這個功能,讀取材質庫文件。在從obj文件加載的模型上映射紋理的有效方法

但我看到頂點的數量可以不同於紋理座標的數量。看這個例子:

# Blender v2.58 (sub 0) OBJ File: '' 
# www.blender.org 
mtllib /home/frenk/Documenti/Progetti/dado.mtl 
o Cube 
v 1.000000 -1.000000 -1.000000 
v 1.000000 -1.000000 1.000000 
v -1.000000 -1.000000 1.000000 
v -1.000000 -1.000000 -1.000000 
v 1.000000 1.000000 -0.999999 
v 0.999999 1.000000 1.000001 
v -1.000000 1.000000 1.000000 
v -1.000000 1.000000 -1.000000 
vt 0.593772 0.740196 
vt 0.593666 0.869263 
vt 0.394866 0.869219 
vt 0.394973 0.740152 
vt 0.792572 0.740240 
vt 0.993810 0.740284 
vt 0.993703 0.869351 
vt 0.792466 0.869307 
vt 0.792360 0.995233 
vt 0.593560 0.995189 
vt 0.593984 0.482061 
vt 0.792784 0.482105 
vt 0.792678 0.611172 
vt 0.593878 0.611129 
usemtl dado_verde_dado.tga 
s off 
f 1/1 2/2 3/3 4/4 
f 5/5 8/6 7/7 6/8 
f 1/1 5/5 6/8 2/2 
f 2/2 6/8 7/9 3/10 
f 3/11 7/12 8/13 4/14 
f 5/5 1/1 4/14 8/13 

所以我不能使用函數drawElements(),因爲索引不匹配。我是否將頂點座標映射到紋理座標,一對一?

//example 
glBegin(GLTriangles); 
gltexcoord2f(...); glvertex3f(...); 
... 
blaBlaBla(...); 
... 
glEnd(); 

我認爲一個高效的API必須存在做我想做的。

+1

ASSIMP庫會爲您加載.obj文件,並根據需要設置所有內容。但是,您仍然必須生成GL對象才能使用模型。 – Robinson 2012-04-21 19:53:51

回答

0

不幸的是OpenGL沒有高效的API來做你想做的事情。如果你想使用OBJ與頂點數組/緩衝區,你將不得不分解所有的頂點和texcoords給你,並重新組合它們在數組中,使頂點的數量和texcoords的數量是相同的,複製頂點和texcoords如所須。

如果你搜索,我相信你會發現如何做到這一點的幾個問題。