OBJ文件解析

OBJ文件是一种文本文件,可以直接用写字板或是文档编辑器进行查看和编辑修改。
1.OBJ文件特点
(1)OBJ文件是一种3D模型文件,不包含动画、材质特性、贴图路径、动力学、粒子等信息。
(2)OBJ文件主要支持多边形(Polygons)模型。
(3)OBJ文件支持三个点以上的面。
(4)OBJ文件支持法线和贴图坐标。

2.OBJ文件结构:
以一个立方体模型的test.obj文件为例,以下为文件内容:

mtllib cube.mtl
g default
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 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 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 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

3.OBJ文件分析
从文件内容看,其内容比较简单,注释行以符号“#”为开头,空格和空行可以随意加到文件中以增加文件的可读性。有字的数据行都由关键字(Keyword)开头,简单解释了这一行的数据时是什么。而多行之间可以使用连接符反斜杠()将不同意义的数据逻辑地连接在一起表示一行(如果要自己对文件进行修改,特别需要注意连接符()后面不能出现空格或Tab格,否则文件将出错)。

下面将逐一解释文件中每行数据代表的意义:
简单来讲,
以字母"v"开头的行是顶点数据,在v -0.500000 -0.500000 0.500000中左边第一个" -0.500000"是这个顶点的X轴坐标值,中间的"-0.500000"为Y轴坐标值,最后的"0.500000"为Z轴坐标值,另外它的索引号是1(索引号是在画图时规定了的,在这里不做讨论)。
以字母"vt"开头的行是顶点数据的贴图/纹理坐标点 (Texture vertices),其值为u, v,如vt 0.001992 0.001992。纹理坐标指的是,纹理图片如果被放在屏幕上显示时,以屏幕左下角为原点的坐标。
以字母"vn"开头的行是顶点数据之法线向量(normal),其值为x,y,z,如vn 0.000000 0.000000 1.000000。其实这个法向量是表示顶点的朝向,由顶点的xyz的坐标分别相加再除以3得到的。假设有三个顶点组成一个面,面是有两个朝向,向里或向外,所以可以通过顶点的朝向来确定面的朝向,特别的这三个顶点的法向量是相同的。
以字母"f"开头的行是表示面(face),以3个"v/vt/vn"的索引形式组成。比如obj文件中
f 3/13/5 4/14/6 5/15/7 ,表示由第2、第13、第5这三个顶点组成了一个三角平面,平面的纹理由第4、第14、第6这三个纹理坐标形成,而这个平面的朝向是第5、第15、第7这三个顶点的法向量的平均值决定的。

4.对于索引数据而言,通常写的3D程序中一个索引值对应于一个顶点,这个顶点有固定的空间坐标,纹理坐标,法线等信息。
而对于obj文件,一个索引值对应于一个顶点数据的空间坐标或者纹理坐标或法线,且均是由1开始计数。
比如说,对于上述的立方体obj文件中,
以字母"v"开始的第一行直到结束的第八行分别对应于索引1-8,
以字母"vt"开始的第一行直到结束的第二十四行分别对应于索引1-24,
以字母"vn"开始的第一行直到结束的第二十四行分别对应于索引1-24.....
因此需要取特别的行数据时,可以以 "v"索引/"vt"索引/"vn"索引 的格式自由组合,描述顶点信息。如v3/vt24/vn19

补充:名词解释
(1)顶点数据(Vertex data):
v 几何体顶点(Geometric vertices)
vt 贴图坐标点(Texture vertices)
vn 顶点法线(Vertex normals)
vp 参数空格顶点 (Parameter space vertices)

(2)元素(Elements):
p 点(Point)
l 线(Line)
f 面(Face)
curv 曲线(Curve)
curv2 2D曲线(2D curve)
surf 表面(Surface)

(3)自由形态曲线(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)

(4)成组(Grouping):
g 组名称(Group name)
s 光滑组(Smoothing group)
mg 合并组(Merging group)
o 对象名称(Object name)

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.obj文件是一种常见的三维模型文件格式,包含了模型的几何信息和材质信息。下面是.obj文件的一般内容解析: 1. 顶点数据:以 "v" 开头,后面跟着三个浮点数,表示一个顶点的坐标。例如:v 0.0 0.0 0.0 表示一个位于原点的顶点。 2. 法线数据:以 "vn" 开头,后面跟着三个浮点数,表示一个顶点的法线向量。法线向量用于定义三角形面的朝向。例如:vn 0.0 1.0 0.0 表示一个指向上方的法线向量。 3. 纹理坐标数据:以 "vt" 开头,后面跟着两个浮点数,表示一个顶点的纹理坐标。纹理坐标用于将纹理映射到模型表面。例如:vt 0.0 0.0 表示一个纹理坐标为(0, 0)的点。 4. 面数据:以 "f" 开头,后面跟着一系列整数或整数/整数/整数的组合,表示一个面的顶点索引。顶点索引是相对于前面定义的顶点数据的顺序编号。例如:f 1 2 3 表示一个由顶点1、2和3组成的三角形面。 5. 材质信息:以 "mtllib" 开头,后面跟着一个文件名,指定了模型使用的材质库文件。材质库文件通常包含了纹理贴图和材质属性等信息。 6. 使用材质:以 "usemtl" 开头,后面跟着一个材质名称,指定了当前面使用的材质。 以上是.obj文件的基本内容解析,实际上.obj文件还可以包含其他的信息,如顶点颜色、动画数据等。需要根据具体的.obj文件格式和使用的工具进行进一步的解析和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值