浏览代码

[gltf] Fix parsing of Bone nodes.

Don McCurdy 8 年之前
父节点
当前提交
e17a485307
共有 1 个文件被更改,包括 19 次插入13 次删除
  1. 19 13
      examples/js/loaders/GLTF2Loader.js

+ 19 - 13
examples/js/loaders/GLTF2Loader.js

@@ -2531,28 +2531,34 @@ THREE.GLTF2Loader = ( function () {
 		var extensions = this.extensions;
 		var scope = this;
 
-		return _each( json.nodes, function ( node ) {
-
-			var matrix = new THREE.Matrix4();
+		var nodes = json.nodes || [];
 
-			var _node;
+		// Nothing in the node definition indicates whether it is a Bone or an
+		// Object3D. So, traverse the hierarchy once in advance, using node.skins
+		// references to mark bones.
+		nodes.forEach( function ( node ) {
 
-			if ( node.jointName ) {
+			if ( node.skin !== undefined ) {
 
-				_node = new THREE.Bone();
-				_node.name = node.name !== undefined ? node.name : node.jointName;
-				_node.jointName = node.jointName;
+				json.skins[ node.skin ].joints.forEach( function ( id ) {
 
-			} else {
+					nodes[ id ].isBone = true;
 
-				_node = new THREE.Object3D();
-				if ( node.name !== undefined ) _node.name = node.name;
+				} );
 
 			}
 
-			if ( _node.name !== undefined ) {
+		} );
+
+		return _each( json.nodes, function ( node ) {
+
+			var matrix = new THREE.Matrix4();
+
+			var _node = node.isBone === true ? new THREE.Bone() : new THREE.Object3D();
+
+			if ( node.name !== undefined ) {
 
-				_node.name = THREE.PropertyBinding.sanitizeNodeName( _node.name );
+				_node.name = THREE.PropertyBinding.sanitizeNodeName( node.name );
 
 			}