自己也没建过3D模型,但在学习中碰到了这类文件,虽然不是很懂,但还是记录一下。
下面就是一个.ojb文件里的内容。
v -0.500000 -0.500000 0.500000
v 0.500000 -0.500000 0.500000
v -0.500000 0.500000 0.500000
v 0.500000 0.500000 0.500000
v -0.500000 0.500000 -0.500000
v 0.500000 0.500000 -0.500000
v -0.500000 -0.500000 -0.500000
v 0.500000 -0.500000 -0.500000
vt 0.001992 0.001992
vt 0.998008 0.001992
vt 0.001992 0.998008
vt 0.998008 0.998008
vt 0.001992 0.001992
vt 0.998008 0.001992
vt 0.001992 0.998008
vt 0.998008 0.998008
vt 0.001992 0.001992
vt 0.998008 0.001992
vt 0.001992 0.998008
vt 0.998008 0.998008
vt 0.001992 0.001992
vt 0.998008 0.001992
vt 0.001992 0.998008
vt 0.998008 0.998008
vt 0.001992 0.001992
vt 0.998008 0.001992
vt 0.001992 0.998008
vt 0.998008 0.998008
vt 0.998008 0.998008
vt 0.001992 0.998008
vt 0.998008 0.001992
vt 0.001992 0.001992
vn 0.000000 0.000000 1.000000
vn 0.000000 0.000000 1.000000
vn 0.000000 0.000000 1.000000
vn 0.000000 0.000000 1.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 -1.000000 0.000000
vn 0.000000 -1.000000 0.000000
vn 0.000000 -1.000000 0.000000
vn 0.000000 -1.000000 0.000000
vn 1.000000 0.000000 0.000000
vn 1.000000 0.000000 0.000000
vn 1.000000 0.000000 0.000000
vn 1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
f 1/1/1 2/2/2 3/3/3
f 3/3/3 2/2/2 4/4/4
f 3/13/5 4/14/6 5/15/7
f 5/15/7 4/14/6 6/16/8
f 5/21/9 6/22/10 7/23/11
f 7/23/11 6/22/10 8/24/12
f 7/17/13 8/18/14 1/19/15
f 1/19/15 8/18/14 2/20/16
f 2/5/17 8/6/18 4/7/19
f 4/7/19 8/6/18 6/8/20
f 7/9/21 1/10/22 5/11/23
f 5/11/23 1/10/22 3/12/24
该obj得到的模型(立方体)如下:
现在来解释各参数的含义:
v: 表示顶点,即组成图的点,如立方体有8个顶点,每个顶点有x,y,z三个值。
vt: 纹理坐标,其值为u, v。纹理应该是指某个面的粗糙程度(我暂且没看出这个变化),那纹理为什么有坐标呢?想象一块可以自由拉伸的布,坐标表示这个布的一角要放在这个位置,这就是纹理坐标。我们知道一个面最少由三个顶点才能构成,如果此时将一块布拉伸到这三个顶点上,则这块布会变成一个三角形。
vn:顶点法向量,其值为x,y,z,你可能好奇为什么顶点有法向量,其实这个法向量是表示顶点的朝向。如果有三个顶点组成一个面,面是有两个朝向,向里或向外,所以可以通过顶点的朝向来确定面的朝向。而且这三个顶点的法向量是一样的。
f:表示一个面,由三个v/vt/vn的索引形式组成。比如obj文件中f 5/15/7 4/14/6 6/16/8 ,表示由第5、第4、第6这三个顶点组成了一个三角平面,平面的纹理由第15、第14、第16这三个纹理坐标形成,这个平面的朝向是第7、第6、第8这三个顶点的法向量求平均值。