浏览代码

FBXLoader2: Refactored layers/stacks code.

Mr.doob 8 年之前
父节点
当前提交
8b04814c78
共有 1 个文件被更改,包括 22 次插入13 次删除
  1. 22 13
      examples/js/loaders/FBXLoader2.js

+ 22 - 13
examples/js/loaders/FBXLoader2.js

@@ -408,7 +408,7 @@
 					var skeleton = parseSkeleton( conns, DeformerNodes );
 					skeleton.FBX_ID = parseInt( nodeID );
 
-					deformers[ parseInt( nodeID ) ] = skeleton;
+					deformers[ nodeID ] = skeleton;
 
 				}
 
@@ -1405,15 +1405,19 @@
 
 			// Now that skeleton is in bind pose, bind to model.
 			deformer.skeleton = new THREE.Skeleton( deformer.bones );
-			var conns = connections.get( parseInt( FBX_ID ) );
-			for ( var parentsIndex = 0, parentsLength = conns.parents.length; parentsIndex < parentsLength; ++ parentsIndex ) {
 
-				var parent = conns.parents[ parentsIndex ];
+			var conns = connections.get( deformer.FBX_ID );
+			var parents = conns.parents;
+
+			for ( var parentsIndex = 0, parentsLength = parents.length; parentsIndex < parentsLength; ++ parentsIndex ) {
+
+				var parent = parents[ parentsIndex ];
 
 				if ( geometryMap.has( parent.ID ) ) {
 
 					var geoID = parent.ID;
 					var geoConns = connections.get( geoID );
+
 					for ( var i = 0; i < geoConns.parents.length; ++ i ) {
 
 						if ( modelMap.has( geoConns.parents[ i ].ID ) ) {
@@ -1835,8 +1839,8 @@
 		 */
 		var returnObject = {
 			curves: new Map(),
-			layers: new Map(),
-			stacks: new Map(),
+			layers: {},
+			stacks: {},
 			length: 0,
 			fps: 30,
 			frames: 0
@@ -2155,7 +2159,7 @@
 
 			}
 
-			returnObject.layers.set( parseInt( nodeID ), layer );
+			returnObject.layers[ nodeID ] = layer;
 
 		}
 
@@ -2167,9 +2171,10 @@
 			var minTimeStamp = Number.MAX_VALUE;
 			for ( var childIndex = 0; childIndex < children.length; ++ childIndex ) {
 
-				if ( returnObject.layers.has( children[ childIndex ].ID ) ) {
+				var currentLayer = returnObject.layers[ children[ childIndex ].ID ];
+
+				if ( currentLayer !== undefined ) {
 
-					var currentLayer = returnObject.layers.get( children[ childIndex ].ID );
 					layers.push( currentLayer );
 
 					for ( var currentLayerIndex = 0, currentLayerLength = currentLayer.length; currentLayerIndex < currentLayerLength; ++ currentLayerIndex ) {
@@ -2398,12 +2403,12 @@
 			// Do we have an animation clip with actual length?
 			if ( maxTimeStamp > minTimeStamp ) {
 
-				returnObject.stacks.set( parseInt( nodeID ), {
+				returnObject.stacks[ nodeID ] = {
 					name: rawStacks[ nodeID ].attrName,
 					layers: layers,
 					length: maxTimeStamp - minTimeStamp,
 					frames: ( maxTimeStamp - minTimeStamp ) * 30
-				} );
+				};
 
 			}
 
@@ -2928,7 +2933,11 @@
 
 		}
 
-		animations.stacks.forEach( function ( stack ) {
+		var stacks = animations.stacks;
+
+		for ( var key in stacks ) {
+
+			var stack = stacks[ key ];
 
 			/**
 			 * @type {{
@@ -2997,7 +3006,7 @@
 
 			group.animations.push( THREE.AnimationClip.parseAnimation( animationData, bones ) );
 
-		} );
+		}
 
 	}