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

Merge pull request #11168 from donmccurdy/feat-gltf-vertex-colors

[glTF] Enable vertex colors on materials.
Mr.doob преди 8 години
родител
ревизия
3831f6f6d1
променени са 1 файла, в които са добавени 21 реда и са изтрити 19 реда
  1. 21 19
      examples/js/loaders/GLTF2Loader.js

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

@@ -1696,9 +1696,15 @@ THREE.GLTF2Loader = ( function () {
 
 					var primitive = primitives[ name ];
 
+					var material = primitive.material !== undefined ? dependencies.materials[ primitive.material ] : createDefaultMaterial();
+
+					var geometry;
+
+					var meshNode;
+
 					if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES || primitive.mode === undefined ) {
 
-						var geometry = new THREE.BufferGeometry();
+						geometry = new THREE.BufferGeometry();
 
 						var attributes = primitive.attributes;
 
@@ -1763,19 +1769,12 @@ THREE.GLTF2Loader = ( function () {
 
 						}
 
-						var material = dependencies.materials !== undefined ? dependencies.materials[ primitive.material ] : createDefaultMaterial();
-
-						var meshNode = new THREE.Mesh( geometry, material );
+						meshNode = new THREE.Mesh( geometry, material );
 						meshNode.castShadow = true;
-						meshNode.name = ( name === "0" ? group.name : group.name + name );
-
-						if ( primitive.extras ) meshNode.userData = primitive.extras;
-
-						group.add( meshNode );
 
 					} else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) {
 
-						var geometry = new THREE.BufferGeometry();
+						geometry = new THREE.BufferGeometry();
 
 						var attributes = primitive.attributes;
 
@@ -1803,10 +1802,6 @@ THREE.GLTF2Loader = ( function () {
 
 						}
 
-						var material = dependencies.materials[ primitive.material ];
-
-						var meshNode;
-
 						if ( primitive.indices !== undefined ) {
 
 							geometry.setIndex( dependencies.accessors[ primitive.indices ] );
@@ -1819,18 +1814,25 @@ THREE.GLTF2Loader = ( function () {
 
 						}
 
-						meshNode.name = ( name === "0" ? group.name : group.name + name );
+					} else {
 
-						if ( primitive.extras ) meshNode.userData = primitive.extras;
+						throw new Error( "Only triangular and line primitives are supported" );
 
-						group.add( meshNode );
+					}
 
-					} else {
+					if ( geometry.attributes.color !== undefined ) {
 
-						console.warn( "Only triangular and line primitives are supported" );
+						material.vertexColors = THREE.VertexColors;
+						material.needsUpdate = true;
 
 					}
 
+					meshNode.name = ( name === "0" ? group.name : group.name + name );
+
+					if ( primitive.extras ) meshNode.userData = primitive.extras;
+
+					group.add( meshNode );
+
 				}
 
 				return group;