0

私は .obj ファイル ローダー クラスを作成しています。ある時点で、複数のオブジェクトを含む obj-file を読み込もうとしましたが、動作させることができませんでした。

複数のオブジェクトを Blender から obj ファイルにエクスポートすると、最初のオブジェクトだけに法線があることに気付きました。すべてのオブジェクトに法線を与える方法はありますか、それとも自分で計算を開始する必要がありますか?

1 つの obj ファイルに 2 つのキューブがあります。最初のものだけが「vn . . .」を持っていることがわかります。行。

# Blender v2.67 (sub 1) OBJ File: ''
# www.blender.org
mtllib font.mtl
o Cube.004_Cube.005
v 3.100306 -2.415467 -4.025629
v 3.100306 -2.415467 -2.978886
v 2.053563 -2.415467 -2.978886
v 2.053564 -2.415467 -4.025629
v 3.100306 -1.368724 -4.025628
v 3.100305 -1.368724 -2.978886
v 2.053563 -1.368724 -2.978886
v 2.053564 -1.368724 -4.025629
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 0.000000 1.000000
vt 1.000000 1.000000
vn 0.000000 -1.000000 0.000000
vn -0.000000 1.000000 0.000000
vn 1.000000 -0.000000 0.000000
vn -0.000000 -0.000000 1.000000
vn -1.000000 -0.000000 -0.000000
vn 0.000000 0.000000 -1.000000
vn 1.000000 0.000000 0.000001
usemtl Material1
s off
f 1/1/1 2/2/1 4/3/1
f 5/1/2 8/2/2 6/3/2
f 1/1/3 5/2/3 2/3/3
f 2/1/4 6/2/4 3/3/4
f 3/1/5 7/2/5 4/3/5
f 5/1/6 1/2/6 8/3/6
f 2/2/1 3/4/1 4/3/1
f 8/2/2 7/4/2 6/3/2
f 5/2/7 6/4/7 2/3/7
f 6/2/4 7/4/4 3/3/4
f 7/2/5 8/4/5 4/3/5
f 1/2/6 4/4/6 8/3/6
o Cube.003_Cube.004
v 2.891954 -3.616562 -2.073456
v 2.891954 -3.616562 -1.026714
v 1.845212 -3.616562 -1.026714
v 1.845212 -3.616562 -2.073456
v 2.891954 -2.569820 -2.073456
v 2.891954 -2.569820 -1.026713
v 1.845212 -2.569820 -1.026714
v 1.845212 -2.569820 -2.073456
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 0.000000 1.000000
vt 1.000000 1.000000
usemtl Material2
s off
f 9/5/1 10/6/1 12/7/1
f 13/5/2 16/6/2 14/7/2
f 9/5/3 13/6/3 10/7/3
f 10/5/4 14/6/4 11/7/4
f 11/5/5 15/6/5 12/7/5
f 13/5/6 9/6/6 16/7/6
f 10/6/1 11/8/1 12/7/1
f 16/6/2 15/8/2 14/7/2
f 13/6/3 14/8/3 10/7/3
f 14/6/4 15/8/4 11/7/4
f 15/6/5 16/8/5 12/7/5
f 9/6/6 12/8/6 16/7/6
4

1 に答える 1

1

どちらにも法線があり、2 番目の立方体は最初の立方体と同じ法線を参照しています。

vvtおよびvn要素の番号付けがファイル全体で続くことを認識する必要があるため、

o Cube.004_Cube.005
v 3.100306 -2.415467 -4.025629  #v1
v 3.100306 -2.415467 -2.978886  #v2
v 2.053563 -2.415467 -2.978886  #v3
v 2.053564 -2.415467 -4.025629  #v4
vt 0.000000 0.000000            #vt1
vt 1.000000 0.000000            #vt2
vt 0.000000 1.000000            #vt3
vn 0.000000 -1.000000 0.000000  #vn1
usemtl Material1
s off
f 1/1/1 2/2/1 4/3/1

o Cube.003_Cube.004
v 2.891954 -3.616562 -2.073456 #v5
v 2.891954 -3.616562 -1.026714 #v6
v 1.845212 -3.616562 -1.026714 #v7
v 1.845212 -3.616562 -2.073456 #v8
vt 0.000000 0.000000           #vt4
vt 1.000000 0.000000           #vt5
vt 0.000000 1.000000           #vt6
usemtl Material2
s off
f 5/4/1 6/5/1 8/6/1

とまったく同じです

v 3.100306 -2.415467 -4.025629  #v1
v 3.100306 -2.415467 -2.978886  #v2
v 2.053563 -2.415467 -2.978886  #v3
v 2.053564 -2.415467 -4.025629  #v4
v 2.891954 -3.616562 -2.073456  #v5
v 2.891954 -3.616562 -1.026714  #v6
v 1.845212 -3.616562 -1.026714  #v7
v 1.845212 -3.616562 -2.073456  #v8
vt 0.000000 0.000000            #vt1
vt 1.000000 0.000000            #vt2
vt 0.000000 1.000000            #vt3
vt 0.000000 0.000000            #vt4
vt 1.000000 0.000000            #vt5
vt 0.000000 1.000000            #vt6
vn 0.000000 -1.000000 0.000000  #vn1

o Cube.004_Cube.005
usemtl Material1
s off
f 1/1/1 2/2/1 4/3/1

o Cube.003_Cube.004
usemtl Material2
s off
f 5/4/1 6/5/1 8/6/1

唯一のルールは、 でそのインデックスを使用する前にvvtまたはを定義することです。したがって、パーサーがこれに問題がある場合は、パーサーを変更して正しく読み取るようにしてください。vnf

于 2013-08-30T20:01:04.137 に答える