Sidebar.Project.js 3.8 KB
Newer Older
M
Mr.doob 已提交
1 2 3 4
/**
 * @author mrdoob / http://mrdoob.com/
 */

5
Sidebar.Project = function ( editor ) {
6

M
Mr.doob 已提交
7
	var config = editor.config;
8
	var signals = editor.signals;
M
Mr.doob 已提交
9

M
Mr.doob 已提交
10
	var rendererTypes = {
M
Mr.doob 已提交
11

12
		'WebGLRenderer': THREE.WebGLRenderer,
M
Mr.doob 已提交
13
		'CanvasRenderer': THREE.CanvasRenderer,
M
Mr.doob 已提交
14
		'SVGRenderer': THREE.SVGRenderer,
M
Mr.doob 已提交
15
		'SoftwareRenderer': THREE.SoftwareRenderer,
M
Mr.doob 已提交
16
		'RaytracingRenderer': THREE.RaytracingRenderer
M
Mr.doob 已提交
17 18 19

	};

M
Mr.doob 已提交
20 21
	var container = new UI.Panel();
	container.setBorderTop( '0' );
M
Mr.doob 已提交
22
	container.setPaddingTop( '20px' );
M
Mr.doob 已提交
23

M
Mr.doob 已提交
24 25
	// class

26 27
	var options = {};

M
Mr.doob 已提交
28
	for ( var key in rendererTypes ) {
M
Mr.doob 已提交
29

30
		if ( key.indexOf( 'WebGL' ) >= 0 && System.support.webgl === false ) continue;
M
Mr.doob 已提交
31

32 33 34 35
		options[ key ] = key;

	}

M
Mr.doob 已提交
36
	var rendererTypeRow = new UI.Row();
M
Mr.doob 已提交
37
	var rendererType = new UI.Select().setOptions( options ).setWidth( '150px' ).onChange( function () {
M
Mr.doob 已提交
38

M
Mr.doob 已提交
39 40 41
		var value = this.getValue();

		config.setKey( 'project/renderer', value );
M
Mr.doob 已提交
42

M
Mr.doob 已提交
43 44 45
		updateRenderer();

	} );
M
Mr.doob 已提交
46

47
	rendererTypeRow.add( new UI.Text( 'Renderer' ).setWidth( '90px' ) );
M
Mr.doob 已提交
48
	rendererTypeRow.add( rendererType );
M
Mr.doob 已提交
49

M
Mr.doob 已提交
50
	container.add( rendererTypeRow );
M
Mr.doob 已提交
51

M
Mr.doob 已提交
52
	if ( config.getKey( 'project/renderer' ) !== undefined ) {
M
Mr.doob 已提交
53

M
Mr.doob 已提交
54
		rendererType.setValue( config.getKey( 'project/renderer' ) );
M
Mr.doob 已提交
55 56

	}
57

M
Mr.doob 已提交
58 59
	// antialiasing

M
Mr.doob 已提交
60
	var rendererPropertiesRow = new UI.Row().setMarginLeft( '90px' );
M
Mr.doob 已提交
61

M
Mr.doob 已提交
62
	var rendererAntialias = new UI.THREE.Boolean( config.getKey( 'project/renderer/antialias' ), 'antialias' ).onChange( function () {
M
Mr.doob 已提交
63

M
Mr.doob 已提交
64
		config.setKey( 'project/renderer/antialias', this.getValue() );
65
		updateRenderer();
M
Mr.doob 已提交
66 67

	} );
M
Mr.doob 已提交
68
	rendererPropertiesRow.add( rendererAntialias );
M
Mr.doob 已提交
69

M
Mr.doob 已提交
70 71
	// shadow

M
Mr.doob 已提交
72
	var rendererShadows = new UI.THREE.Boolean( config.getKey( 'project/renderer/shadows' ), 'shadows' ).onChange( function () {
M
Mr.doob 已提交
73

M
Mr.doob 已提交
74
		config.setKey( 'project/renderer/shadows', this.getValue() );
M
Mr.doob 已提交
75 76 77
		updateRenderer();

	} );
M
Mr.doob 已提交
78
	rendererPropertiesRow.add( rendererShadows );
M
Mr.doob 已提交
79

M
Mr.doob 已提交
80
	rendererPropertiesRow.add( new UI.Break() );
M
Mr.doob 已提交
81

M
Mr.doob 已提交
82 83 84
	// gamma input

	var rendererGammaInput = new UI.THREE.Boolean( config.getKey( 'project/renderer/gammaInput' ), 'γ input' ).onChange( function () {
T
thmasn 已提交
85 86 87 88 89 90

		config.setKey( 'project/renderer/gammaInput', this.getValue() );
		updateRenderer();

	} );
	rendererPropertiesRow.add( rendererGammaInput );
M
Mr.doob 已提交
91 92 93 94

	// gamma output

	var rendererGammaOutput = new UI.THREE.Boolean( config.getKey( 'project/renderer/gammaOutput' ), 'γ output' ).onChange( function () {
T
thmasn 已提交
95 96 97 98 99 100

		config.setKey( 'project/renderer/gammaOutput', this.getValue() );
		updateRenderer();

	} );
	rendererPropertiesRow.add( rendererGammaOutput );
M
Mr.doob 已提交
101 102 103

	container.add( rendererPropertiesRow );

M
Mr.doob 已提交
104 105
	// VR

M
Mr.doob 已提交
106
	var vrRow = new UI.Row();
M
Mr.doob 已提交
107
	var vr = new UI.Checkbox( config.getKey( 'project/vr' ) ).setLeft( '100px' ).onChange( function () {
M
Mr.doob 已提交
108

M
Mr.doob 已提交
109
		config.setKey( 'project/vr', this.getValue() );
M
Mr.doob 已提交
110 111 112 113 114 115 116 117 118
		// updateRenderer();

	} );

	vrRow.add( new UI.Text( 'VR' ).setWidth( '90px' ) );
	vrRow.add( vr );

	container.add( vrRow );

M
Mr.doob 已提交
119 120 121 122
	//

	function updateRenderer() {

T
thmasn 已提交
123
		createRenderer( rendererType.getValue(), rendererAntialias.getValue(), rendererShadows.getValue(), rendererGammaInput.getValue(), rendererGammaOutput.getValue() );
M
Mr.doob 已提交
124 125 126

	}

T
thmasn 已提交
127
	function createRenderer( type, antialias, shadows, gammaIn, gammaOut ) {
128 129 130 131 132 133 134

		if ( type === 'WebGLRenderer' && System.support.webgl === false ) {

			type = 'CanvasRenderer';

		}

M
Mr.doob 已提交
135 136
		rendererPropertiesRow.setDisplay( type === 'WebGLRenderer' ? '' : 'none' );

T
thmasn 已提交
137 138 139
		var renderer = new rendererTypes[ type ]( { antialias: antialias} );
		renderer.gammaInput = gammaIn;
		renderer.gammaOutput = gammaOut;
M
Mr.doob 已提交
140 141 142 143 144 145 146
		if ( shadows && renderer.shadowMap ) {

			renderer.shadowMap.enabled = true;
			// renderer.shadowMap.type = THREE.PCFSoftShadowMap;

		}

147 148 149 150
		signals.rendererChanged.dispatch( renderer );

	}

T
thmasn 已提交
151
	createRenderer( config.getKey( 'project/renderer' ), config.getKey( 'project/renderer/antialias' ), config.getKey( 'project/renderer/shadows' ), config.getKey( 'project/renderer/gammaInput' ), config.getKey( 'project/renderer/gammaOutput' ) );
152

M
Mr.doob 已提交
153 154
	return container;

M
Mr.doob 已提交
155
};