Improve camera state comparison using epsilon for float precision

This commit is contained in:
2026-04-28 17:43:21 +02:00
parent 985f83ea32
commit 71ae447b3c

View File

@@ -114,15 +114,24 @@ export function cloneViewportPanelCameraState(cameraState: ViewportPanelCameraSt
}; };
} }
const VIEWPORT_CAMERA_STATE_EPSILON = 1e-6;
function areCameraNumbersEqual(a: number, b: number): boolean {
return Math.abs(a - b) <= VIEWPORT_CAMERA_STATE_EPSILON;
}
export function areViewportPanelCameraStatesEqual(a: ViewportPanelCameraState, b: ViewportPanelCameraState): boolean { export function areViewportPanelCameraStatesEqual(a: ViewportPanelCameraState, b: ViewportPanelCameraState): boolean {
return ( return (
a.target.x === b.target.x && areCameraNumbersEqual(a.target.x, b.target.x) &&
a.target.y === b.target.y && areCameraNumbersEqual(a.target.y, b.target.y) &&
a.target.z === b.target.z && areCameraNumbersEqual(a.target.z, b.target.z) &&
a.perspectiveOrbit.radius === b.perspectiveOrbit.radius && areCameraNumbersEqual(
a.perspectiveOrbit.theta === b.perspectiveOrbit.theta && a.perspectiveOrbit.radius,
a.perspectiveOrbit.phi === b.perspectiveOrbit.phi && b.perspectiveOrbit.radius
a.orthographicZoom === b.orthographicZoom ) &&
areCameraNumbersEqual(a.perspectiveOrbit.theta, b.perspectiveOrbit.theta) &&
areCameraNumbersEqual(a.perspectiveOrbit.phi, b.perspectiveOrbit.phi) &&
areCameraNumbersEqual(a.orthographicZoom, b.orthographicZoom)
); );
} }