摘录自【三维网格模型层次分割及骨架提取】

 

        三维网格模型可以灵活和逼真的表示现实中的物体,随着计算机硬件快速的发展,人们对三维网格模型的需求也日益增多。三维模型的数据格式有很多种,本文主要采用的是 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