فهرست منبع

Merge pull request #7919 from takahirox/MMDLoader

Clean up some Animation related codes for MMDLoader
Mr.doob 9 سال پیش
والد
کامیت
72bf6ab767
2فایلهای تغییر یافته به همراه31 افزوده شده و 19 حذف شده
  1. 30 18
      examples/js/loaders/MMDLoader.js
  2. 1 1
      examples/webgl_loader_mmd.html

+ 30 - 18
examples/js/loaders/MMDLoader.js

@@ -2606,6 +2606,12 @@ THREE.MMDLoader.prototype.createAnimation = function ( mesh, vmd, name ) {
 
 	var initMotionAnimations = function () {
 
+		if ( vmd.metadata.motionCount === 0 ) {
+
+			return;
+
+		}
+
 		var bones = mesh.geometry.bones;
 		var orderedMotions = helper.createOrderedMotionArrays( bones, vmd.motions, 'boneName' );
 
@@ -2653,8 +2659,6 @@ THREE.MMDLoader.prototype.createAnimation = function ( mesh, vmd, name ) {
 
 		}
 
-		// add 2 secs as afterglow
-		maxTime += 2.0;
 		animation.length = maxTime;
 
 		for ( var i = 0; i < orderedMotions.length; i++ ) {
@@ -2666,8 +2670,6 @@ THREE.MMDLoader.prototype.createAnimation = function ( mesh, vmd, name ) {
 
 		}
 
-//		mesh.geometry.animation = animation;
-
 		if ( mesh.geometry.animations === undefined ) {
 
 			mesh.geometry.animations = [];
@@ -2680,6 +2682,12 @@ THREE.MMDLoader.prototype.createAnimation = function ( mesh, vmd, name ) {
 
 	var initMorphAnimations = function () {
 
+		if ( vmd.metadata.morphCount === 0 ) {
+
+			return;
+
+		}
+
 		var orderedMorphs = helper.createOrderedMotionArrays( mesh.geometry.morphTargets, vmd.morphs, 'morphName' );
 
 		var morphAnimation = {
@@ -2718,20 +2726,8 @@ THREE.MMDLoader.prototype.createAnimation = function ( mesh, vmd, name ) {
 
 		}
 
-		// add 2 secs as afterglow
-		maxTime += 2.0;
 		morphAnimation.length = maxTime;
 
-		for ( var i = 0; i < orderedMorphs.length; i++ ) {
-
-			var keys = morphAnimation.hierarchy[ i ].keys;
-			helper.insertAnimationKeyAtTimeZero( keys, 0.0 );
-			helper.insertStartAnimationKey( keys );
-
-		}
-
-//		geometry.morphAnimation = morphAnimation;
-
 		if ( mesh.geometry.morphAnimations === undefined ) {
 
 			mesh.geometry.morphAnimations = [];
@@ -2742,7 +2738,15 @@ THREE.MMDLoader.prototype.createAnimation = function ( mesh, vmd, name ) {
 
 		for ( var i = 0; i < orderedMorphs.length; i++ ) {
 
-			tracks.push( helper.generateTrackFromAnimationKeys( morphAnimation.hierarchy[ i ].keys, 'NumberKeyframeTrackEx', '.morphTargetInfluences[' + i + ']' ) );
+			var keys = morphAnimation.hierarchy[ i ].keys;
+
+			if ( keys.length === 0 ) {
+
+				continue;
+
+			}
+
+			tracks.push( helper.generateTrackFromAnimationKeys( keys, 'NumberKeyframeTrackEx', '.morphTargetInfluences[' + i + ']' ) );
 
 		}
 
@@ -4094,7 +4098,9 @@ THREE.MMDHelper.prototype = {
 	 * TODO: touching private properties ( ._actions and ._clip ) so consider better way
 	 *       to access them for safe and modularity.
 	 */
-	unifyAnimationDuration: function () {
+	unifyAnimationDuration: function ( params ) {
+
+		params = params === undefined ? {} : params;
 
 		var max = 0.0;
 
@@ -4141,6 +4147,12 @@ THREE.MMDHelper.prototype = {
 
 		}
 
+		if ( params.afterglow !== undefined ) {
+
+			max += params.afterglow;
+
+		}
+
 		// set the duration
 		for ( var i = 0; i < this.meshes.length; i++ ) {
 

+ 1 - 1
examples/webgl_loader_mmd.html

@@ -129,7 +129,7 @@
 
 					}
 
-					helper.unifyAnimationDuration();
+					helper.unifyAnimationDuration( { afterglow: 2.0 } );
 
 					scene.add( mesh );