frame interpolation version 2

test

by jmchen

HTML

<div>
    <button id='hitOnce' class='buttonClass'>Hit Once</button>
    
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r70/three.min.js"></script>
<script src="https://dl.dropboxusercontent.com/u/3587259/Code/Threejs/OrbitControls.js">
    
</script>

CSS

#info {
    position: absolute;
    top: 0px;
    width: 100%;
    padding: 10px;
    text-align: center;
    color: #ffff00
}
body {
    overflow: hidden;
}

JavaScript

var frameStart, frameEnd;


var Stick = function () {
    // properties
    this.T = 3; // in seconds
    this.keys = [{
        timeS: 0,
        value: 0
    }, {
        timeS: 0.25,
        value: 3.14 / 4
    }, {
        timeS: 0.3,
        value: -.2
    },
       {
        timeS: 0.5,
        value: 0
    },{
    	timeS: 1,
        value: 0
    }
                ];
    //////////////////////
  //  this.framepos = new THREE.Vector3();/////test
  //  this.frameposnext = new THREE.Vector3();
    this.frame1 = new THREE.Object3D();  // starting & ending frames
    this.frame2 = new THREE.Object3D();  // of startOneCycle
                                         // default frame1 = frame2 = frameChair.clone();
    
    this.startTime = 0;
    this.angle = 0; // for 'text-based' rendering
    this.instrument = 's';
    this.group = newMesh();
    
    // methods
    this.setT = function (period) {
        this.T = period;
    }
    this.setMaxKeysValue = function (intensity){
    	var max = 0, maxi;
        for( i = 0; this.keys[i]; i++){
        	if(this.keys[i].value > max){
                max = this.keys[i].value;
            	maxi = i;
            }
        }
        this.keys[maxi].value = intensity;
        console.log(true);
    }

    this.interpolate = function (s) { // normalized time
        if (s > 1) // end of cycle
        return this.keys[this.keys.length - 1].value;

        for (var i = 1; i < this.keys.length; i++) {
            if (s < this.keys[i].timeS) break;
        }

        var vv = this.keys[i - 1].value + (s - this.keys[i - 1].timeS) / (this.keys[i].timeS - this.keys[i - 1].timeS) * (this.keys[i].value - this.keys[i - 1].value);
        return vv;
    };

    this.update = function (time) { // time: elapsedTime
        var s = (time - this.startTime) / this.T;
        
        // change stickmesh position/orientation
        this.angle = this.interpolate(s);
        this.group.rotation.x = this.angle;
        
        var intFrame =...