常见到的*.obj文件有两种:第一种是基于COFF(Common Object File Format)格式的OBJ文件(也称目标文件),这种格式用于编译应用程序;第二种是Alias|Wavefront公司推出的OBJ模型文件。本文对第二种obj模型文件进行分析。

OBJ文件是一种标准的3D模型文件格式,很适合用于3D软件模型之间的互导。

obj文件

OBJ文件 -- 特点

1.OBJ是一种3D模型文件,因此不包含动画、材质特性、贴图路径、动力学、粒子等信息。

2.OBJ文件主要支持多边形(Polygons)模型。

虽然OBJ文件也支持曲线(Curves)、表面(Surfaces)、点组材质(Point Group Materials),但Maya导出的OBJ文件并不包括这些信息。

3.OBJ文件支持三个点以上的面,这一点很有用。

很多其它的模型文件格式只支持三个点的面,所以我们导入Maya的模型经常被三角化了,这对于我们对模型的再加工甚为不利。

4.OBJ文件支持法线和贴图坐标。

在其它软件中调整好贴图后,贴图坐标信息可以存入OBJ文件中,这样文件导入Maya后只需指定一下贴图文件路径就行了,不需要再调整贴图坐标了。

OBJ文件每行的格式

oBJ文件由一行行文本组成,注释行以一个“#”为开头,空格和空行可以随意加到文件中以增加文件的可读性。有字的行都由一两个标记字母也就是关键字(Keyword)开头,关键字可以说明这一行是什么样的数据。多行可以逻辑地连接在一起表示一行,方法是在每一行最后添加一个连接符()。

注意连接符()后面不能出现空格或tab格,否则将导致文件出错。

OBJ模型行关键字

顶点数据(Vertex data):

关键字含义
v几何体顶点 (Geometric vertices)
vt贴图坐标点 (Texture vertices)
vn顶点法线 (Vertex normals)
vp参数空格顶点 (Parameter space vertices)

自由形态曲线(Free-form curve)/表面属性(surface attributes):

关键字含义
deg度 (Degree)
bmat基础矩阵 (Basis matrix)
step步尺寸 (Step size)
cstype曲线或表面类型 (Curve or surface type)

元素(Elements):

关键字含义
p点 (Point)
l线 (Line)
f面 (Face)
curv曲线 (Curve)
curv22D曲线 (2D curve)
surf表面 (Surface)

自由形态曲线(Free-form curve)/表面主体陈述(surface body statements):

关键字含义
parm参数值 (Parameter values )
trim外部修剪循环 (Outer trimming loop)
hole内部整修循环 (Inner trimming loop)
scrv特殊曲线 (Special curve)
sp特殊的点 (Special point)
end结束陈述 (End statement)

自由形态表面之间的连接(Connectivity between free-form surfaces):

关键字含义
con连接 (Connect)

成组(Grouping):

关键字含义
g组名称 (Group name)
s光滑组 (Smoothing group)
mg合并组 (Merging group)
o对象名称 (Object name)

显示(Display)/渲染属性(render attributes):

关键字含义
bevel导角插值 (Bevel interpolation)
c_interp颜色插值 (Color interpolation)
d_interp溶解插值 (Dissolve interpolation)
lod细节层次 (Level of detail)
usemtl材质名称 (Material name)
mtllib材质库 (Material library)
shadow_obj投射阴影 (Shadow casting)
trace_obj光线跟踪 (Ray tracing)
ctech曲线近似技术 (Curve approximation technique)
stech表面近似技术 (Surface approximation technique)

在一个0BJ文件中,首先有一些以v、vt或vn前缀开头的行指定了所有的顶点、纹理坐标、法线的坐标。然后再由一些以f开头的行指定每一个三角形所对应的顶点、纹理坐标和法线的索引。在顶点、纹理坐标和法线的索引之间,使用符号“/”隔开的。

一个f行可以以下面几种格式出现:

f 1 2 3

这样的行表示以第1、2、3号顶点组成一个三角形。

f 1/3 2/5 3/4

这样的行表示以第1、2、3号顶点组成一个三角形,其中第一个顶点的纹理坐标的索引值为3,第二个顶点的纹理坐标的索引值为5,第三个顶点的纹理坐标的索引值为4。

f 1/3/4 2/5/6 3/4/2

这样的行表示以第1、2、3号顶点组成一个三角形,其中第一个顶点的纹理坐标的索引值为3,其法线的索引值是4;第二个顶点的纹理坐标的索引值为5,其法线的索引值是6;第三个顶点的纹理坐标的索引值为6,其法线的索引值是2。

f 1//4 2//6 3//2

这样的行表示以第1、2、3号顶点组成一个三角形,且忽略纹理坐标。其中第一个顶点的法线的索引值是4;第二个顶点的法线的索引值是6;第三个顶点的法线的索引值是值得注意的是文件中的索引值是以1作为起点的,这一点与Delphi中以0作为起点有很大的不同。在渲染的时候应注意将从文件中读取的坐标值减去1。

标签: none

添加新评论