Three.js obj和mtl文件格式解析

561 阅读5分钟

obj文件

obj文件是Alias|Wavefront公司开发的一种标准3D模型文件格式,适合用于3D软件模型之间的互导。

obj文件是一种文本文件,可以直接用写字板打开进行查看、编辑和修改,由一行行文本组成,注释行以符号“#”为开头,数据行由一两个标记字母也就是关键字开头,关键字解释了数据类型。若三维模型仅涉及直线和多边形,则使用到的关键字有以下几个。

obj文件使用的关键字

v: 表示本行指定一个顶点,此关键字后跟着3个单精度浮点数,分别表示该顶点的X、Y、Z坐标值

vt: 表示本行指定一个纹理坐标,此关键字后跟着两个单精度浮点数,分别表示此纹理坐标的U、V值

vn: 表示本行指定一个法线向量,此关键字后跟着3个单精度浮点数,分别表示该法向量的X、Y、Z坐标值

g: 表示组,后面参数为组名称,指定从此行之后到下一个以g开头的行之间的所有元素结合到一起

f: 表示本行指定一个表面,一个表面就是一个三角形图元,格式:“f 顶点索引/uv点索引/法线索引”

usemtl: 此关键字后参数为材质名称,指定了从此行之后到下一个以usemtl开头的行之间的所有表面所使用的材质名称,该材质可以在此obj文件所附属的mtl文件中找到具体信息

mtllib: 此关键字后参数为文件名称,指定了obj文件所使用的材质库文件(mtl文件)的文件名称

示例

o 立方体_1.001_网格

v 0.092408 0.222677 0.498688

v 0.092408 0.234196 0.498688

v 0.223314 0.222677 0.498688

v 0.223314 0.234196 0.498688

v 0.223314 0.222677 0.498588

v 0.223314 0.234196 0.498588

v 0.092408 0.222677 0.498588

v 0.092408 0.234196 0.498588

v -0.173019 0.222677 0.497974

v -0.173019 0.234196 0.497974

v -0.042114 0.222677 0.497974

v -0.042114 0.234196 0.497974

v -0.042114 0.222677 0.497874

v -0.042114 0.234196 0.497874

v -0.173019 0.222677 0.497874

v -0.173019 0.234196 0.497874

v -0.040814 0.222677 0.498252

v -0.040814 0.234196 0.498252

v 0.090091 0.222677 0.498252

v 0.090091 0.234196 0.498252

v 0.090091 0.222677 0.498152

v 0.090091 0.234196 0.498152

v -0.040814 0.222677 0.498152

v -0.040814 0.234196 0.498152

vt 1.000000 1.000000

vt 0.000000 1.000000

vt 0.000000 0.000000

vt 1.000000 1.000000

vt 0.000000 1.000000

vt 0.000000 0.000000

vt 1.000000 1.000000

vt 0.000000 1.000000

vt 0.000000 0.000000

vt 1.000000 1.000000

vt 0.000000 1.000000

vt 0.000000 0.000000

vt 0.000000 0.000000

vt 1.000000 1.000000

vt 0.000000 1.000000

vt 1.000000 1.000000

vt 0.000000 1.000000

vt 0.000000 0.000000

vt 1.000000 1.000000

vt 0.000000 1.000000

vt 0.000000 0.000000

vt 1.000000 1.000000

vt 0.000000 1.000000

vt 0.000000 0.000000

vt 1.000000 1.000000

vt 0.000000 1.000000

vt 0.000000 0.000000

vt 0.000000 0.000000

vt 1.000000 1.000000

vt 0.000000 1.000000

vt 1.000000 1.000000

vt 0.000000 1.000000

vt 0.000000 0.000000

vt 1.000000 1.000000

vt 0.000000 1.000000

vt 0.000000 0.000000

vt 1.000000 1.000000

vt 0.000000 1.000000

vt 0.000000 0.000000

vt 1.000000 1.000000

vt 0.000000 1.000000

vt 0.000000 0.000000

vt 0.000000 0.000000

vt 1.000000 1.000000

vt 0.000000 1.000000

vt 1.000000 0.000000

vt 1.000000 0.000000

vt 1.000000 0.000000

vt 1.000000 0.000000

vt 1.000000 0.000000

vt 1.000000 0.000000

