|
@@ -37,6 +37,7 @@
|
|
|
<script src="js/controls/FirstPersonControls.js"></script>
|
|
|
|
|
|
<script src="js/shaders/UnpackDepthRGBAShader.js"></script>
|
|
|
+ <script src="js/utils/ShadowMapViewer.js"></script>
|
|
|
|
|
|
<script src="js/Detector.js"></script>
|
|
|
<script src="js/libs/stats.min.js"></script>
|
|
@@ -51,18 +52,17 @@
|
|
|
|
|
|
var SCREEN_WIDTH = window.innerWidth;
|
|
|
var SCREEN_HEIGHT = window.innerHeight;
|
|
|
- var FLOOR = -250;
|
|
|
+ var FLOOR = - 250;
|
|
|
|
|
|
var camera, controls, scene, renderer;
|
|
|
var container, stats;
|
|
|
|
|
|
var NEAR = 10, FAR = 3000;
|
|
|
|
|
|
- var sceneHUD, cameraOrtho, hudMesh;
|
|
|
-
|
|
|
var mixer, morphs = [];
|
|
|
|
|
|
var light;
|
|
|
+ var lightShadowMapViewer;
|
|
|
|
|
|
var clock = new THREE.Clock();
|
|
|
|
|
@@ -167,25 +167,17 @@
|
|
|
|
|
|
renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
|
|
|
|
|
|
- var aspect = SCREEN_WIDTH / SCREEN_HEIGHT;
|
|
|
- cameraOrtho.left = - aspect;
|
|
|
- cameraOrtho.right = aspect;
|
|
|
- cameraOrtho.top = 1;
|
|
|
- cameraOrtho.bottom = - 1;
|
|
|
- cameraOrtho.updateProjectionMatrix();
|
|
|
-
|
|
|
- hudMesh.position.x = cameraOrtho.left + HUD_MARGIN;
|
|
|
- hudMesh.position.y = cameraOrtho.bottom + HUD_MARGIN;
|
|
|
-
|
|
|
controls.handleResize();
|
|
|
|
|
|
}
|
|
|
|
|
|
function onKeyDown ( event ) {
|
|
|
|
|
|
- switch( event.keyCode ) {
|
|
|
+ switch ( event.keyCode ) {
|
|
|
|
|
|
- case 84: /*t*/ showHUD = !showHUD; break;
|
|
|
+ case 84: /*t*/
|
|
|
+ showHUD = ! showHUD;
|
|
|
+ break;
|
|
|
|
|
|
}
|
|
|
|
|
@@ -193,38 +185,12 @@
|
|
|
|
|
|
function createHUD() {
|
|
|
|
|
|
- var aspect = SCREEN_WIDTH / SCREEN_HEIGHT;
|
|
|
-
|
|
|
- cameraOrtho = new THREE.OrthographicCamera( - aspect, aspect, 1, - 1, 1, 10 );
|
|
|
- cameraOrtho.position.z = 5;
|
|
|
-
|
|
|
- var shader = THREE.UnpackDepthRGBAShader;
|
|
|
- var uniforms = new THREE.UniformsUtils.clone( shader.uniforms );
|
|
|
-
|
|
|
- uniforms.tDiffuse.value = light.shadowMap;
|
|
|
-
|
|
|
- var hudMaterial = new THREE.ShaderMaterial( {
|
|
|
- uniforms: uniforms,
|
|
|
- vertexShader: shader.vertexShader,
|
|
|
- fragmentShader: shader.fragmentShader
|
|
|
- } );
|
|
|
-
|
|
|
- var hudHeight = 2 / 3;
|
|
|
-
|
|
|
- var hudWidth = hudHeight * SHADOW_MAP_WIDTH / SHADOW_MAP_HEIGHT;
|
|
|
-
|
|
|
- var hudGeo = new THREE.PlaneBufferGeometry( hudWidth, hudHeight );
|
|
|
- hudGeo.translate( hudWidth / 2, hudHeight / 2, 0 );
|
|
|
-
|
|
|
- hudMesh = new THREE.Mesh( hudGeo, hudMaterial );
|
|
|
-
|
|
|
- hudMesh.position.x = cameraOrtho.left + HUD_MARGIN;
|
|
|
- hudMesh.position.y = cameraOrtho.bottom + HUD_MARGIN;
|
|
|
-
|
|
|
- sceneHUD = new THREE.Scene();
|
|
|
- sceneHUD.add( hudMesh );
|
|
|
-
|
|
|
- cameraOrtho.lookAt( sceneHUD.position );
|
|
|
+ lightShadowMapViewer = new THREE.ShadowMapViewer( light );
|
|
|
+ lightShadowMapViewer.position.x = 10;
|
|
|
+ lightShadowMapViewer.position.y = SCREEN_HEIGHT - ( SHADOW_MAP_HEIGHT / 4 ) - 10;
|
|
|
+ lightShadowMapViewer.size.width = SHADOW_MAP_WIDTH / 4;
|
|
|
+ lightShadowMapViewer.size.height = SHADOW_MAP_HEIGHT / 4;
|
|
|
+ lightShadowMapViewer.update();
|
|
|
|
|
|
}
|
|
|
|
|
@@ -263,10 +229,10 @@
|
|
|
bevelSize: 5,
|
|
|
bevelEnabled: true
|
|
|
|
|
|
- });
|
|
|
+ } );
|
|
|
|
|
|
textGeo.computeBoundingBox();
|
|
|
- var centerOffset = -0.5 * ( textGeo.boundingBox.max.x - textGeo.boundingBox.min.x );
|
|
|
+ var centerOffset = - 0.5 * ( textGeo.boundingBox.max.x - textGeo.boundingBox.min.x );
|
|
|
|
|
|
var textMaterial = new THREE.MeshPhongMaterial( { color: 0xff0000, specular: 0xffffff } );
|
|
|
|
|
@@ -329,7 +295,7 @@
|
|
|
play();
|
|
|
|
|
|
mesh.position.set( x, y, z );
|
|
|
- mesh.rotation.y = Math.PI/2;
|
|
|
+ mesh.rotation.y = Math.PI / 2;
|
|
|
|
|
|
mesh.castShadow = true;
|
|
|
mesh.receiveShadow = true;
|
|
@@ -348,9 +314,9 @@
|
|
|
addMorph( geometry, 550, 1, 100 - Math.random() * 1000, FLOOR, 450, true );
|
|
|
addMorph( geometry, 550, 1, 100 - Math.random() * 1000, FLOOR, 600, true );
|
|
|
|
|
|
- addMorph( geometry, 550, 1, 100 - Math.random() * 1000, FLOOR, -300, true );
|
|
|
- addMorph( geometry, 550, 1, 100 - Math.random() * 1000, FLOOR, -450, true );
|
|
|
- addMorph( geometry, 550, 1, 100 - Math.random() * 1000, FLOOR, -600, true );
|
|
|
+ addMorph( geometry, 550, 1, 100 - Math.random() * 1000, FLOOR, - 300, true );
|
|
|
+ addMorph( geometry, 550, 1, 100 - Math.random() * 1000, FLOOR, - 450, true );
|
|
|
+ addMorph( geometry, 550, 1, 100 - Math.random() * 1000, FLOOR, - 600, true );
|
|
|
|
|
|
} );
|
|
|
|
|
@@ -397,7 +363,7 @@
|
|
|
|
|
|
if ( morph.position.x > 2000 ) {
|
|
|
|
|
|
- morph.position.x = -1000 - Math.random() * 500;
|
|
|
+ morph.position.x = - 1000 - Math.random() * 500;
|
|
|
|
|
|
}
|
|
|
|
|
@@ -412,8 +378,7 @@
|
|
|
|
|
|
if ( showHUD ) {
|
|
|
|
|
|
- renderer.clearDepth();
|
|
|
- renderer.render( sceneHUD, cameraOrtho );
|
|
|
+ lightShadowMapViewer.render( renderer );
|
|
|
|
|
|
}
|
|
|
|