浏览代码

Merge pull request #8410 from insominx/dev-update-marine-character

 Updated marine character for skinning example.
Mr.doob 9 年之前
父节点
当前提交
cfac3f2826

+ 28 - 9
examples/js/BlendCharacter.js

@@ -11,21 +11,40 @@ THREE.BlendCharacter = function () {
 
 		var scope = this;
 
-		var loader = new THREE.JSONLoader();
-		loader.load( url, function( geometry, materials ) {
+		var loader = new THREE.ObjectLoader();
+		loader.load( url, function( loadedObject ) {
 
-			var originalMaterial = materials[ 0 ];
-			originalMaterial.skinning = true;
+			// The exporter does not currently allow exporting a skinned mesh by itself
+			// so we must fish it out of the hierarchy it is embedded in (scene)
+			loadedObject.traverse( function( object ) {
 
-			THREE.SkinnedMesh.call( scope, geometry, originalMaterial );
+				if ( object instanceof THREE.SkinnedMesh ) {
 
-			var mixer = new THREE.AnimationMixer( scope );
-			scope.mixer = mixer;
+					scope.skinnedMesh = object;
+
+				}
+
+			} );
+
+			THREE.SkinnedMesh.call( scope, scope.skinnedMesh.geometry, scope.skinnedMesh.material );
+
+			// If we didn't successfully find the mesh, bail out
+			if ( scope.skinnedMesh == undefined ) {
+
+				console.log( 'unable to find skinned mesh in ' + url );
+				return;
+
+			}
+
+			scope.material.skinning = true;
+
+			scope.mixer = new THREE.AnimationMixer( scope );
+			scope.mixer = scope.mixer;
 
 			// Create the animations
-			for ( var i = 0; i < geometry.animations.length; ++ i ) {
+			for ( var i = 0; i < scope.geometry.animations.length; ++ i ) {
 
-				mixer.clipAction( geometry.animations[ i ] );
+				scope.mixer.clipAction( scope.geometry.animations[ i ] );
 
 			}
 

文件差异内容过多而无法显示
+ 0 - 35
examples/models/skinned/marine/marine.js


文件差异内容过多而无法显示
+ 0 - 35
examples/models/skinned/marine/marine_anims.js


文件差异内容过多而无法显示
+ 10 - 0
examples/models/skinned/marine/marine_anims.json


二进制
examples/models/skinned/marine/marine_anims.blend → examples/models/skinned/marine/marine_anims_all.blend


文件差异内容过多而无法显示
+ 10 - 0
examples/models/skinned/marine/marine_anims_all.json


二进制
examples/models/skinned/marine/marine_anims_core.blend


文件差异内容过多而无法显示
+ 10 - 0
examples/models/skinned/marine/marine_anims_core.json


二进制
examples/models/skinned/marine/marine_anims_single.blend


文件差异内容过多而无法显示
+ 10 - 0
examples/models/skinned/marine/marine_anims_single.json


二进制
examples/models/skinned/marine/marine_fbx.blend


二进制
examples/models/skinned/marine/marine_fk.blend


二进制
examples/models/skinned/marine/marine_ik.blend


文件差异内容过多而无法显示
+ 10 - 0
examples/models/skinned/marine/marine_ik.json


二进制
examples/models/skinned/marine/marine_ikrig.blend


文件差异内容过多而无法显示
+ 0 - 35
examples/models/skinned/marine/marine_ikrig.js


+ 2 - 6
examples/webgl_animation_skinning_blending.html

@@ -61,11 +61,7 @@
 				container = document.getElementById( 'container' );
 
 				scene = new THREE.Scene();
-				scene.add ( new THREE.AmbientLight( 0xaaaaaa ) );
-
-				var light = new THREE.DirectionalLight( 0xffffff, 1.5 );
-				light.position.set( 0, 0, 1000 );
-				scene.add( light );
+				scene.add ( new THREE.AmbientLight( 0xffffff ) );
 
 				renderer = new THREE.WebGLRenderer( { antialias: true, alpha: false } );
 				renderer.setClearColor( 0x777777 );
@@ -98,7 +94,7 @@
 				window.addEventListener( 'toggle-show-model', onShowModel );
 
 				blendMesh = new THREE.BlendCharacter();
-				blendMesh.load( "models/skinned/marine/marine_anims.js", start );
+				blendMesh.load( "models/skinned/marine/marine_anims_core.json", start );
 
 			}
 

部分文件因为文件数量过多而无法显示