2
0
Эх сурвалжийг харах

Editor: Added shadow support.

Mr.doob 9 жил өмнө
parent
commit
12c8d0d016

+ 45 - 1
editor/js/Sidebar.Object3D.js

@@ -245,6 +245,24 @@ Sidebar.Object3D = function ( editor ) {
 
 	container.add( objectDecayRow );
 
+	// shadow
+
+	var objectCastShadowRow = new UI.Panel();
+	var objectCastShadow = new UI.Checkbox().onChange( update );
+
+	objectCastShadowRow.add( new UI.Text( 'Cast Shadow' ).setWidth( '90px' ) );
+	objectCastShadowRow.add( objectCastShadow );
+
+	container.add( objectCastShadowRow );
+
+	var objectReceiveShadowRow = new UI.Panel();
+	var objectReceiveShadow = new UI.Checkbox().onChange( update );
+
+	objectReceiveShadowRow.add( new UI.Text( 'Receive Shad' ).setWidth( '90px' ) );
+	objectReceiveShadowRow.add( objectReceiveShadow );
+
+	container.add( objectReceiveShadowRow );
+
 	// visible
 
 	var objectVisibleRow = new UI.Panel();
@@ -431,6 +449,18 @@ Sidebar.Object3D = function ( editor ) {
 
 			}
 
+			if ( object.castShadow !== undefined ) {
+
+				object.castShadow = objectCastShadow.getValue();
+
+			}
+
+			if ( object.receiveShadow !== undefined ) {
+
+				object.receiveShadow = objectReceiveShadow.getValue();
+
+			}
+
 			object.visible = objectVisible.getValue();
 
 			try {
@@ -462,7 +492,9 @@ Sidebar.Object3D = function ( editor ) {
 			'distance' : objectDistanceRow,
 			'angle' : objectAngleRow,
 			'exponent' : objectExponentRow,
-			'decay' : objectDecayRow
+			'decay' : objectDecayRow,
+			'castShadow' : objectCastShadowRow,
+			'receiveShadow' : objectReceiveShadowRow
 		};
 
 		for ( var property in properties ) {
@@ -621,6 +653,18 @@ Sidebar.Object3D = function ( editor ) {
 
 		}
 
+		if ( object.castShadow !== undefined ) {
+
+			objectCastShadow.setValue( object.castShadow );
+
+		}
+
+		if ( object.receiveShadow !== undefined ) {
+
+			objectReceiveShadow.setValue( object.receiveShadow );
+
+		}
+
 		objectVisible.setValue( object.visible );
 
 		try {

+ 19 - 3
editor/js/Sidebar.Project.js

@@ -73,6 +73,21 @@ Sidebar.Project = function ( editor ) {
 
 	container.add( rendererAntialiasRow );
 
+	// shadow
+
+	var rendererShadowsRow = new UI.Panel();
+	var rendererShadows = new UI.Checkbox( editor.config.getKey( 'project/renderer/shadows' ) ).setLeft( '100px' ).onChange( function () {
+
+		editor.config.setKey( 'project/renderer/shadows', this.getValue() );
+		updateRenderer();
+
+	} );
+
+	rendererShadowsRow.add( new UI.Text( 'Shadows' ).setWidth( '90px' ) );
+	rendererShadowsRow.add( rendererShadows );
+
+	container.add( rendererShadowsRow );
+
 	// VR
 
 	var vrRow = new UI.Panel();
@@ -92,11 +107,11 @@ Sidebar.Project = function ( editor ) {
 
 	function updateRenderer() {
 
-		createRenderer( rendererType.getValue(), rendererAntialias.getValue() );
+		createRenderer( rendererType.getValue(), rendererAntialias.getValue(), rendererShadows.getValue() );
 
 	}
 
-	function createRenderer( type, antialias ) {
+	function createRenderer( type, antialias, shadows ) {
 
 		if ( type === 'WebGLRenderer' && System.support.webgl === false ) {
 
@@ -105,11 +120,12 @@ Sidebar.Project = function ( editor ) {
 		}
 
 		var renderer = new rendererTypes[ type ]( { antialias: antialias } );
+		if ( shadows && renderer.shadowMap ) renderer.shadowMap.enabled = true;
 		signals.rendererChanged.dispatch( renderer );
 
 	}
 
-	createRenderer( editor.config.getKey( 'project/renderer' ), editor.config.getKey( 'project/renderer/antialias' ) );
+	createRenderer( editor.config.getKey( 'project/renderer' ), editor.config.getKey( 'project/renderer/antialias' ), editor.config.getKey( 'project/renderer/shadows' ) );
 
 	return container;