01.關(guān)于3D文件格式的選擇
threejs提供了很多格式的 Loader
但是卻只提供了 obj 格式的使用文檔, 而 obj 格式是不能存儲(chǔ)骨骼信息的
json格式的使用較為方便,網(wǎng)上例子很多,但是3Dmax要插件才能導(dǎo)出
最后敲定用FBX, 通過(guò)看官網(wǎng)的example來(lái)了解FBXLoader的使用
FBXLoader example
02. FBXLoader的使用例子
var loader = new THREE.FBXLoader();
loader.load(
'./model/current.FBX',
function( object ) {
object.traverse( function( child ) {
console.log( child );
try {
if ( child instanceof THREE.SkinnedMesh ) {
child.material.wireframe = true;
}
// console.log( child );
if( child instanceof THREE.Bone ) {
if(
child.name == 'left' || child.name == 'right' ||
child.name == 'Bone001' || child.name == 'Bone002' || child.name == 'Bone003'
) {
} else {
folder = gui.addFolder( child.name )
folder.add( child.rotation, 'x', - Math.PI, Math.PI );
folder.add( child.rotation, 'y', - Math.PI, Math.PI );
folder.add( child.rotation, 'z', - Math.PI, Math.PI );
}
}
}
catch( e ) {
console.log( e );
}
} );
這其中最重要的一段代碼就是
object.traverse( function() { ... } );
traverse是一個(gè)迭代器,它會(huì)將組成模型的部件一個(gè)一個(gè)提取出來(lái), 通過(guò)控制臺(tái)查看console.log()輸出的信息就能明白這一點(diǎn)
輸出信息.PNG看type那一項(xiàng): SkinnedMesh, Bone, Bone, Bone ...
每個(gè)組成部分都有很多屬性, 最有用的是: name, type
通過(guò) child.name 這樣的形式來(lái)訪問(wèn)屬性