12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- /**
- * @author mrdoob / http://mrdoob.com
- * @author willy-vvu / http://willy-vvu.github.io
- */
- THREE.MorphAnimation = function ( mesh ) {
- this.mesh = mesh;
- this.frames = mesh.morphTargetInfluences.length;
- this.currentTime = 0;
- this.duration = 1000;
- this.loop = true;
- this.lastFrame = 0;
- this.currentFrame = 0;
- this.isPlaying = false;
- };
- THREE.MorphAnimation.prototype = {
- constructor: THREE.MorphAnimation,
- play: function () {
- this.isPlaying = true;
- },
- pause: function () {
- this.isPlaying = false;
- },
- update: function ( delta ) {
- if ( this.isPlaying === false ) return;
- this.currentTime += delta;
- if ( this.loop === true && this.currentTime > this.duration ) {
- this.currentTime %= this.duration;
- }
- this.currentTime = Math.min( this.currentTime, this.duration );
- var frameTime = this.duration / this.frames;
- var frame = Math.floor( this.currentTime / frameTime );
- var influences = this.mesh.morphTargetInfluences;
- if ( frame !== this.currentFrame ) {
- influences[ this.lastFrame ] = 0;
- influences[ this.currentFrame ] = 1;
- influences[ frame ] = 0;
- this.lastFrame = this.currentFrame;
- this.currentFrame = frame;
- }
- var mix = ( this.currentTime % frameTime ) / frameTime;
- influences[ frame ] = mix;
- influences[ this.lastFrame ] = 1 - mix;
- }
- };
|