From f30b3a410ce7a031744b475ef0e664b2c342f0b5 Mon Sep 17 00:00:00 2001 From: Alexander Rose <alexander.rose@weirdbyte.de> Date: Thu, 30 Mar 2023 22:32:58 -0700 Subject: [PATCH] init camera for fly mode - like for pointer-lock --- src/mol-canvas3d/controls/trackball.ts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/mol-canvas3d/controls/trackball.ts b/src/mol-canvas3d/controls/trackball.ts index 44117c8c3..1a702684f 100644 --- a/src/mol-canvas3d/controls/trackball.ts +++ b/src/mol-canvas3d/controls/trackball.ts @@ -380,8 +380,8 @@ namespace TrackballControls { const moveEye = Vec3(); function moveCamera(deltaT: number) { - const minDistance = Math.max(camera.state.minNear, p.minDistance); Vec3.sub(moveEye, camera.position, camera.target); + const minDistance = Math.max(camera.state.minNear, p.minDistance); Vec3.setMagnitude(moveEye, moveEye, minDistance); const moveSpeed = deltaT * (60 / 1000) * p.moveSpeed * (keyState.boostMove === 1 ? p.boostMoveFactor : 1); @@ -710,11 +710,16 @@ namespace TrackballControls { } } + function initCameraMove() { + Vec3.sub(moveEye, camera.position, camera.target); + const minDistance = Math.max(camera.state.minNear, p.minDistance); + Vec3.setMagnitude(moveEye, moveEye, minDistance); + Vec3.sub(camera.target, camera.position, moveEye); + } + function onLock(isLocked: boolean) { if (isLocked) { - Vec3.sub(moveEye, camera.position, camera.target); - Vec3.setMagnitude(moveEye, moveEye, camera.state.minNear); - Vec3.sub(camera.target, camera.position, moveEye); + initCameraMove(); } } @@ -806,6 +811,9 @@ namespace TrackballControls { if (props.animate?.name === 'rock' && p.animate.name !== 'rock') { resetRock(); // start rocking from the center } + if (props.flyMode && !p.flyMode) { + initCameraMove(); + } Object.assign(p, props); Object.assign(b, props.bindings); }, -- GitLab