OpenGL | obj文件&mtl文件

一、OBJ文件

1.OBJ文件概述

  • OBJ是一种3D模型文件,因此不包含动画、材质特性、贴图路径、动力学、粒子等信息。

  • OBJ文件主要支持多边形(Polygons)模型。虽然OBJ文件也支持曲线(Curves)、表面(Surfaces)、点组材质(Point Group Materials),但Maya导出的OBJ文件并不包括这些信息。

  • OBJ文件支持三个点以上的面。

  • OBJ文件支持法线和贴图坐标。

2.OBJ文件解析

OBJ文件不需要任何种文件头(File Header),尽管经常使用几行文件信息的注释作为文件的开头。OBJ文件由一行行文本组成,注释行以一个“井”号(#)为开头,空格和空行可以随意加到文件中以增加文件的可读性。

有字的行都由一两个标记字母也就是关键字(Keyword)开头,关键字可以说明这一行是什么样的数据。多行可以逻辑地连接在一起表示一行,方法是在每一行最后添加一个连接符(\)。注意连接符(\)后面不能出现空格或tab格,否则将导致文件出错。

(1)举例

下方是在maya中创建cube后导出的cube.obj数据:

# This file uses centimeters as units for non-parametric coordinates.

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.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

(2)关键字说明

  • #:注释标记

  • mtllib:描述了模型所使用的材质文件(mtl)所在的路径

  • v:顶点

  • vt:顶点的纹理坐标

  • vn:顶点的法线

  • o:对象(object)名称

  • g: 组(group)名称

  • s:光滑组(Smoothing group),处理面之间的光照信息来达到光滑效果

  • usemtl:当前所用材质

  • f:面

其中面f需要拿出来单说,例如f 7/13/21 1/1/22 3/3/23 5/14/24表示用四个点画一个面,空格隔开的四组数据分别表示平面的四个顶点,在每一组数据中,每一个数字又分别代表着顶点/纹理坐标/法线的索引,所以f 7/13/21 1/1/22 3/3/23 5/14/24中第一个点(7/13/21)的数据为:

顶点

纹理坐标

法线

(0.500000,-0.500000,-0.500000)

(0.125000,0.250000)

(-1.000000,0.000000,0.000000)

二、mtl文件

1.mtl文件概述

我们知道.OBJ文件用来存储模型信息,观察上方cube.obj第一行代码,可以看到材质库文件为mtllib Cube.mtl

.mtl文件(Material Library File)是材质库文件,描述的是物体的材质信息,ASCII存储,任何文本编辑器可以将其打开和编辑。一个.mtl文件可以包含一个或多个材质定义,对 于每个材质都有其颜色,纹理和反射贴图的描述,应用于物体的表面和顶点。

2.mtl文件解析

(1)举例

cube.mtl文件数据如下:

newmtl initialShadingGroup
illum 4
Kd 0.50 0.50 0.50
Ka 0.00 0.00 0.00
Tf 1.00 1.00 1.00
Ni 1.00

(2)关键字说明

  • newmtl:代表材质,以下皆为该材质的属性参数

  • Ns:高光反射系数,值越高则高光越密集

  • NI:指定材质表面的光密度,即折射值

  • d:表示物体融入背景的数量,取值范围为0.0~1.0,取值为1.0表示完全不透明,取值为0.0时表示完全透明

  • Tr:定义材质的alpha透明度

  • Tf:材质的透射滤波(transmission filter),对应数据为r,g,b值

  • illum: 照明度(illumination),后面可接0~10范围内的数字参数

  • Ka: 环境光(ambient color)

  • Kd: 散射光(diffuse color)

  • Ks: 镜面光(specular color)

  • Ke:放射光(emissive color)

  • map_Ka:环境光所采样的纹理贴图路径,在.obj模型文件的根目录下

  • map_Kd:漫反射光所采样的纹理贴图路径

猜你喜欢

转载自blog.csdn.net/weixin_39766005/article/details/129561729