lingo3d
Version:
Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor
26 lines • 1.36 kB
JavaScript
import fpsAlpha from "../display/utils/fpsAlpha";
import getWorldPosition from "../memo/getWorldPosition";
import getWorldQuaternion from "../memo/getWorldQuaternion";
import interpolationCamera from "../engine/interpolationCamera";
import createInternalSystem from "./utils/createInternalSystem";
const lerp = (a, b, t) => a + (b - a) * t;
export const cameraInterpolationSystem = createInternalSystem("cameraInterpolationSystem", {
data: {},
update: (cameraTo, data) => {
const positionTo = getWorldPosition(cameraTo);
const quaternionTo = getWorldQuaternion(cameraTo);
interpolationCamera.position.lerpVectors(data.positionFrom, positionTo, data.progress);
interpolationCamera.quaternion.slerpQuaternions(data.quaternionFrom, quaternionTo, data.progress);
interpolationCamera.zoom = lerp(data.cameraFrom.zoom, cameraTo.zoom, data.progress);
interpolationCamera.fov = lerp(data.cameraFrom.fov, cameraTo.fov, data.progress);
interpolationCamera.updateProjectionMatrix();
data.progress =
Math.min((1 - data.progress) * fpsAlpha(0.1), data.diffMax) +
data.progress;
if (data.progress < 0.9999)
return;
cameraInterpolationSystem.delete(cameraTo);
data.onFinish();
}
});
//# sourceMappingURL=cameraInterpolationSystem.js.map