diff --git a/nerfstudio/viewer/app/src/index.scss b/nerfstudio/viewer/app/src/index.scss index a27610a81..4aeaa6f1b 100644 --- a/nerfstudio/viewer/app/src/index.scss +++ b/nerfstudio/viewer/app/src/index.scss @@ -174,6 +174,8 @@ $sidebar-width: 100% !default; border: 2px solid #000; // box-shadow: 24px 24px; padding: 32px; + overflow-y: scroll; + height: 90%; } .LandingModal-box .WebSocketUrlField { diff --git a/nerfstudio/viewer/app/src/modules/LandingModal/LandingModal.jsx b/nerfstudio/viewer/app/src/modules/LandingModal/LandingModal.jsx index 645445680..a107b29b5 100644 --- a/nerfstudio/viewer/app/src/modules/LandingModal/LandingModal.jsx +++ b/nerfstudio/viewer/app/src/modules/LandingModal/LandingModal.jsx @@ -175,21 +175,15 @@ export default function LandingModel(props: LandingModalProps) {

Camera Keyboard Controls

-

-

- WASD - horizontal camera translation, QE - vertical camera - translation -
-
Arrow Keys - camera rotation
-
- Spacebar - reset camera orbit point and view direction to - origin -
-

+
+ Spacebar - reset camera to starting position
+ WS - forward camera translation, AD - side to side camera translation
+ QE - up and down camera translation, Arrow Keys - camera rotation +
- + ); } diff --git a/nerfstudio/viewer/app/src/modules/Scene/Scene.jsx b/nerfstudio/viewer/app/src/modules/Scene/Scene.jsx index dd0d36fc6..16848f937 100644 --- a/nerfstudio/viewer/app/src/modules/Scene/Scene.jsx +++ b/nerfstudio/viewer/app/src/modules/Scene/Scene.jsx @@ -29,9 +29,8 @@ export function get_scene_tree() { // Main camera const main_camera = new THREE.PerspectiveCamera(75, 1, 0.1, 1000); - main_camera.position.x = 0.7; - main_camera.position.y = -0.7; - main_camera.position.z = 0.3; + const start_position = new THREE.Vector3(0.7, -0.7, 0.3); + main_camera.position.set(start_position.x, start_position.y, start_position.z); main_camera.up = new THREE.Vector3(0, 0, 1); sceneTree.set_object_from_path(['Cameras', 'Main Camera'], main_camera); @@ -68,28 +67,38 @@ export function get_scene_tree() { const camera_controls = new CameraControls(main_camera, renderer.domElement); camera_controls.azimuthRotateSpeed = 0.3; camera_controls.polarRotateSpeed = 0.3; - camera_controls.minDistance = 0.3; - camera_controls.maxDistance = 20; - - camera_controls.dollySpeed = 0.1; + camera_controls.dollySpeed = 1.8; + camera_controls.infinityDolly = true; camera_controls.saveState(); const keyMap = []; const moveSpeed = 0.02; + const rotSpeed = .015; + const EPS = .01; - function moveCamera() { - if (keyMap.ArrowLeft === true) { - camera_controls.rotate(-0.02, 0, true); - } - if (keyMap.ArrowRight === true) { - camera_controls.rotate(0.02, 0, true); - } - if (keyMap.ArrowUp === true) { - camera_controls.rotate(0, -0.01, true); - } - if (keyMap.ArrowDown === true) { - camera_controls.rotate(0, 0.01, true); + function rotate() { + if (keyMap.ArrowLeft || keyMap.ArrowRight || keyMap.ArrowUp || keyMap.ArrowDown){ + const curTar = camera_controls.getTarget(); + const curPos = camera_controls.getPosition(); + const diff = curTar.sub(curPos).clampLength(0, EPS); + camera_controls.setTarget(curPos.x + diff.x, curPos.y + diff.y, curPos.z + diff.z); + + if (keyMap.ArrowLeft === true) { + camera_controls.rotate(rotSpeed, 0, true); + } + if (keyMap.ArrowRight === true) { + camera_controls.rotate(-rotSpeed, 0, true); + } + if (keyMap.ArrowUp === true) { + camera_controls.rotate(0, rotSpeed / 1.5, true); + } + if (keyMap.ArrowDown === true) { + camera_controls.rotate(0, -rotSpeed / 1.5, true); + } } + } + + function translate() { if (keyMap.KeyD === true) { camera_controls.truck(moveSpeed, 0, true); } @@ -97,10 +106,14 @@ export function get_scene_tree() { camera_controls.truck(-moveSpeed, 0, true); } if (keyMap.KeyW === true) { - camera_controls.forward(moveSpeed, true); + const curPos = camera_controls.getPosition(); + const newTar = camera_controls.getTarget(); + const newDiff = newTar.sub(curPos).normalize().multiplyScalar(curPos.length()); + camera_controls.setTarget(curPos.x + newDiff.x, curPos.y + newDiff.y, curPos.z + newDiff.z); + camera_controls.dolly(moveSpeed, true); } if (keyMap.KeyS === true) { - camera_controls.forward(-moveSpeed, true); + camera_controls.dolly(-moveSpeed, true); } if (keyMap.KeyQ === true) { camera_controls.truck(0, moveSpeed, true); @@ -110,6 +123,11 @@ export function get_scene_tree() { } } + function moveCamera() { + translate() + rotate() + } + function onKeyUp(event) { const keyCode = event.code; keyMap[keyCode] = false; @@ -240,6 +258,10 @@ export function get_scene_tree() { let drag = false; const onMouseDown = () => { drag = false; + const curPos = camera_controls.getPosition(); + const newTar = camera_controls.getTarget(); + const newDiff = newTar.sub(curPos).normalize().multiplyScalar(curPos.length()); + camera_controls.setTarget(curPos.x + newDiff.x, curPos.y + newDiff.y, curPos.z + newDiff.z); }; const onMouseMove = (e) => {