@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
47 lines (46 loc) • 1.42 kB
JavaScript
;
export function createKeyframeTangent() {
return { slope: 0, accel: 0 };
}
export function getTangent(keyframe, isInTangent) {
if (isInTangent) {
return keyframe.in;
} else {
return keyframe.out || keyframe.in;
}
}
export function keyframeTangentToEndPoint(keyframe, isInTangent, target) {
const tangent = getTangent(keyframe, isInTangent);
const angle = Math.asin(tangent.slope);
target.x = Math.cos(angle) * tangent.accel;
target.y = Math.sin(angle) * tangent.accel;
}
export function endPointToKeyframeTangent(endPoint, isInTangent, target) {
const angle = endPoint.angle();
target.slope = Math.sin(angle);
target.accel = endPoint.length();
}
export function keyframeTangentSplit(keyframe) {
if (!keyframe.out) {
keyframe.out = createKeyframeTangent();
}
copyKeyframeTangent(keyframe.in, keyframe.out);
}
export function keyframeTangentMerge(keyframe) {
const _in = keyframe.in;
const _out = keyframe.out;
if (!_out) {
return;
}
keyframe.in.slope = (_in.slope + _out.slope) * 0.5;
keyframe.in.accel = (_in.accel + _out.accel) * 0.5;
delete keyframe.out;
}
export function copyKeyframeTangent(src, target) {
target.slope = src.slope;
target.accel = src.accel;
}
export function lerpKeyframeTangents(t1, t2, lerp, target) {
target.slope = t1.slope * (1 - lerp) + t2.slope * lerp;
target.accel = t1.accel * (1 - lerp) + t2.accel * lerp;
}