关于3D模型中的obj文件

OBJ文件简介

  • OBJ文件是一种标准的3D模型文件格式,适合用于3D软件模型之间的互导。
  • 几乎所有知名的3D软件都支持OBJ文件的读写,很多游戏引擎也都支持OBJ文件的读取。
  • OBJ文件是一种文本文件格式,采用了单纯的字典状结构 , 可以直接用写字板打开进行查看和编辑修改。

OBJ文件特征

  • 一种3D模型文件。不包含动画、材质特性、贴图路径、动力学、粒子等信息。
  • OBJ主要支持多边形。OBJ3.0格式支持多边形(Polygon),直线(Lines),表面(Surfaces),和自由形态曲线(Free-form Curves)。直线和多边形通过它们的点来描述,曲线和表面则根据于它们的控制点和依附于曲线类型的额外信息来定义。这些信息支持规则和不规则的曲线,包括那些基于贝塞尔(Bezier)曲线,B样条(B-spline),基数(Cardinal/Catmull-Rom样条),和泰勒方程(Taylor equations)的曲线。
  • OBJ模型支持三个点以上的面 , 有利于进行再加工。
  • OBJ文件支持法线和贴图坐标。

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)

OBJ文件实例

以一个立方体的obj模型为例


# 一些注释


mtllib cube.mtl
g default

#v 开头的行暗示是顶点数据的空间坐标
#立方体,总共有8个顶点(v 开头的行正好是8行)

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
v -0.500000 -0.500000 -0.500000
v 0.500000 -0.500000 -0.500000

#vt 开头的行表示是顶点数据之纹理坐标(texture coordinate)
#vt 开头的行从第一行直到结束的第二十四行分别对应于索引1-24,

vt 0.001992 0.001992
vt 0.998008 0.001992
vt 0.001992 0.998008
vt 0.998008 0.998008
vt 0.001992 0.001992
vt 0.998008 0.001992
vt 0.001992 0.998008
vt 0.998008 0.998008
vt 0.001992 0.001992
vt 0.998008 0.001992
vt 0.001992 0.998008
vt 0.998008 0.998008
vt 0.001992 0.001992
vt 0.998008 0.001992
vt 0.001992 0.998008
vt 0.998008 0.998008
vt 0.001992 0.001992
vt 0.998008 0.001992
vt 0.001992 0.998008
vt 0.998008 0.998008
vt 0.998008 0.998008
vt 0.001992 0.998008
vt 0.998008 0.001992
vt 0.001992 0.001992

#vn的行表示是顶点数据之法线向量(normal)
#vn的行从开始的第一行直到结束的第二十四行分别对应于索引1-24。

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

#然后自由组合v,vt,zn索引,来得到需要的顶点。
#f开头的行,表示面(face),以3个'v'索引'vt'索引'vn'索引描述的顶点组成。

s 1
g pCube1
usemtl file1SG
f 1/1/1 2/2/2 3/3/3
f 3/3/3 2/2/2 4/4/4

s 2
f 3/13/5 4/14/6 5/15/7
f 5/15/7 4/14/6 6/16/8

s 3
f 5/21/9 6/22/10 7/23/11
f 7/23/11 6/22/10 8/24/12

s 4
f 7/17/13 8/18/14 1/19/15
f 1/19/15 8/18/14 2/20/16

s 5
f 2/5/17 8/6/18 4/7/19
f 4/7/19 8/6/18 6/8/20

s 6
f 7/9/21 1/10/22 5/11/23
f 5/11/23 1/10/22 3/12/24

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值