vt 1.000000 0.000000

vt 1.000000 0.000000

vt 1.000000 0.000000

vt 1.000000 0.000000

vt 1.000000 0.000000

vt 1.000000 0.000000

vt 1.000000 0.000000

vt 1.000000 0.000000

vt 1.000000 0.000000

vn 0.0000 0.0000 1.0000

vn 1.0000 0.0000 0.0000

vn 0.0000 0.0000 -1.0000

vn -1.0000 0.0000 0.0000

vn 0.0000 1.0000 0.0000

vn 0.0000 -1.0000 0.0000

usemtl 材质.2

s 1

f 4/1/1 2/2/1 1/3/1

f 6/4/2 4/5/2 3/6/2

f 8/7/3 6/8/3 5/9/3

f 2/10/4 8/11/4 7/12/4

f 6/4/5 8/11/5 2/13/5

f 3/14/6 1/15/6 7/12/6

f 12/16/1 10/17/1 9/18/1

f 14/19/2 12/20/2 11/21/2

f 16/22/3 14/23/3 13/24/3

f 10/25/4 16/26/4 15/27/4

f 14/19/5 16/26/5 10/28/5

f 11/29/6 9/30/6 15/27/6

f 20/31/1 18/32/1 17/33/1

f 22/34/2 20/35/2 19/36/2

f 24/37/3 22/38/3 21/39/3

f 18/40/4 24/41/4 23/42/4

f 22/34/5 24/41/5 18/43/5

f 19/44/6 17/45/6 23/42/6

f 3/46/1 4/1/1 1/3/1

f 5/47/2 6/4/2 3/6/2

f 7/48/3 8/7/3 5/9/3

f 1/49/4 2/10/4 7/12/4

f 4/50/5 6/4/5 2/13/5

f 5/47/6 3/14/6 7/12/6

f 11/51/1 12/16/1 9/18/1

f 13/52/2 14/19/2 11/21/2

f 15/53/3 16/22/3 13/24/3

f 9/54/4 10/25/4 15/27/4

f 12/55/5 14/19/5 10/28/5

f 13/52/6 11/29/6 15/27/6

f 19/56/1 20/31/1 17/33/1

f 21/57/2 22/34/2 19/36/2

f 23/58/3 24/37/3 21/39/3

f 17/59/4 18/40/4 23/42/4

f 20/60/5 22/34/5 18/43/5

f 21/57/6 19/44/6 23/42/6

mtl文件

obj文件不包含面的颜色定义信息,不过可以引用材质库,材质库信息储存在一个后缀是".mtl"的独立文件中。mtl文件是obj文件附属的材质库文件,材质库中包含材质的漫射(diffuse),环境(ambient),光泽(specular)的RGB的定义值,以及反射(specularity),折射(refraction),透明度(transparency)等其它特征。

mtl文件使用的关键字

newmtl: 定义新的材质组,后面参数为材质组名称

Ka: 材质的环境光(ambient color)

Kd: 散射光(diffuse color)

Ks: 镜面光(specular color)

Ke: 放射光(emissive color)

Ns: 材质的光亮度

d,Tr 均可用于定义材质的Alpha透明度

sharpness: 材质的锐度(sharpness)

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

0 Color on and Ambient off

1 Color on and Ambient on

2 Highlight on

3 Reflection on and Ray trace on

4 Transparency: Glass on

Reflection: Ray trace on

5 Reflection: Fresnel on and Ray trace on

6 Transparency: Refraction on

Reflection: Fresnel off and Ray trace on

7 Transparency: Refraction on

Reflection: Fresnel on and Ray trace on

8 Reflection on and Ray trace off

9 Transparency: Glass on ,Reflection: Ray trace off

10 Casts shadows onto invisible surfaces

Ni : 材质的光密度(optical density)

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

map_Ka、map_Kd map_Ks 材质的环境,散射和镜面贴图,对应数据为贴图文件名称

refl: 材质的反射属性

示例

newmtl 材质.2

Ns 179.999996

Ka 1.000000 1.000000 1.000000

Kd 0.000000 0.000000 0.000000

Ks 0.500000 0.500000 0.500000

Ke 2.000000 2.000000 2.000000

Ni 1.450000

d 1.000000

illum 2

map_Ke ./model/10u/test1/png1.png