2012-03-24 22 views
0

私は、3Dモデルを作成するために.obj波面ファイルを解析するアンドロイド用の単純なモデルビューアを作成しました。私は、この形式にしていブレンダーからUVマップでテクスチャされたシンプルなicosphereを輸出してい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座標を逆にする必要があります。

EDIT:私がOpenGLの目的のためにクリスチャンラウの一部について懐疑的なものとして解釈していることに対応して、プロパティを実際に使用するものに限定すると、頂点は位置とテクスチャ座標の組み合わせです。それは一緒に二つのことです。あなたはそれらが論理的には異なると思うかもしれませんが、OpenGLはそうではありません。 「どのOBJ頂点がOpenGLに渡されたリストのエントリ23にあるの?」という質問に答えるかもしれません。 "それは頂点46/10です"のような答えで。

読み込み時にDictionaryサブクラス(Hashtableなど)を使用して実装する方法の1つです。頂点46/10を使用する必要が生じた場合は、適切な複合キーを作成し、OpenGL配列のインデックス位置へのマッピングをHashtableでチェックします。見つけられなかった場合は、次の利用可能なインデックスの位置を割り当てて、辞書にレコードを保存します。

だからあなたの質問から、以下:

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 

10個の頂点、頂点1分の103、13/5、3分の48、4分の44、15/2、47であること、それらをもたらします/ 12,105/8,46/10,14/9および46/10である。

+0

だからあなたは彼の質問の画像が正しいテクスチャがちょうど上下反転を示す意味ですか? –

+0

私は楽観的だと思います。テクスチャの座標は質問ごとに自動的にアンラップされているので、逆さまにする必要があると仮定する理由はありません。あなたは明らかに懐疑的なので、OpenGL頂点についての議論を追加します。私はあなたが他の質問について本当に良い答えを出すのを見てきました。 – Tommy

関連する問題