Browse Source

adapt webgl_animation_skinning_morph to the new clip design.

Ben Houston 10 years ago
parent
commit
71480f0a85

+ 1 - 1
examples/webgl_animation_skinning_morph.html

@@ -237,7 +237,7 @@
 				var clipMorpher = THREE.AnimationClip.CreateMorphAnimation( mesh.geometry.morphTargets, 3 );
 				mixer.addAction( new THREE.AnimationAction( clipMorpher, 0, 1, 1, true ) );
 
-				var clipBones = THREE.AnimationClip.FromJSONLoaderAnimation( geometry.animation, geometry.bones );
+				var clipBones = geometry.clips[0];
 				mixer.addAction( new THREE.AnimationAction( clipBones, 0, 1, 1, true ) );
 			}
 

+ 1 - 0
src/animation/AnimationAction.js

@@ -8,6 +8,7 @@
 
 THREE.AnimationAction = function ( clip, startTime, timeScale, weight, loop ) {
 
+	if( clip === undefined ) throw new Error( 'clip is null' );
 	this.clip = clip;
 	this.startTime = startTime || 0;
 	this.timeScale = timeScale || 1;

+ 34 - 2
src/animation/AnimationClip.js

@@ -178,6 +178,7 @@ THREE.AnimationClip.FromImplicitMorphTargetAnimations = function( morphTargets,
 // parse the standard JSON format for clips
 THREE.AnimationClip.parse = function( json ) {
 
+	optionalPrefix = optionalPrefix || "";
 	var name = json.name || "default";
 	var duration = json.duration || -1;
 	var fps = json.fps || 30;
@@ -187,7 +188,38 @@ THREE.AnimationClip.parse = function( json ) {
 
 	for( var i = 0; i < animationTracks.length; i ++ ) {
 
-		tracks.push( THREE.KeyframeTrack.parse( animationTracks[i] ).scale( 1 / fps ) );
+		var track = THREE.KeyframeTrack.parse( animationTracks[i] ).scale( 1 / fps );
+		tracks.push( track );
+
+	}
+
+	if( tracks.length === 0 ) return null;
+
+	return new THREE.AnimationClip( name, duration, tracks );
+
+};
+
+
+// parse the JSON format for THREE.Geometry clips
+THREE.AnimationClip.parseGeometryClip = function( json ) {
+
+	var name = json.name || "default";
+	var duration = json.duration || -1;
+	var fps = json.fps || 30;
+	var animationTracks = json.tracks || [];
+
+	var tracks = [];
+
+	for( var i = 0; i < animationTracks.length; i ++ ) {
+
+		var track = THREE.KeyframeTrack.parse( animationTracks[i] ).scale( 1 / fps );
+		if( track.name.indexOf('morphTargets') >= 0 ) {
+			track.name = track.name.replace('morphTargets', 'morphTargetInfluences' );
+		}
+		if( track.name.indexOf('.') !== 0 ) {
+			track.name = '.' + track.name;			
+		}
+		tracks.push( track );
 
 	}
 
@@ -321,7 +353,7 @@ THREE.AnimationClip.parseAnimationHierarchy = function( animation, bones, nodeNa
 	}
 
 
-	console.log( 'input animation', animation, 'resulting tracks', tracks );
+	//console.log( 'input animation', animation, 'resulting tracks', tracks );
 
 	if( tracks.length === 0 ) {
 

+ 4 - 4
src/loaders/JSONLoader.js

@@ -429,8 +429,8 @@ THREE.JSONLoader.prototype = {
 
 			if( animation ) {
 
-				var clip = THREE.AnimationClip.parseAnimationHierarchy( animation );
-				if( clip ) this.clips.push( clip );
+				var clip = THREE.AnimationClip.parseAnimationHierarchy( animation, geometry.bones );
+				if( clip ) geometry.clips.push( clip );
 
 			}
 
@@ -439,8 +439,8 @@ THREE.JSONLoader.prototype = {
 
 			for( var i = 0; i < clips.length; i ++ ) {
 
-				var clip = THREE.AnimationClip.parse( clips[i] );
-				if( clip ) this.clips.push( clip );
+				var clip = THREE.AnimationClip.parseGeometryClip( clips[i] );
+				if( clip ) geometry.clips.push( clip );
 
 			}