Improve camera state comparison using epsilon for float precision
This commit is contained in:
@@ -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)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user