.obj和.mtl格式详解
obj文件是3D模型文件格式。由Alias|Wavefront公司为3D建模和动画软件"Advanced Visualizer"开发的一种标准,适合用于3D软件模型之间的互导,也可以通过Maya读写。
只支持模型三角面数据和材质信息,无动画功能支持;其中几何信息由.obj文件提供,材质信息由.mtl文件定义。
.obj格式
# obj对应的材质文件
# mtllib testvt.mtl
# 组名称
g default
# o 对象名称(Object name)
o testvt.obj
# 顶点
v -0.5 -0.5 0.1
v -0.5 -0.5 -0.1
v 0 0.5 0.1
v 0 0.5 -0.1
v 0.5 -0.5 0.1
v 0.5 -0.5 -0.1
# 纹理坐标
vt 0 1
vt 1 1
vt 0.5 0
# 顶点法线
vn 0 0 1
vn 0 0 -1
# 当前图元所用材质
usemtl Default
# s Smooth shading across polygons is enabled by smoothing groups.
# Smooth shading can be disabled as well.
s off
# v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3(索引起始于1)
f 1/1/1 5/2/1 3/3/1
f 6/2/2 2/1/2 4/3/2
.mtl格式
# 定义一个名为 'xxx'的材质
newmtl xxx
# 材质的环境光(ambient color)
Ka 0 0 0
# 散射光(diffuse color)用Kd
Kd 0.784314 0.784314 0.784314
# 镜面光(specular color)用Ks
Ks 0 0 0
# 折射值 可在0.001到10之间进行取值。若取值为1.0,光在通过物体的时候不发生弯曲。玻璃的折射率为1.5。
Ni 1
# 反射指数 定义了反射高光度。该值越高则高光越密集,一般取值范围在0~1000。
Ns 400
# 滤光透射率
Tf 1 1 1
# 渐隐指数描述 参数factor表示物体融入背景的数量,取值范围为0.0~1.0,取值为1.0表示完全不透明,取值为0.0时表示完全透明。
d 1
# 为漫反射指定颜色纹理文件
map_Kd D:\Threejs\three.js学习\貂蝉\1411_DiaoChan_D_512.png
three.js加载三维模型(obj文件mtl文件)
核心代码:
/**
* OBJ和材质文件mtl加载
*/
var OBJLoader = new THREE.OBJLoader(); //obj加载器
var MTLLoader = new THREE.MTLLoader(); //材质文件加载器
MTLLoader.load('貂蝉/貂蝉.mtl', function(materials) {
// 返回一个包含材质的对象MaterialCreator
console.log(materials);
//obj的模型会和MaterialCreator包含的材质对应起来
BJLoader.setMaterials(materials);
OBJLoader.load('貂蝉/貂蝉.obj', function(obj) {
console.log(obj);
scene.add(obj); //返回的组对象插入场景中
// 加载后操作
obj.children[0].scale.set(2, 2, 2); //缩放球体网格模型
// 通过调节参数,地球表面的凹凸感更强
obj.children[0].material.normalScale.set(3, 3);
})
})
效果: