分析一个box-obj格式的数据结构
2024年7月29日
# This file uses centimeters as units for non-parametric coordinates.
mtllib box.mtl
g default
v -0.811257 0.005627 0.811257
v 0.811257 0.005627 0.811257
v -0.811257 1.628140 0.811257
v 0.811257 1.628140 0.811257
v -0.811257 1.628140 -0.811257
v 0.811257 1.628140 -0.811257
v -0.811257 0.005627 -0.811257
v 0.811257 0.005627 -0.811257
vt 0.375000 0.000000
vt 0.625000 0.000000
vt 0.375000 0.250000
vt 0.625000 0.250000
vt 0.375000 0.500000
vt 0.625000 0.500000
vt 0.375000 0.750000
vt 0.625000 0.750000
vt 0.375000 1.000000
vt 0.625000 1.000000
vt 0.875000 0.000000
vt 0.875000 0.250000
vt 0.125000 0.000000
vt 0.125000 0.250000
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 off
g pCube1
usemtl initialShadingGroup
f 1/1/1 2/2/2 4/4/3 3/3/4
f 3/3/5 4/4/6 6/6/7 5/5/8
f 5/5/9 6/6/10 8/8/11 7/7/12
f 7/7/13 8/8/14 2/10/15 1/9/16
f 2/2/17 8/11/18 6/12/19 4/4/20
f 7/13/21 1/1/22 3/3/23 5/14/24
文件结构概览
- mtllib: 指定了材质库文件的路径。
- g: 定义几何体组名。
- v: 表示顶点坐标。
- vt: 表示纹理坐标(UV 映射)。
- vn: 表示法线坐标。
- s: 表示平滑组设置。
- usemtl: 指定当前几何体使用的材质名称。
- f: 定义面(多边形)。
详细分析
1. 材质库引用
mtllib box.mtl
这一行指定了一个材质库文件 box.mtl
,该文件包含了模型的材质定义。
2. 几何体组名
g default
这里定义了一个名为 "default" 的几何体组。
3. 顶点坐标 (v
)
v -0.811257 0.005627 0.811257
v 0.811257 0.005627 0.811257
...
这些行定义了顶点的三维坐标。例如,第一个顶点的坐标是 (-0.811257, 0.005627, 0.811257)。这些坐标以厘米为单位。
4. 纹理坐标 (vt
)
vt 0.375000 0.000000
vt 0.625000 0.000000
...
这些行定义了纹理映射的 UV 坐标。例如,第一个纹理坐标的值为 (0.375, 0.0),这些坐标通常用于贴图映射到 3D 模型上。
5. 法线坐标 (vn
)
vn 0.000000 0.000000 1.000000
vn 0.000000 0.000000 1.000000
...
这些行定义了顶点法线。例如,第一个法线坐标是 (0, 0, 1),这表示沿着 Z 轴正方向的单位向量。
6. 平滑组设置 (s
)
s off
这一行关闭了平滑组设置,意味着模型将使用硬边而不是平滑边缘。
7. 使用材质 (usemtl
)
usemtl initialShadingGroup
这一行指定了模型使用的材质名称,这里是 initialShadingGroup
。这意味着接下来定义的所有面都将使用这个材质。
8. 面定义 (f
)
f 1/1/1 2/2/2 4/4/3 3/3/4
f 3/3/5 4/4/6 6/6/7 5/5/8
...
这些行定义了模型的面(多边形)。每个面定义由四个顶点组成,每个顶点由三个索引构成:顶点索引/纹理坐标索引/法线索引。例如,第一行定义了一个四边形面,其顶点索引分别为 1、2、4、3,对应的纹理坐标索引和法线索引也是相同的。
这个 .obj
文件定义了一个简单的立方体模型,包含 8 个顶点、8 个纹理坐标、16 个法线坐标和 6 个面(每个面是一个四边形)。这些面构成了一个立方体的六个面。