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 =...