Fix rotation interpolation

master
D4VID 4 months ago
parent 3129ba0210
commit 0c2cbe8d3c

@ -1,7 +1,7 @@
ID: D4VID_CameraRoll ID: D4VID_CameraRoll
Name: CameraRoll Name: CameraRoll
Author: D4VID Author: D4VID
Version: 0.1.0 Version: 0.2.0
Priority: 0 Priority: 0
ClientOnly: true ClientOnly: true
Dependencies: Dependencies:

@ -104,13 +104,12 @@ namespace CameraRoll.Client.Tool {
_interpolationState += InterpolationSpeed; _interpolationState += InterpolationSpeed;
Vector3 prevPos = GetPos(_pointIndex - 1); Vector3 prevPos = GetPos(_pointIndex - 1);
Vector3 posDiff = GetPos(_pointIndex) - prevPos; Vector3 newPos = GetPos(_pointIndex);
_cam.transform.position = prevPos + posDiff * _interpolationState; _cam.transform.position = Vector3.Lerp(prevPos , newPos, _interpolationState);
Vector3 prevRot = GetRot(_pointIndex - 1); Quaternion prevRot = GetRot(_pointIndex - 1);
Vector3 rotDiff = GetRot(_pointIndex) - prevRot; Quaternion newRot = GetRot(_pointIndex);
_cam.transform.eulerAngles = prevRot + rotDiff * _interpolationState; _cam.transform.rotation = Quaternion.Slerp(prevRot, newRot, _interpolationState);
// TODO: interpolate across the shorter direction of rotation
if (_interpolationState >= 1.0f) { if (_interpolationState >= 1.0f) {
_pointIndex++; _pointIndex++;
@ -120,7 +119,7 @@ namespace CameraRoll.Client.Tool {
} }
private static Vector3 GetPos(int index) => PathPoints[index].transform.position; 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() { public static void OnExit() {
Clear(); Clear();

Loading…
Cancel
Save