Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 只有第一个对象在OBJ中具有法线_C++_Opengl_Blender_Wavefront - Fatal编程技术网

C++ 只有第一个对象在OBJ中具有法线

C++ 只有第一个对象在OBJ中具有法线,c++,opengl,blender,wavefront,C++,Opengl,Blender,Wavefront,我一直在制作一个.obj文件加载器类。有一次,我试图加载包含多个对象的obj文件,但无法使其工作 现在我意识到,当您将多个对象从Blender导出到obj文件时,只有第一个对象具有法线。有没有办法让它给所有的物体法线,或者我必须自己开始计算它们 在一个obj文件中有两个立方体。您可以看到,只有第一个有“vn…”行 它们都有法线,第二个立方体只引用与第一个立方体相同的法线 您必须意识到v、vt和vn元素的编号在整个文件中都是连续的,因此 o Cube.004_Cube.005 v 3.100306

我一直在制作一个.obj文件加载器类。有一次,我试图加载包含多个对象的obj文件,但无法使其工作

现在我意识到,当您将多个对象从Blender导出到obj文件时,只有第一个对象具有法线。有没有办法让它给所有的物体法线,或者我必须自己开始计算它们

在一个obj文件中有两个立方体。您可以看到,只有第一个有“vn…”行


它们都有法线,第二个立方体只引用与第一个立方体相同的法线

您必须意识到
v
vt
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
唯一的规则是,在a
f
中使用其索引之前,先定义
v
vt
vn
。因此,如果您的解析器对此有问题,请更改解析器以正确读取它

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