摘录自【三维网格模型层次分割及骨架提取】
三维网格模型可以灵活和逼真的表示现实中的物体,随着计算机硬件快速的发展,人们对三维网格模型的需求也日益增多。三维模型的数据格式有很多种,本文主要采用的是 OFF 和 OBJ 数据格式的模型。三维网格模型是由顶点和三角面片组合而成的,通过顶点信息定义出边的信息,接着通过边的信息构成面片的信息。最终三维网格模型由这一个个三角面片组合而成。下面本文将详细介绍三维网格模型中的OFF文件和OBJ文件。
OFF 格式
相较于 OBJ 文件格式,OFF 文件的存储信息格式要更为简单一些。
off文件为ASCII文件,以OFF关键字开头。
在文件的开头注明顶点、面片和边的总数。
文件内部只包含顶点和面片的信息,前半部分是顶点坐标,每一行都是由面片的三个顶点的坐标值组成,
顶点以x,y,z坐标列出,每个顶点占一行。
不同于 OBJ 文件,OFF 文件的后半部分是面片信息,
OFF 文件的面片信息的表示很简单,如 3 a b c,3 在 OFF 文件中相当于OBJ文件中面片的标志 f,a,b,c,分别表示组成一个面片的三个顶点的索引号。
在顶点列表之后是面列表,每个面占一行。对于每个边,首先指定其包含的顶点数,随后是这个面所包含的各顶点在前面顶点列表中的索引。
OFF 文件中边的数量总是忽略不计的,表示为 0。因为 OFF 文件的格式简单,很多在做三维模型数据输出的时候,采用 OFF 文件的格式。
OFF文件格式:
OFF
顶点数 面数 边数
x y z
x y z
…
n个顶点 顶点1的索引 顶点2的索引 … 顶点n的索引
…
OFF文件实例:
下面是一个立方体的例子:
OFF
8 6 0
-0.500000 -0.500000 0.500000
0.500000 -0.500000 0.500000
-0.500000 0.500000 0.500000
0.500000 0.500000 0.500000
-0.500000 0.500000 -0.500000
0.500000 0.500000 -0.500000
-0.500000 -0.500000 -0.500000
0.500000 -0.500000 -0.500000
4 0 1 3 2
4 2 3 5 4
4 4 5 7 6
4 6 7 1 0
4 1 7 5 3
4 6 0 2 4
OBJ 格式
OBJ 格式的三维网格模型存储了模型的顶点、面片、法向量、纹理等几何信息。
v是表示顶点,后面的 3 个浮点数,分别表示该顶点的 X、Y、Z 坐标值。
f 表示面片,后面的三个整数分别表示面片三个顶点的序列号。这是 OBJ 文件中必不可少的文件信息,
除了顶点和面片信息,OBJ 文件中还包含其它各种用于绘制的属性信息,如 vt 和 vn,
vt 表示指定一个纹理坐标,后面的两个浮点数,分别表示此纹理坐标的 U、V 值。
vn 表示指定一个顶点法线向量,后面的 3 个浮点数,分别表示该法向量的 X、Y、Z 坐标值。
下面简单介绍一下 OBJ 文件定义面片信息的几种格式:
(1) f a b c
这是最简单的面片信息,面片 f 是由三个顶点序列号组成,不包含纹理和法向量的信息,
f 后面的三个整数分别表示模型顶点的索引,三个顶点组成一个三角面片。
(2) f a/a1 b/b1 c/c1
a、b、c 分别表示构成此面片的三个顶点的索引号,
其中 a1,b1,c1 分别表示每个顶点纹理坐标的索引值。
(3) f a//a2 b//b2 c//c2
a、b、c 分别表示构成此面片的三个顶点的索引号,
a2,b2,c2 分别表示三个顶点法向量的索引值。
(4)f a/a1/a2 b/b1/b2 c/c1/c2
a、b、c 分别表示构成此面片的三个顶点的索引号,
a1,b1,c1 分别表示三个顶点的纹理坐标的索引值,
a2,b2,c2 分别表示三个顶点法向量的索引值。
OBJ文件实例:
OBJ文件记录一个四边形:
v -0.58 0.84 0
v 2.68 1.17 0
v 2.84 -2.03 0
v -1.92 -2.89 0
f 1 2 3 4