mirror of
https://github.com/wahyd4/three.js.git
synced 2026-08-13 15:05:56 +10:00
88 lines
1.7 KiB
JavaScript
88 lines
1.7 KiB
JavaScript
/**
|
|
* @author alteredq / http://alteredqualia.com/
|
|
*/
|
|
|
|
THREE.MorphAnimMesh = function( geometry, material ) {
|
|
|
|
THREE.Mesh.call( this, geometry, material );
|
|
|
|
// API
|
|
|
|
this.duration = 1000; // milliseconds
|
|
this.mirroredLoop = false;
|
|
this.time = 0;
|
|
|
|
// internals
|
|
|
|
this.lastKeyframe = 0;
|
|
this.currentKeyframe = 0;
|
|
|
|
this.direction = 1;
|
|
this.directionBackwards = false;
|
|
|
|
};
|
|
|
|
THREE.MorphAnimMesh.prototype = new THREE.Mesh();
|
|
THREE.MorphAnimMesh.prototype.constructor = THREE.MorphAnimMesh;
|
|
|
|
THREE.MorphAnimMesh.prototype.updateAnimation = function ( delta ) {
|
|
|
|
var frameTime = this.duration / ( this.geometry.morphTargets.length - 1 );
|
|
|
|
this.time += this.direction * delta;
|
|
|
|
if ( this.mirroredLoop ) {
|
|
|
|
if ( this.time > this.duration || this.time < 0 ) {
|
|
|
|
this.direction *= -1;
|
|
|
|
if ( this.time > this.duration ) {
|
|
|
|
this.time = this.duration;
|
|
this.directionBackwards = true;
|
|
|
|
}
|
|
|
|
if ( this.time < 0 ) {
|
|
|
|
this.time = 0;
|
|
this.directionBackwards = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
this.time = this.time % this.duration;
|
|
|
|
}
|
|
|
|
var keyframe = THREE.Math.clamp( Math.floor( this.time / frameTime ), 0, this.geometry.morphTargets.length - 1 );
|
|
|
|
if ( keyframe != this.currentKeyframe ) {
|
|
|
|
this.morphTargetInfluences[ this.lastKeyframe ] = 0;
|
|
this.morphTargetInfluences[ this.currentKeyframe ] = 1;
|
|
|
|
this.morphTargetInfluences[ keyframe ] = 0;
|
|
|
|
this.lastKeyframe = this.currentKeyframe;
|
|
this.currentKeyframe = keyframe;
|
|
|
|
}
|
|
|
|
var mix = ( this.time % frameTime ) / frameTime;
|
|
|
|
if ( this.directionBackwards ) {
|
|
|
|
mix = 1 - mix;
|
|
|
|
}
|
|
|
|
this.morphTargetInfluences[ this.currentKeyframe ] = mix;
|
|
this.morphTargetInfluences[ this.lastKeyframe ] = 1 - mix;
|
|
|
|
};
|