OBJ文件是一种标准的3D模型文件格式,很适合用于3D软件模型之间的互导。OBJ文件是一种文本文件格式,这就意味着你可以直接用写字板打开进行查看修改。目前几乎所有知名的3D软件都支持OBJ文件的读写,不过很多软件需要通过插件才能 做到这一点。另外,作为一种优秀的文件格式,很多游戏引擎也都支持OBJ文件。

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

OBJ文件特点 
  -1- OBJ是一种3D模型文件,因此不包含动画、材质特性、贴图路径、动力学、粒子等信息。 
  -2- OBJ文件主要支持多边形(Polygons)模型。 
虽然OBJ文件也支持曲线(Curves)、表面(Surfaces)、点组材质(Point Group Materials),但Maya导出的OBJ文件并不包括这些信息。 
  -3- OBJ文件支持三个点以上的面,这一点很有用。 
很多其它的模型文件格式只支持三个点的面,所以我们导入Maya的模型经常被三角化了,这对于我们对模型的再加工甚为不利。     
       -4- OBJ文件支持法线和贴图坐标。 

OBJ文件基本结构
OBJ文件不需要任何种文件头(File Header),尽管经常使用几行文件信息的注释作为文件的开头。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) 

 

OBJ文件不包含面的颜色定义信息,不过可以引用材质库,材质库信息储存在一个后缀是".mtl"的独立文件中。关键字"mtllib"即材质库的意思。材质库中包含材质的漫射(diffuse),环境(ambient),光泽(specular)的RGB(红绿蓝)的定义值,以及反射(specularity),折射(refraction),透明度(transparency)等其它特征。"usemtl"指定了材质之后,以后的面都是使用这一材质,直到遇到下一个"usemtl"来指定新的材质。