2012-04-21 3 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()を使用できません。頂点座標をテクスチャ座標に1対1でマッピングする必要はありますか?

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

私が望むように効率的なAPIが存在しなければならないと思います。

+1

ASSIMPライブラリは、あなたのために.objファイルをロードし、必要に応じてすべてを設定します。ただし、モデルを使用するにはGLオブジェクトを生成する必要があります。 – Robinson

答えて

0

残念ながら、OpenGLには、あなたが望むことを実行するための効率的なAPIはありません。頂点配列/バッファでOBJを使用したい場合は、指定された頂点とテクスチャをすべて分解し、頂点の数とテクスチャの数が同じになるようにそれらを再構成し、頂点とテクスチャを複製する必要があります必要に応じて。

検索すると、これを行う方法についていくつか質問があります。

関連する問題