diff --git a/react-components/src/hooks/useSceneDefaultCamera.tsx b/react-components/src/hooks/useSceneDefaultCamera.tsx index d9f2dc4591a..22b8fa735e9 100644 --- a/react-components/src/hooks/useSceneDefaultCamera.tsx +++ b/react-components/src/hooks/useSceneDefaultCamera.tsx @@ -46,20 +46,22 @@ export const useSceneDefaultCamera = ( fitCameraToSceneDefault: () => { const initialCameraState = viewer.cameraManager.getCameraState(); - viewer.cameraManager.setCameraState({ position, target }); - - // Check if camera pivot point is in origin - // If not, preserve the target + // Preserve pivot point if user has already set a pivot point + // If not, set the pivot point near the center of the scene + // When moving Scene to system space, we will extend the data + // model to store pos, rot and pivot if ( - !( - initialCameraState.target.x === 0 && - initialCameraState.target.y === 0 && - initialCameraState.target.z === 0 - ) + initialCameraState.target.x === 0 && + initialCameraState.target.y === 0 && + initialCameraState.target.z === 0 ) { - viewer.cameraManager.setCameraState({ - target: initialCameraState.target - }); + viewer.cameraManager.setCameraState({ position, target }); + } else { + const direction = new Vector3().subVectors(position, target).normalize(); + const rotation = new Euler().setFromVector3(direction); + const quaternion = new Quaternion().setFromEuler(rotation); + + viewer.cameraManager.setCameraState({ position, rotation: quaternion }); } }, isFetched: true