我们经常见到的*.obj文件有两种:第一种是基于COFF(Common Object File Format)格式的OBJ文件(也称目标文件),这种格式用于编译应用程序;第二种是Alias|Wavefront公司推出的OBJ模型文件。我要讲的OBJ文件格式是指第二种-OBJ模型文件。 <BR>   说起3D文件格式,大家一定不会感到陌生,"*.3ds","*.max","*.lw","*.mb","*.dxf","*.obj",相信人人都能列举出几种来。但是说起OBJ文件的具体特征,却很少有人能给出较为圆满的描述。 很多人认识OBJ文件是从使用Poser开始的,Poser是一款人体建模软件,要把Poser生成的人体导出到其它3D软件中进行再加工,就用到了OBJ文件。OBJ文件是一种标准的3D模型文件格式,很适合用于3D软件模型之间的互导。比如你在3dsMax或LightWave中建了一个模型,想把它调到Maya里面渲染或动画,导出OBJ文件就是一种很好的选择。目前几乎所有知名的3D软件都支持OBJ文件的读写,不过很多软件需要通过插件才能做到这一点。


另外,作为一种优秀的文件格式,很多游戏引擎也都支持OBJ文件的读取。 了解OBJ文件格式有什么用呢?如果你不学编程的话,用处确实不大。不过,3D软件模型之间的互导是一件很常见的事情,不幸的是,目前的3D软件模型导出功能都不那么完美,经常会出现缺面少线的情况,有时还会遇到导出的模型根本打不开的情况。如果情况非常紧急的话,你一定会不惜一切代价仔细研究,期望找到原因,解决问题。在这种情况下,我的教程也许会对你有很大帮助


OBJ文件是一种文本文件格式,这就意味着你可以直接用写字板打开进行查看修改,如果你能看懂每一行的内容是什么意思,相信距离你成功的解决问题已经不远了。


OBJ文件是Wavefront公司为它的一套基于工作站的3D建模和动画软件"Advanced Visualizer"开发的一种文件格式。


OBJ新版本是v3.0,代替以前的v2.11版本。


OBJ3.0格式支持多边形(Polygon),直线(Lines),表面(Surfaces),和自由形态曲线(Free-form Curves)。


直线和多角形通过它们的点来描述,曲线和表面则根据于它们的控制点和依附于曲线类型的额外信息来定义。这些信息支持规则和不规则的曲线,包括那些基于贝塞尔(Bezier)曲线,B样条(B-spline),基数(Cardinal/Catmull-Rom样条),和泰勒方程(Taylor equations)的曲线。


OBJ文件 -- 特点


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


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


(3)OBJ文件支持三个点以上的面。


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


OBJ文件不支持有孔的多边形面


OBJ文件不包含面的颜色定义信息,不过可以引用材质库,材质库信息储存在一个后缀是".mtl"的独立文件中。关键字"mtllib"即材质库的意思。材质库中包含材质的漫射(diffuse),环境(ambient),光泽(specular)的定义值,   "usemtl"指定了材质之后,以后的面都是使用这一材质,直到遇到下一个"usemtl"来指定新的材质。


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)


curv2 2D曲线 (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)