|
@@ -5,6 +5,7 @@
|
|
|
var Viewport = function ( editor ) {
|
|
|
|
|
|
var signals = editor.signals;
|
|
|
+ var config = editor.config;
|
|
|
|
|
|
var container = new UI.Panel();
|
|
|
container.setId( 'viewport' );
|
|
@@ -134,6 +135,76 @@ var Viewport = function ( editor ) {
|
|
|
|
|
|
sceneHelpers.add( transformControls );
|
|
|
|
|
|
+ // Displaying scene cameras
|
|
|
+
|
|
|
+ var cameras = {
|
|
|
+ [ camera.uuid ]: 'Main Camera'
|
|
|
+ };
|
|
|
+
|
|
|
+ var sceneCameraDisplay = new UI.Row();
|
|
|
+ sceneCameraDisplay.setId( 'cameraSelect' ).setDisplay( 'none' );
|
|
|
+ document.body.appendChild( sceneCameraDisplay.dom );
|
|
|
+
|
|
|
+ var cameraSelect = new UI.Select().onChange( render );
|
|
|
+ sceneCameraDisplay.add( cameraSelect );
|
|
|
+
|
|
|
+ signals.objectAdded.add( function ( object ) {
|
|
|
+
|
|
|
+ if ( object !== null ) {
|
|
|
+
|
|
|
+ object.traverse( addCamera );
|
|
|
+ cameraSelect.setOptions( cameras ).setValue( camera.uuid );
|
|
|
+ sceneCameraDisplay.setDisplay( config.getKey( 'project/renderer/showSceneCameras' ) === true && Object.keys( cameras ).length > 0 ? 'block' : 'none' );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ } );
|
|
|
+
|
|
|
+ signals.objectRemoved.add( function ( object ) {
|
|
|
+
|
|
|
+ if ( object !== null ) {
|
|
|
+
|
|
|
+ object.traverse( removeCamera );
|
|
|
+ cameraSelect.setOptions( cameras ).setValue( camera.uuid );
|
|
|
+ sceneCameraDisplay.setDisplay( config.getKey( 'project/renderer/showSceneCameras' ) === true && Object.keys( cameras ).length > 0 ? 'block' : 'none' );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ } );
|
|
|
+
|
|
|
+ signals.sceneCamerasChanged.add( function () {
|
|
|
+
|
|
|
+ var optionSelected = config.getKey( 'project/renderer/showSceneCameras' ) === true;
|
|
|
+ sceneCameraDisplay.setDisplay( optionSelected && Object.keys( cameras ).length > 0 ? 'block' : 'none' );
|
|
|
+ if ( optionSelected === false ) {
|
|
|
+
|
|
|
+ cameraSelect.setValue( camera.uuid );
|
|
|
+ render();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ } );
|
|
|
+
|
|
|
+ function addCamera( object ) {
|
|
|
+
|
|
|
+ if ( object.isCamera === true ) {
|
|
|
+
|
|
|
+ cameras[ object.uuid ] = object.name;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ function removeCamera( object ) {
|
|
|
+
|
|
|
+ if ( object.isCamera === true ) {
|
|
|
+
|
|
|
+ delete cameras[ object.uuid ];
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
// object picking
|
|
|
|
|
|
var raycaster = new THREE.Raycaster();
|
|
@@ -554,11 +625,25 @@ var Viewport = function ( editor ) {
|
|
|
sceneHelpers.updateMatrixWorld();
|
|
|
scene.updateMatrixWorld();
|
|
|
|
|
|
- renderer.render( scene, camera );
|
|
|
+ var cam = camera;
|
|
|
+ var uuid = cameraSelect.getValue();
|
|
|
+
|
|
|
+ if ( uuid !== camera.uuid && sceneCameraDisplay.dom.style.display != 'none' ) {
|
|
|
+
|
|
|
+ var sceneCamera = scene.getObjectByProperty( 'uuid', uuid );
|
|
|
+ if ( sceneCamera !== undefined && sceneCamera.isCamera === true ) {
|
|
|
+
|
|
|
+ cam = sceneCamera;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ renderer.render( scene, cam );
|
|
|
|
|
|
- if ( renderer instanceof THREE.RaytracingRenderer === false ) {
|
|
|
+ if ( config.getKey( 'project/renderer/showHelpers' ) === true && renderer instanceof THREE.RaytracingRenderer === false ) {
|
|
|
|
|
|
- renderer.render( sceneHelpers, camera );
|
|
|
+ renderer.render( sceneHelpers, cam );
|
|
|
|
|
|
}
|
|
|
|