|
37 | 37 | <script src="js/controls/FirstPersonControls.js"></script>
|
38 | 38 |
|
39 | 39 | <script src="js/shaders/UnpackDepthRGBAShader.js"></script>
|
| 40 | + <script src="js/utils/ShadowMapViewer.js"></script> |
40 | 41 |
|
41 | 42 | <script src="js/Detector.js"></script>
|
42 | 43 | <script src="js/libs/stats.min.js"></script>
|
|
51 | 52 |
|
52 | 53 | var SCREEN_WIDTH = window.innerWidth;
|
53 | 54 | var SCREEN_HEIGHT = window.innerHeight;
|
54 |
| - var FLOOR = -250; |
| 55 | + var FLOOR = - 250; |
55 | 56 |
|
56 | 57 | var camera, controls, scene, renderer;
|
57 | 58 | var container, stats;
|
58 | 59 |
|
59 | 60 | var NEAR = 10, FAR = 3000;
|
60 | 61 |
|
61 |
| - var sceneHUD, cameraOrtho, hudMesh; |
62 |
| - |
63 | 62 | var mixer, morphs = [];
|
64 | 63 |
|
65 | 64 | var light;
|
| 65 | + var lightShadowMapViewer; |
66 | 66 |
|
67 | 67 | var clock = new THREE.Clock();
|
68 | 68 |
|
|
167 | 167 |
|
168 | 168 | renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
|
169 | 169 |
|
170 |
| - var aspect = SCREEN_WIDTH / SCREEN_HEIGHT; |
171 |
| - cameraOrtho.left = - aspect; |
172 |
| - cameraOrtho.right = aspect; |
173 |
| - cameraOrtho.top = 1; |
174 |
| - cameraOrtho.bottom = - 1; |
175 |
| - cameraOrtho.updateProjectionMatrix(); |
176 |
| - |
177 |
| - hudMesh.position.x = cameraOrtho.left + HUD_MARGIN; |
178 |
| - hudMesh.position.y = cameraOrtho.bottom + HUD_MARGIN; |
179 |
| - |
180 | 170 | controls.handleResize();
|
181 | 171 |
|
182 | 172 | }
|
183 | 173 |
|
184 | 174 | function onKeyDown ( event ) {
|
185 | 175 |
|
186 |
| - switch( event.keyCode ) { |
| 176 | + switch ( event.keyCode ) { |
187 | 177 |
|
188 |
| - case 84: /*t*/ showHUD = !showHUD; break; |
| 178 | + case 84: /*t*/ |
| 179 | + showHUD = ! showHUD; |
| 180 | + break; |
189 | 181 |
|
190 | 182 | }
|
191 | 183 |
|
192 | 184 | }
|
193 | 185 |
|
194 | 186 | function createHUD() {
|
195 | 187 |
|
196 |
| - var aspect = SCREEN_WIDTH / SCREEN_HEIGHT; |
197 |
| - |
198 |
| - cameraOrtho = new THREE.OrthographicCamera( - aspect, aspect, 1, - 1, 1, 10 ); |
199 |
| - cameraOrtho.position.z = 5; |
200 |
| - |
201 |
| - var shader = THREE.UnpackDepthRGBAShader; |
202 |
| - var uniforms = new THREE.UniformsUtils.clone( shader.uniforms ); |
203 |
| - |
204 |
| - uniforms.tDiffuse.value = light.shadowMap; |
205 |
| - |
206 |
| - var hudMaterial = new THREE.ShaderMaterial( { |
207 |
| - uniforms: uniforms, |
208 |
| - vertexShader: shader.vertexShader, |
209 |
| - fragmentShader: shader.fragmentShader |
210 |
| - } ); |
211 |
| - |
212 |
| - var hudHeight = 2 / 3; |
213 |
| - |
214 |
| - var hudWidth = hudHeight * SHADOW_MAP_WIDTH / SHADOW_MAP_HEIGHT; |
215 |
| - |
216 |
| - var hudGeo = new THREE.PlaneBufferGeometry( hudWidth, hudHeight ); |
217 |
| - hudGeo.translate( hudWidth / 2, hudHeight / 2, 0 ); |
218 |
| - |
219 |
| - hudMesh = new THREE.Mesh( hudGeo, hudMaterial ); |
220 |
| - |
221 |
| - hudMesh.position.x = cameraOrtho.left + HUD_MARGIN; |
222 |
| - hudMesh.position.y = cameraOrtho.bottom + HUD_MARGIN; |
223 |
| - |
224 |
| - sceneHUD = new THREE.Scene(); |
225 |
| - sceneHUD.add( hudMesh ); |
226 |
| - |
227 |
| - cameraOrtho.lookAt( sceneHUD.position ); |
| 188 | + lightShadowMapViewer = new THREE.ShadowMapViewer( light ); |
| 189 | + lightShadowMapViewer.position.x = 10; |
| 190 | + lightShadowMapViewer.position.y = SCREEN_HEIGHT - ( SHADOW_MAP_HEIGHT / 4 ) - 10; |
| 191 | + lightShadowMapViewer.size.width = SHADOW_MAP_WIDTH / 4; |
| 192 | + lightShadowMapViewer.size.height = SHADOW_MAP_HEIGHT / 4; |
| 193 | + lightShadowMapViewer.update(); |
228 | 194 |
|
229 | 195 | }
|
230 | 196 |
|
|
263 | 229 | bevelSize: 5,
|
264 | 230 | bevelEnabled: true
|
265 | 231 |
|
266 |
| - }); |
| 232 | + } ); |
267 | 233 |
|
268 | 234 | textGeo.computeBoundingBox();
|
269 |
| - var centerOffset = -0.5 * ( textGeo.boundingBox.max.x - textGeo.boundingBox.min.x ); |
| 235 | + var centerOffset = - 0.5 * ( textGeo.boundingBox.max.x - textGeo.boundingBox.min.x ); |
270 | 236 |
|
271 | 237 | var textMaterial = new THREE.MeshPhongMaterial( { color: 0xff0000, specular: 0xffffff } );
|
272 | 238 |
|
|
329 | 295 | play();
|
330 | 296 |
|
331 | 297 | mesh.position.set( x, y, z );
|
332 |
| - mesh.rotation.y = Math.PI/2; |
| 298 | + mesh.rotation.y = Math.PI / 2; |
333 | 299 |
|
334 | 300 | mesh.castShadow = true;
|
335 | 301 | mesh.receiveShadow = true;
|
|
348 | 314 | addMorph( geometry, 550, 1, 100 - Math.random() * 1000, FLOOR, 450, true );
|
349 | 315 | addMorph( geometry, 550, 1, 100 - Math.random() * 1000, FLOOR, 600, true );
|
350 | 316 |
|
351 |
| - addMorph( geometry, 550, 1, 100 - Math.random() * 1000, FLOOR, -300, true ); |
352 |
| - addMorph( geometry, 550, 1, 100 - Math.random() * 1000, FLOOR, -450, true ); |
353 |
| - addMorph( geometry, 550, 1, 100 - Math.random() * 1000, FLOOR, -600, true ); |
| 317 | + addMorph( geometry, 550, 1, 100 - Math.random() * 1000, FLOOR, - 300, true ); |
| 318 | + addMorph( geometry, 550, 1, 100 - Math.random() * 1000, FLOOR, - 450, true ); |
| 319 | + addMorph( geometry, 550, 1, 100 - Math.random() * 1000, FLOOR, - 600, true ); |
354 | 320 |
|
355 | 321 | } );
|
356 | 322 |
|
|
397 | 363 |
|
398 | 364 | if ( morph.position.x > 2000 ) {
|
399 | 365 |
|
400 |
| - morph.position.x = -1000 - Math.random() * 500; |
| 366 | + morph.position.x = - 1000 - Math.random() * 500; |
401 | 367 |
|
402 | 368 | }
|
403 | 369 |
|
|
412 | 378 |
|
413 | 379 | if ( showHUD ) {
|
414 | 380 |
|
415 |
| - renderer.clearDepth(); |
416 |
| - renderer.render( sceneHUD, cameraOrtho ); |
| 381 | + lightShadowMapViewer.render( renderer ); |
417 | 382 |
|
418 | 383 | }
|
419 | 384 |
|
|
0 commit comments