Преглед на файлове

GLTFLoader: Handle multiple primitives.

Mr.doob преди 9 години
родител
ревизия
74e957127c
променени са 1 файла, в които са добавени 25 реда и са изтрити 6 реда
  1. 25 6
      examples/js/loaders/GLTFLoader.js

+ 25 - 6
examples/js/loaders/GLTFLoader.js

@@ -125,16 +125,20 @@ THREE.GLTFLoader.prototype = {
 
 			var mesh = meshes[ meshId ];
 
-			var geometry = new THREE.BufferGeometry();
-			geometry.name = mesh.name;
+			var geometries = {
+				name: mesh.name,
+				array: []
+			};
 
 			var primitives = mesh.primitives;
 
-			for ( var i = 0; i < 1; /*primitives.length;*/ i ++ ) {
+			for ( var i = 0; i < primitives.length; i ++ ) {
 
-				var primitive = primitives[ 0 ];
+				var primitive = primitives[ i ];
 				var attributes = primitive.attributes;
 
+				var geometry = new THREE.BufferGeometry();
+
 				if ( primitive.indices ) {
 
 					geometry.setIndex( accessors[ primitive.indices ]._bufferattribute );
@@ -164,9 +168,11 @@ THREE.GLTFLoader.prototype = {
 
 				}
 
+				geometries.array.push( geometry );
+
 			}
 
-			mesh._geometry = geometry;
+			mesh._geometries = geometries;
 
 		}
 
@@ -212,7 +218,20 @@ THREE.GLTFLoader.prototype = {
 				for ( var i = 0; i < node.meshes.length; i ++ ) {
 
 					var meshId = node.meshes[ i ];
-					object.add( new THREE.Mesh( meshes[ meshId ]._geometry, new THREE.MeshNormalMaterial() ) );
+
+					var geometries = meshes[ meshId ]._geometries;
+
+					var group = new THREE.Group();
+					group.name = geometries.name;
+					object.add( group );
+
+					var array = geometries.array;
+
+					for ( var j = 0; j < array.length; j ++ ) {
+
+						group.add( new THREE.Mesh( array[ j ], new THREE.MeshNormalMaterial() ) );
+
+					}
 
 				}