提交 9e4849ac 编写于 作者: L Lewy Blue

simplify skeleton building

上级 a5776a6d
......@@ -2008,67 +2008,16 @@
function bindSkeleton( FBXTree, skeletons, geometryMap, modelMap, connections, sceneGraph ) {
// Now with the bones created, we can update the skeletons and bind them to the skinned meshes.
sceneGraph.updateMatrixWorld( true );
var worldMatrices = new Map();
// Put skeleton into bind pose.
if ( 'Pose' in FBXTree.Objects ) {
var BindPoseNode = FBXTree.Objects.Pose;
for ( var nodeID in BindPoseNode ) {
if ( BindPoseNode[ nodeID ].attrType === 'BindPose' ) {
var poseNodes = BindPoseNode[ nodeID ].PoseNode;
if ( Array.isArray( poseNodes ) ) {
poseNodes.forEach( function ( node ) {
var rawMatWrd = new THREE.Matrix4().fromArray( node.Matrix.a );
worldMatrices.set( parseInt( node.Node ), rawMatWrd );
} );
} else {
var rawMatWrd = new THREE.Matrix4().fromArray( poseNodes.Matrix.a );
worldMatrices.set( parseInt( poseNodes.Node ), rawMatWrd );
}
}
}
}
for ( var ID in skeletons ) {
var skeleton = skeletons[ ID ];
skeleton.bones.forEach( function ( bone, i ) {
// if the bone's initial transform is set in a poseNode, copy that
if ( worldMatrices.has( bone.ID ) ) {
var mat = worldMatrices.get( bone.ID );
bone.matrixWorld.copy( mat );
}
// otherwise use the transform from the rawBone
else {
bone.matrixWorld.copy( skeleton.rawBones[ i ].transformLink );
}
bone.matrixWorld.copy( skeleton.rawBones[ i ].transformLink );
} );
// Now that skeleton is in bind pose, bind to model.
var parents = connections.get( parseInt( skeleton.ID ) ).parents;
parents.forEach( function ( parent ) {
......@@ -2096,9 +2045,6 @@
}
//Skeleton is now bound, return objects to starting world positions.
sceneGraph.updateMatrixWorld( true );
}
function parseAnimations( FBXTree, connections ) {
......@@ -2633,12 +2579,7 @@
// if the subnode already exists, append it
if ( nodeName in currentNode ) {
// special case Pose needs PoseNodes as an array
if ( nodeName === 'PoseNode' ) {
currentNode.PoseNode.push( node );
} else if ( currentNode[ nodeName ].id !== undefined ) {
if ( currentNode[ nodeName ].id !== undefined ) {
currentNode[ nodeName ] = {};
currentNode[ nodeName ][ currentNode[ nodeName ].id ] = currentNode[ nodeName ];
......@@ -2654,8 +2595,7 @@
} else if ( nodeName !== 'Properties70' ) {
if ( nodeName === 'PoseNode' ) currentNode[ nodeName ] = [ node ];
else currentNode[ nodeName ] = node;
currentNode[ nodeName ] = node;
}
......@@ -3049,23 +2989,9 @@
}
} else {
} else if ( node[ subNode.name ][ subNode.id ] === undefined ) {
if ( subNode.name === 'PoseNode' ) {
if ( ! Array.isArray( node[ subNode.name ] ) ) {
node[ subNode.name ] = [ node[ subNode.name ] ];
}
node[ subNode.name ].push( subNode );
} else if ( node[ subNode.name ][ subNode.id ] === undefined ) {
node[ subNode.name ][ subNode.id ] = subNode;
}
node[ subNode.name ][ subNode.id ] = subNode;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册