From 02b22e5ed1d6445733a17bebd5ab58db0d6ce8f4 Mon Sep 17 00:00:00 2001 From: Hugo Newman Date: Thu, 22 Jun 2023 11:29:09 +0100 Subject: [PATCH 1/3] fix: Camera target calculated from new position --- viewer/packages/camera-manager/src/CameraManagerHelper.ts | 5 +++-- viewer/packages/camera-manager/src/DefaultCameraManager.ts | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/viewer/packages/camera-manager/src/CameraManagerHelper.ts b/viewer/packages/camera-manager/src/CameraManagerHelper.ts index 36ce69558df..f8b599c1e7d 100644 --- a/viewer/packages/camera-manager/src/CameraManagerHelper.ts +++ b/viewer/packages/camera-manager/src/CameraManagerHelper.ts @@ -42,7 +42,8 @@ export class CameraManagerHelper { static calculateNewTargetFromRotation( camera: THREE.PerspectiveCamera, rotation: THREE.Quaternion, - currentTarget: THREE.Vector3 + currentTarget: THREE.Vector3, + position: THREE.Vector3 ): THREE.Vector3 { const distToTarget = currentTarget.clone().sub(camera.position); const tempCam = camera.clone(); @@ -54,7 +55,7 @@ export class CameraManagerHelper { .getWorldDirection(new THREE.Vector3()) .normalize() .multiplyScalar(distToTarget.length()) - .add(tempCam.position); + .add(position); return newTarget; } diff --git a/viewer/packages/camera-manager/src/DefaultCameraManager.ts b/viewer/packages/camera-manager/src/DefaultCameraManager.ts index 9417d3ceb21..60b114e99b7 100644 --- a/viewer/packages/camera-manager/src/DefaultCameraManager.ts +++ b/viewer/packages/camera-manager/src/DefaultCameraManager.ts @@ -212,7 +212,8 @@ export class DefaultCameraManager implements CameraManager { ? CameraManagerHelper.calculateNewTargetFromRotation( this._camera, state.rotation, - this._controls.getState().target + this._controls.getState().target, + newPosition ) : this._controls.getState().target); From 68ce4142886622399ea49ddd156c0383100e19f2 Mon Sep 17 00:00:00 2001 From: Hugo Newman Date: Mon, 26 Jun 2023 09:23:43 +0100 Subject: [PATCH 2/3] fix: Updated camera manager helper test Updated API documentaiton --- .../packages/camera-manager/tests/CameraManagerHelper.test.ts | 2 +- viewer/reveal.api.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/viewer/packages/camera-manager/tests/CameraManagerHelper.test.ts b/viewer/packages/camera-manager/tests/CameraManagerHelper.test.ts index 11d49f21827..fcb947b815f 100644 --- a/viewer/packages/camera-manager/tests/CameraManagerHelper.test.ts +++ b/viewer/packages/camera-manager/tests/CameraManagerHelper.test.ts @@ -20,7 +20,7 @@ describe(CameraManagerHelper.name, () => { // creates rotation around Y axis of 180 degrees. const rotation = new THREE.Quaternion().setFromAxisAngle(new THREE.Vector3(0, 1, 0), Math.PI); - const newTarget = CameraManagerHelper.calculateNewTargetFromRotation(camera, rotation, target); + const newTarget = CameraManagerHelper.calculateNewTargetFromRotation(camera, rotation, target, camera.position); expect(newTarget.x).toBeCloseTo(target.x); expect(newTarget.y).toBeCloseTo(target.y); diff --git a/viewer/reveal.api.md b/viewer/reveal.api.md index 6749d316162..fb5757c4143 100644 --- a/viewer/reveal.api.md +++ b/viewer/reveal.api.md @@ -251,7 +251,7 @@ export class CameraManagerHelper { target: THREE_2.Vector3; }; static calculateNewRotationFromTarget(camera: THREE_2.PerspectiveCamera, newTarget: THREE_2.Vector3): THREE_2.Quaternion; - static calculateNewTargetFromRotation(camera: THREE_2.PerspectiveCamera, rotation: THREE_2.Quaternion, currentTarget: THREE_2.Vector3): THREE_2.Vector3; + static calculateNewTargetFromRotation(camera: THREE_2.PerspectiveCamera, rotation: THREE_2.Quaternion, currentTarget: THREE_2.Vector3, position: THREE_2.Vector3): THREE_2.Vector3; static updateCameraNearAndFar(camera: THREE_2.PerspectiveCamera, combinedBbox: THREE_2.Box3): void; } From 7991c19584574f97044abeea136ada76875a0ba5 Mon Sep 17 00:00:00 2001 From: Hugo Newman Date: Mon, 26 Jun 2023 10:04:28 +0100 Subject: [PATCH 3/3] fix: 'Examples' camera manager implementation --- examples/src/utils/CustomCameraManager.ts | 7 ++++++- viewer/packages/camera-manager/src/CameraManagerHelper.ts | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/examples/src/utils/CustomCameraManager.ts b/examples/src/utils/CustomCameraManager.ts index 7ab14fa11fd..4c98bc240e0 100644 --- a/examples/src/utils/CustomCameraManager.ts +++ b/examples/src/utils/CustomCameraManager.ts @@ -48,7 +48,12 @@ export class CustomCameraManager implements CameraManager { const target = state.target ?? (state.rotation - ? CameraManagerHelper.calculateNewTargetFromRotation(this._camera, state.rotation, this._controls.target) + ? CameraManagerHelper.calculateNewTargetFromRotation( + this._camera, + state.rotation, + this._controls.target, + position + ) : this._controls.target); this._camera.position.copy(position); diff --git a/viewer/packages/camera-manager/src/CameraManagerHelper.ts b/viewer/packages/camera-manager/src/CameraManagerHelper.ts index f8b599c1e7d..5882a6b5e06 100644 --- a/viewer/packages/camera-manager/src/CameraManagerHelper.ts +++ b/viewer/packages/camera-manager/src/CameraManagerHelper.ts @@ -37,6 +37,7 @@ export class CameraManagerHelper { * @param camera Used camera instance. * @param rotation New camera rotation in quaternion form. * @param currentTarget Current camera target. + * @param position New camera position. * @returns */ static calculateNewTargetFromRotation(