-
Obj
与
mtl
文件格
式详解
obj
文件格式是
Wavefront
公司为它的一套基
于工作站的
3D
建模和动画软件
< br>Visualizer
开发的一种文件格式。
OBJ
文件是一种标准的
3D
< br>模型文件格式,
很
适合用于
3D
软件模型之间的互导。
OBJ
文件
p>
是一种文本文件格式,
这就意味着你可以直接
用写字板打开进行查看修改。
目前几乎所有知
名的
3D
软件都支持
OBJ
文
件的读写,不过
很多软件需要通过插件才能
< br>做到这一点。另
外,
作为一种优秀的文件格式,
很多游戏引擎
也都支持
OBJ
< br>文件。
OBJ3.0
格
式
支
持
多
边
形
(Polygon)
,
直
线
(Lines)
,表面
(Surfaces)
,和自由形态曲线
(Free-form
Curves)
。直
线和多角形通过它们
的点来描述,
曲线和表面则根据于它们的控
制
点和依附于曲线类型的额外信息来定义。
这些
信息支持规则和不规则的曲线,
包括那些基于
贝塞尔<
/p>
(Bezier)
曲线,
B
样条
(B-spline)
,
基数
(Cardinal/Catmull-Rom
样条
)
,和泰勒方程
(Taylor equations)
的曲线。
OBJ
文件特点
-1-
OBJ
是一种
3D
模型文件,因此不包
含动画、材质特性、贴图路径、动力学、粒子
等信息。
-2-
p>
OBJ
文件主要支持多边形
(Polygo
ns)
模型。
虽然
OBJ
文件也支持曲线
(Curves)
、表面
(Surfaces)
、
点
组
材
质
(Point
Group
Materials)
,但
Maya
导出的
OB
J
文件并不包
括这些信息。
-3- OBJ
< br>文件支持三个点以上的面,这一
点很有用。
很多其它的模型文件格式只支持三个点的面,
所以我们导入
Maya
的模型经常被三角化了,
这对于我们对模型
的再加工甚为不利。
-4-
OBJ
文件支持法线和贴图坐标。
OBJ
文件基本结构
OBJ
文件不需要任何种文件头
(File Head
er)
,
尽管经常使用几行文件信息的注释作为文件
的开头。
OBJ
文件由一行行文本组成,注释<
/p>
行以一个
“
井
”
号
(#)
为开头,
空格和空行可以随
意加到文件中以增加文件的可读性。
有字
的行
都
由
一
两
个
标
记
字
p>
母
也
就
是
关
键
字
(Keyword)
开头,关键字可以说明这一行是什
么样的数据。
多行可以逻辑地连接在一起表示
一行,方法是在
每一行最后添加一个连接符
()
。
注意
连接符
()
后面不能出现空格或
tab
格,
否则将导致文件出错。
下列关键字可以在
OBJ
文件使用【关键字根
据数据类型排列,每个关键字有一段简短描
述】
顶点数据
(Vertex
data)
:
v
几何体顶点
(Geometric
vertices)
vt
贴图坐标点
(Texture
vertices)
vn
顶点法线
(Vertex
normals)
vp
p>
参
数
空
格
顶
点
(Parameter
space
vertices)
自由形态曲线
(Free-form
curve)/
表面属性
(surface
attributes):
deg
度
(Degree)
bmat
基础矩阵
(Basis matrix)
step
步尺寸
(Step size)
cstype
曲
线
< br>或
表
面
类
型
(Curve
or
surface type)
元素
(Elements):
p
点
(Point)
l
线
(Line)
f
面
(Face)
curv
曲线
(Curve)
curv2 2D
曲线
(2D curve)
surf
表面
(Surface)
自由形态曲线
(Free-form
curve)/
表面主体
陈述
(sur
face body statements):
parm
参数值
(Parameter values )
trim
外
部
修
剪
循
环
(Outer
trimming
loop)
hole
内
部
整
修
循
环
(Inner
trimming
loop)
scrv
特殊曲线
(Special curve)
sp
特殊的点
(Special
point)
end
结束陈述
(End
statement)
自
p>
由
形
态
表
面
之
间
的
连
接
(Connectivity
between free-form surfaces):
con
连接
(Connect)
成组
(Grouping):
g
组名称
(Group name)
s
光滑组
(Smoothing group)
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.000000 0.000000
vt 1.000000
0.000000
vt
0.000000 1.000000
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)
***
***********************************************
******************
********************************
***********
Maya
导出的
OBJ
文件
:
在
Maya
中创建一个多边形立方体
,
选中
p>
这个立方体,导出格式为
OBJ
,文件名为
(如果没有此格式,请在
Plug-
in
Manager
中载入
用写字板打
开
。
可以看到如下代码:
#
The
units
used
in
this
file
are
centimeters.
g default
v
-0.500000 -0.500000 0.500000
v 0.500000
-0.500000 0.500000
vt 1.000000
1.000000
vt 0.000000 2.000000
vt 1.000000 2.000000
vt
0.000000 3.000000
vt 1.000000 3.000000
vt 0.000000 4.000000
vt
1.000000 4.000000
vt 2.000000 0.000000
vt 2.000000 1.000000
vt
-1.000000 0.000000
vt -1.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 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
s off
g pCube1
usemtl initialShadingGroup
f 1/1/1 2/2/2
4/4/3 3/3/4
f
3/3/5 4/4/6 6/6/7 5/5/8
f 5/5/9 6/6/10 8/8/11 7/7/12
f 7/7/13 8/8/14
2/10/15 1/9/16
f 2/2/17 8/11/18 6/12/19 4/4/20
f 7/13/21
1/1/22 3/3/23 5/14/24
这个文件看起来稍复杂一些,
用到了许多
关键
词,
你可以对照前面的列表查看一下每个
关键词的意思。
解释一下:
1.000000
0.000000
这句
代表点
的贴图坐标。
这句
代表点的法线。
表示关闭光滑组。
表示使用
的
材质。
这时在面的数据中多了贴图坐
标
uv
点和法线的索引号,索引号分别用左斜
线
(/)
隔开。
格式:
顶点索引
/uv
点索引
/
法线索引
。
表示组,这里的成组与
Maya
中
的
成
组
不
一
样
,
这
里<
/p>
的
成
组
是
指
把
pCube1<
/p>
后出现的面都结合到一起,
组成一个
整的
多边形几何体。
把
文件修改一下就知道成组的
意思了。把
这句后面的代码替换成以下
代码:
usemtl initialShadingGroup
g pCube_Face1
f 1/1/1 2/2/2 4/4/3 3/3/4
g pCube_Face2
f 3/3/5 4/4/6
6/6/7 5/5/8
g
pCube_Face3
f
5/5/9 6/6/10 8/8/11 7/7/12
g pCube_Face4
f 7/7/13 8/8/14 2/10/15
1/9/16
g
pCube_Face5
f
2/2/17 8/11/18 6/12/19 4/4/20
g pCube_Face6
f 7/13/21 1/1/22 3/3/23
5/14/24
导入
Maya
后可以看到,
立方体的每个面
是
分
离
的
,
每
个
面
< br>的
名
称
分
别
是
,可见组的名称其实就是
单独几何体的名称。
**********
****************************************
*************************************************
*
***************
用中文
< br>命名几何体
(
组
)
并不总是顺利,
把
立
方体面
1
这行改为
<
/p>
选择
再试试看,
这回导
入时模型根本无法出现,
只会出现如下的错误
信息:
// Error: line 1: Your OBJ file
contains a
line
which
is
too
long
to
be
parsed.
Please
edit your obj file.
//
// Error:
line 1: Error reading file. //
由此可见,物体
命名的不规范也是导致
OBJ
文件出错的原因之一。
关于
Maya
的物体命名,
英文名是很保险的,
标点符号中只有下划线
(_)
可用,
数字不能用放到名称的开头,
尽量不要
p>
用中、日、韩等双字节文字。
OBJ
文件不支持有孔的多边形面。
举个例子:
选择
Maya
的创建多边形工具
(Polygons
-> Create
Polyon Tool)
,
在视图中画一个四边
形,
不要按回车,
按
Ctr
l
在四边形中间点一下,
可以继续在四边形中挖一个洞。
把这个有孔的
多边形存成
OBJ
格式,在导入
Maya
时
,会
发现多边形少了一块。如果你把这也看成错
误,
现在至少你已经知道错误的原因了,
就是
OBJ<
/p>
文件不支持有孔的多边形面。
******************************************
********
*******************************
*******************
****************
OBJ
文件不包含面的颜色定义信息,
不过可
以
引用
材质库
,材质库信息储存在一个
后缀是
的独立文件中。关键字
即材质库
的意思。
材质库中包含材质的漫射
(diff
use)
,环境
(ambient)
,
光泽
(specular)
的
RGB(
红绿蓝
)
的
定
义
值
,
以
p>
及
反
射
(spec
ularity)
,
折
射
(refraction)
,透明度
(transp
arency)
等其它特
征。
指定了材
质之后,以后的面都是
使用这一材质,直到遇到下一个
来指
定新的材质。
下面的例子说明了指定材质的方法。
Cube with
Materials
:
# This cube has a different
material
#
applied to each of its faces.
mtllib
v 0.000000 2.000000
2.000000
v
0.000000 0.000000 2.000000
v 2.000000 0.000000
2.000000
v
2.000000 2.000000 2.000000
v 0.000000 2.000000
0.000000
v
0.000000 0.000000 0.000000
v 2.000000 0.000000
0.000000
v
2.000000 2.000000 0.000000
# 8 vertices
g front
usemtl red
f 1 2 3 4
g back
usemtl blue
f 8 7 6 5
g right
usemtl green
f 4 3 7 8
g top
usemtl gold
f 5 1 4 8
g left
usemtl orange
f 5 6 2 1
g bottom
usemtl purple
f 2 6 7 3
# 6 elements
**
************************************************
p>
*****************************************
*********
****************
贝塞尔片面
(Bezier
Patch)
:
Maya
不能导出
< br>OBJ
格式的贝塞尔片面,
却能够导入它。
导入的贝塞尔片面自动转换为
Nurbs
表面。
p>
#
3.0 Bezier patch
v -5.000000 -5.000000 0.000000
v -5.000000
-1.666667 0.000000
v -5.000000 1.666667 0.000000
v -5.000000
5.000000 0.000000
v -1.666667 -5.000000 0.000000
v -1.666667
-1.666667 0.000000
v -1.666667 1.666667 0.000000
v -1.666667
5.000000 0.000000
v 1.666667 -5.000000 0.000000
v 1.666667
-1.666667 0.000000
v 1.666667 1.666667 0.000000
v 1.666667
5.000000 0.000000
v 5.000000 -5.000000 0.000000
v 5.000000
-1.666667 0.000000
v 5.000000 1.666667 0.000000
v 5.000000
5.000000 0.000000
# 16 vertices
cstype bezier
deg 3 3
# Example of line continuation
surf
0.000000
1.000000
0.000000
1.000000 13 14
15 16 9 10 11
12 5 6 7 8 1 2 3 4
parm u 0.000000 1.000000
parm v 0.000000 1.000000
end
# 1
element
******************************
********************
*******************
*******************************
********
***
基数曲线
(Cardinal
Curve)
:
Maya
好像不支持
OBJ
格式的曲线,
导入
时不
会出现错误信息,却也不会出现曲线。
# 3.0 Cardinal curve
v 0.940000
1.340000 0.000000
v -0.670000 0.820000 0.000000
v -0.770000
-0.940000 0.000000
v 1.030000 -1.350000 0.000000
v 3.070000
-1.310000 0.000000
# 6 vertices
cstype cardinal
deg 3
curv 0.000000 3.000000 1 2
3 4 5 6
parm
u
0.000000
1.000000
2.000000
3.000000 end