3

Android で地球儀を描画しようとしています。これには OpenGL を使用します。ただし、理解しやすくするために、単純な 3D 立方体を作成することから始めます。Blender を使用して 3D オブジェクト (キューブ) を作成し、ラップを解除してテクスチャ座標 (vt) を取得した後、それを .obj ファイルとしてエクスポートします。問題は、8 つの異なる頂点と 9 つの異なるテクスチャ座標を取得することです。

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 -1.000000 V 0.99999.0000 -10000 -100000000-000000000000-0000000000-0000000000-0000000000-000 1.000000 VT -1.000000 -1.000000 VT -1.000000 0.000000 VT 0.000000 1.000000 VT 1.000000 1.000000 VT 1.000000 0.000000 VT -1.000000 1.000000 VT 1.000000 -1.000000












したがって、頂点の位置に一致するようにテクスチャ座標の位置を再配置することを不可能にする、インデックスの実際のめちゃくちゃなセットアップも取得します。

f 5/1 1/2 4/3
f 5/1 4/3 8/4
f 3/1 7/5 8/6
f 3/1 8/6 4/7
f 2/1 6/5 3/4
f 6/7 7/1 3/2
f 1/1 5/5 2/4
f 5/7 6/1 2/2
f 5/5 8/8 6/1
f 8/1 7/2 6/9
f 1/1 2/2 3/3
f 1/1 3/3 4/4

1つの頂点が頂点とテクスチャ座標の両方で構成されているため、インデックスに1つの配列しか使用できないことがわかりました。そのため、v/vt 配列の 1 つを少し再配置する必要があります。しかし、vt (位置 1) を位置 5 (面の最初の行) に移動すると、インデックス配列全体に移動するためにもう一度移動する必要があるため、できません。

基本的に、これはプログラム「Blender」の問題なのか、それとも適用できる解決策があるのか​​ 疑問に思います。

4

1 に答える 1

2

そこにあるものは完全に正常であり、実際、立方体が適切にアンラップされていれば、9 つ以上のテクスチャ座標が表示されると予想されます。キューブがアンラップされる一般的な方法で行われた場合、実際には 12 個の vts が必要になると思います。

全体の頂点は、通常、xyz 座標、法線座標、テクスチャ座標で構成されます。これらのパーツがすべて同じである場合、1 つの Vertex は (OpenGL のインデックス配列に関して) 1 つのインデックス位置しか保持できません。面がどのように定義されているかを見ると、それらは av と vt の両方で構成される頂点で構成されています。法線もある場合は、使用される各法線 (または OBJ エクスポートの vn 行) を表す追加の番号があります。面では、頂点 5/1、5/5、および 5/7 を取ります。xyz 座標は同じですが、テクスチャ座標は異なります。これは、ラップを解除すると、3D 空間の同じポイントが UV/画像エディターの 3 か所に表示されるためです。このため、OpenGL 側のインデックス配列には 3 つの個別のインデックスが存在します。

于 2011-05-01T03:46:48.117 に答える