diff --git a/viewer/animatedvec3.js b/viewer/animatedvec3.js index cdb1d102..22d67492 100644 --- a/viewer/animatedvec3.js +++ b/viewer/animatedvec3.js @@ -28,7 +28,7 @@ export class AnimatedVec3 { t = 1; b = true; } - vec3.lerp(this.tmp, this.a, this.b, t); + vec3.cerp(this.tmp, this.a, this.b, t); if (b) { if (this.t2) { this.t0 = this.t1; @@ -73,4 +73,4 @@ export class AnimatedVec3 { } } -AnimatedVec3.ACTIVE_ANIMATIONS = 0; \ No newline at end of file +AnimatedVec3.ACTIVE_ANIMATIONS = 0; diff --git a/viewer/glmatrix/vec3.js b/viewer/glmatrix/vec3.js index 21b423e8..f8a0e059 100644 --- a/viewer/glmatrix/vec3.js +++ b/viewer/glmatrix/vec3.js @@ -399,6 +399,27 @@ export function lerp(out, a, b, t) { return out; } +/** + * Performs a cosine interpolation between two vec3's + * + * @param {vec3} out the receiving vector + * @param {ReadonlyVec3} a the first operand + * @param {ReadonlyVec3} b the second operand + * @param {Number} t interpolation amount, in the range [0-1], between the two inputs + * @returns {vec3} out + */ +export function cerp(out, a, b, t) { + let ax = a[0]; + let ay = a[1]; + let az = a[2]; + + let delta = (1-Math.cos(t*Math.PI))/2; + out[0] = ax + delta * (b[0] - ax); + out[1] = ay + delta * (b[1] - ay); + out[2] = az + delta * (b[2] - az); + return out; +} + /** * Performs a hermite interpolation with two control points * diff --git a/viewer/viewer.js b/viewer/viewer.js index 1134a73c..a9427eaa 100644 --- a/viewer/viewer.js +++ b/viewer/viewer.js @@ -204,7 +204,7 @@ export class Viewer { callByType(method, types, ...args) { let elems = types.map((i) => this.viewObjectsByType.get(i) || []) .reduce((a, b) => a.concat(b), []) - .map((o) => o.oid); + .map((o) => o.uniqueId); // Assuming all passed methods return a promise return method.call(this, elems, ...args); }