mirror of
https://github.com/nerfstudio-project/nerfstudio.git
synced 2026-11-11 10:34:29 +08:00
parent
d3ba8f34ed
commit
e6fe546bb2
@ -3,6 +3,8 @@ import * as THREE from 'three';
|
||||
|
||||
import { useContext, useEffect } from 'react';
|
||||
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';
|
||||
import { CSS2DRenderer } from 'three/examples/jsm/renderers/CSS2DRenderer';
|
||||
|
||||
import { TransformControls } from 'three/examples/jsm/controls/TransformControls';
|
||||
import { useDispatch } from 'react-redux';
|
||||
import { drawCamera, drawSceneBounds } from './drawing';
|
||||
@ -12,6 +14,7 @@ import SceneNode from '../../SceneNode';
|
||||
import { WebSocketContext } from '../WebSocket/WebSocket';
|
||||
import { subscribe_to_changes } from '../../subscriber';
|
||||
|
||||
|
||||
const msgpack = require('msgpack-lite');
|
||||
|
||||
const SCENE_BOUNDS_NAME = 'Scene Bounds';
|
||||
@ -51,6 +54,13 @@ export function get_scene_tree() {
|
||||
renderer.setPixelRatio(window.devicePixelRatio);
|
||||
sceneTree.metadata.renderer = renderer;
|
||||
|
||||
const labelRenderer = new CSS2DRenderer();
|
||||
labelRenderer.setSize( window.innerWidth, window.innerHeight );
|
||||
labelRenderer.domElement.style.position = 'absolute';
|
||||
labelRenderer.domElement.style.top = '0px';
|
||||
document.body.appendChild( labelRenderer.domElement );
|
||||
sceneTree.metadata.labelRenderer = labelRenderer;
|
||||
|
||||
// Camera Controls
|
||||
const camera_controls = new OrbitControls(main_camera, renderer.domElement);
|
||||
camera_controls.rotateSpeed = 2.0;
|
||||
|
||||
@ -18,6 +18,7 @@ import PlayArrowIcon from '@mui/icons-material/PlayArrow';
|
||||
import TextField from '@mui/material/TextField';
|
||||
import Tooltip from '@mui/material/Tooltip';
|
||||
import VisibilityIcon from '@mui/icons-material/Visibility';
|
||||
import { CSS2DObject } from 'three/examples/jsm/renderers/CSS2DRenderer';
|
||||
import { CameraHelper } from './CameraHelper';
|
||||
import { get_curve_object_from_cameras, get_transform_matrix } from './curve';
|
||||
import { WebSocketContext } from '../../WebSocket/WebSocket';
|
||||
@ -172,11 +173,27 @@ export default function CameraPanel(props) {
|
||||
// draw cameras and curve to the scene
|
||||
useEffect(() => {
|
||||
// draw the cameras
|
||||
|
||||
const labels = Array.from(document.getElementsByClassName('label'));
|
||||
labels.forEach(label => {
|
||||
label.remove();
|
||||
});
|
||||
|
||||
sceneTree.delete(['Camera Path', 'Cameras']); // delete old cameras, which is important
|
||||
for (let i = 0; i < cameras.length; i += 1) {
|
||||
const camera = cameras[i];
|
||||
// camera.aspect = render_width / render_height;
|
||||
const camera_helper = new CameraHelper(camera, 0x393e46);
|
||||
|
||||
const labelDiv = document.createElement( 'div' );
|
||||
labelDiv.className = 'label';
|
||||
labelDiv.textContent = i;
|
||||
labelDiv.style.color = "black";
|
||||
const camera_label = new CSS2DObject( labelDiv );
|
||||
camera_label.position.set( 0, -0.1, -0.1 );
|
||||
camera_helper.add( camera_label );
|
||||
camera_label.layers.set( 0 );
|
||||
|
||||
// camera
|
||||
sceneTree.set_object_from_path(
|
||||
['Camera Path', 'Cameras', i.toString(), 'Camera'],
|
||||
|
||||
@ -104,6 +104,7 @@ export default function ViewerWindow(props) {
|
||||
const sceneTree = props.sceneTree;
|
||||
const scene = sceneTree.object;
|
||||
const renderer = sceneTree.metadata.renderer;
|
||||
const labelRenderer = sceneTree.metadata.labelRenderer;
|
||||
|
||||
const myRef = useRef(null);
|
||||
const websocket = useContext(WebSocketContext).socket;
|
||||
@ -145,6 +146,7 @@ export default function ViewerWindow(props) {
|
||||
sceneTree.metadata.camera.aspect = viewportWidth / viewportHeight;
|
||||
sceneTree.metadata.camera.updateProjectionMatrix();
|
||||
renderer.setSize(viewportWidth, viewportHeight);
|
||||
labelRenderer.setSize(viewportWidth, viewportHeight);
|
||||
};
|
||||
|
||||
// update the camera information in the python server
|
||||
@ -202,6 +204,7 @@ export default function ViewerWindow(props) {
|
||||
sceneTree.metadata.camera.updateProjectionMatrix();
|
||||
sceneTree.metadata.camera_controls.update();
|
||||
renderer.render(scene, sceneTree.metadata.camera);
|
||||
labelRenderer.render(scene, sceneTree.metadata.camera);
|
||||
stats.update();
|
||||
};
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user