0

.objwavefrontファイルを解析して3Dモデルを作成するAndroid用のシンプルなモデルビューアを作成しました。この形式のblenderからUVマップでテクスチャリングされた単純なicosphereをエクスポートしています

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」は頂点に対応するインデックスであるスラッシュの前の値とスラッシュの後の値がテクスチャ座標に対応するインデックスである面を表します。私の問題は、テクスチャ座標インデックスをopenglesに入力する方法がわからないため、テクスチャ座標が一致しないため、現在のモデルが非常に奇妙に見えることです。

ここに画像の説明を入力してください

4

1 に答える 1

0

OBJは、テクスチャ内の原点を左上に定義します。OpenGLは、左下にあると定義しています。OBJから入ってくるy座標を反転する必要があります。

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

ロード時にそれを実装する1つの方法は、Dictionaryサブクラス(Hashtableなど)のいずれかを使用することです。頂点46/10を使用する必要がある場合は、適切な複合キーを作成し、ハッシュテーブルでOpenGL配列のインデックス位置へのマッピングを確認します。見つからなかった場合は、次に使用可能なインデックス位置を割り当てて、辞書にレコードを保存します。

したがって、あなたの質問から、次のようになります。

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個の頂点を生成します。これらは、頂点103 / 1、13 / 5、48 / 3、44 / 4、15 / 2、47 / 12、105 / 8、46 / 10、14 / 9、および46/10です。

于 2012-03-24T19:06:11.580 に答える