From 0c2cbe8d3c9858735d254e576db746bc6eb6b486 Mon Sep 17 00:00:00 2001 From: D4VID Date: Sun, 1 Jun 2025 17:23:38 +0200 Subject: [PATCH] Fix rotation interpolation --- CameraRoll/CameraRoll/manifest.jecs | 2 +- .../CameraRoll/src/client/tool/CameraRollTool.cs | 13 ++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/CameraRoll/CameraRoll/manifest.jecs b/CameraRoll/CameraRoll/manifest.jecs index d86374a..0ab6610 100755 --- a/CameraRoll/CameraRoll/manifest.jecs +++ b/CameraRoll/CameraRoll/manifest.jecs @@ -1,7 +1,7 @@ ID: D4VID_CameraRoll Name: CameraRoll Author: D4VID -Version: 0.1.0 +Version: 0.2.0 Priority: 0 ClientOnly: true Dependencies: diff --git a/CameraRoll/CameraRoll/src/client/tool/CameraRollTool.cs b/CameraRoll/CameraRoll/src/client/tool/CameraRollTool.cs index 0820205..a29ec17 100755 --- a/CameraRoll/CameraRoll/src/client/tool/CameraRollTool.cs +++ b/CameraRoll/CameraRoll/src/client/tool/CameraRollTool.cs @@ -104,13 +104,12 @@ namespace CameraRoll.Client.Tool { _interpolationState += InterpolationSpeed; Vector3 prevPos = GetPos(_pointIndex - 1); - Vector3 posDiff = GetPos(_pointIndex) - prevPos; - _cam.transform.position = prevPos + posDiff * _interpolationState; + Vector3 newPos = GetPos(_pointIndex); + _cam.transform.position = Vector3.Lerp(prevPos , newPos, _interpolationState); - Vector3 prevRot = GetRot(_pointIndex - 1); - Vector3 rotDiff = GetRot(_pointIndex) - prevRot; - _cam.transform.eulerAngles = prevRot + rotDiff * _interpolationState; - // TODO: interpolate across the shorter direction of rotation + Quaternion prevRot = GetRot(_pointIndex - 1); + Quaternion newRot = GetRot(_pointIndex); + _cam.transform.rotation = Quaternion.Slerp(prevRot, newRot, _interpolationState); if (_interpolationState >= 1.0f) { _pointIndex++; @@ -120,7 +119,7 @@ namespace CameraRoll.Client.Tool { } private static Vector3 GetPos(int index) => PathPoints[index].transform.position; - private static Vector3 GetRot(int index) => PathPoints[index].transform.eulerAngles; + private static Quaternion GetRot(int index) => PathPoints[index].transform.rotation; public static void OnExit() { Clear();