OBJLoader

OBJLoader 用来加载 OBJ 格式模型. 加载完后 onload() 中用 traverse() 对每个子对象进行遍历, 设置 material 属性. 从下面演示中 可看出:脸部、上衣+裤子、左手、右手、左鞋、右鞋都是 obj 里面的子对象, 头发还分了5层, 即头发不是一个子对象, 里面包含了5个, 你可看出 有5种颜色的头发. obj 文件包含如下信息:

o mesh1.002_mesh1-geometry
v 4.649472 159.854965 5.793066
v 1.662002 157.904083 5.834653
vt 0.640670 0.469725
vt 0.630557 0.465076
vn -0.253945 0.750999 0.609455
vn -0.306619 0.533250 0.788415
g mesh1.002_mesh1-geometry_male-02-1noCullingID_male-02-1noCulling.JP
usemtl male-02-1noCullingID_male-02-1noCulling.JP
s 1
f 1/1/1 2/2/2 3/3/3
f 1/1/1 4/4/4 2/2/2
s off

解释如下:
o: obj
v: 顶点坐标 x y z
vt: 贴图坐标 u v
vn: 顶点法线 nx ny nz
f: 顶点索引 / uv坐标索引 / 法线索引
g: Group 组

下面这个模型的大小为 453K

function OBJLoader( ) { } var loader = new THREE.OBJLoader(); loader.load('---.obj', function(obj){ obj.traverse( function( child ){ if( child instanceof THREE.Mesh ){ child.material = new THREE.MeshLambertMaterial( { color: Math.random() * 0xffffff } ); } }); scene.add(obj); }, function ( xhr ) { console.log( ( xhr.loaded / xhr.total * 100 ) + '% loaded' ); }, function ( error ) { console.log( 'An error happened: ' + error ); } );

Attributes

manager : LoadingManager

Default value : THREE.DefaultLoadingManager
Description : 类型

materials : Array

Default value : []
Description : 材质数组.

Methods

load( url, onLoad, onProgress, onError ) : null
url String 加载路径
onLoad Function 加载完成函数
onProgress Function 加载进程函数
onError Function 加载错误函数

加载URL以及调用回调函数onLoad.

parse( text ) :
text String 待解析的 text 数据

解析 text 数据.

setMaterials( materials ) : this
materials Array 材质数组

设置 MTLLoader 加载的材质或其他材质数组.

setPath( value ) : this
value String 路径

设置原始文件的基本路径.