obj 文件解析

obj:object 的简写。obj 文件是可以直接文本打开的。不多说,直接展示“代码”。

moon.obj

文件来源

# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware
# File Created: 06.10.2013 19:40:35

mtllib moon.mtl

#
# object Sphere001
#

v  0.2574 58.7078 -0.2574
v  -0.3889 58.6788 1.4697
...
v  -0.4428 -58.6788 1.4485
v  0.2574 -58.7078 -0.2574
# 19802 vertices

vn -0.0000 1.0000 -0.0000
vn -0.0111 0.9995 0.0296
...
vn -0.0120 -0.9995 0.0292
vn 0.0000 -1.0000 -0.0000
# 19802 vertex normals

vt 0.0000 1.0000 0.0000
vt 0.0000 0.9900 0.0000
...
vt 0.9900 -0.0000 0.0000
vt 0.9950 -0.0000 0.0000
# 20299 texture coords

g Sphere001
usemtl 01___Default
s 1
f 1/1/1 2/2/2 3/3/3 
f 1/4/1 3/3/3 4/5/4 
...
f 19802/20298/19802 19801/20098/19801 19800/20097/19800 
f 19802/20299/19802 19602/20099/19602 19801/20098/19801 
# 19600 polygons - 400 triangles

文件解析

注释

# 开头的为文件注释,不多说

mtllib

mtl:Material Template Library
格式为 mtllib filename,即参数后边是文件名字,该文件是描述 obj 文件指定的物体的材质,一般包含颜色、纹理等信息
ps:具体请看下一篇文章

v

vertices(geometric vertices),顶点坐标
格式为 x, y, z, [w],分别代指该顶点在 x、y、z 的坐标值
w 是 weight,权重,用于有理曲面和曲线。非有理曲线曲面用不到。所以 w 为可选,默认值为 1.0。

vn

vertex normals, 顶点的法线向量坐标, 格式i, j, k
主要用于计算光照后的反射强度。

vt

vt:vertex texture
纹理贴图的坐标点,格式为(u, [v, w])
如果是一维纹理,只用 u 就可以。
如果是二维,就需要 u、v 共同表示。u 表示水平方向位置;v 表示竖直方向位置,默认值为 0.
w 是纹理深度值,可选,默认值为 0

g

g:group name

usemtl

格式为 mtllib name,material name,在 mtl 文件中定义

f

f:face 格式为 v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3 . . .,其中 v1/vt1/vn1 分别代指在 v、vt、vn 中的索引
如 moon.obj 中 f 1/1/1 2/2/2 3/3/3 则表示该面是三角形,如果是 f 1/1/1 2/2/2 3/3/3 4/4/4 则表示该面都是四边形

s

s:smoothing group,光滑组,用来表示模型的边缘被渲染的方式,即是否光滑。如果开启,各个顶点会使用各自的法线,而图形内部的任一点的法线则由组成该图形的顶点的法线差值计算而得。 如果关闭,那就是面法线。

其他

vp

o

名词解释

顶点数据(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文件 - 百度百科
obj files - paulbourke
Wavefront .obj file - wikipedia