|
@@ -50,12 +50,15 @@
|
|
|
|
|
|
<script>
|
|
|
|
|
|
- var camera, scene, renderer, composer, copyPass, msaaRenderPass;
|
|
|
+ var scene, renderer;
|
|
|
+ var cameraP, composerP, copyPassP, msaaRenderPassP;
|
|
|
+ var cameraO, composerO, copyPassO, msaaRenderPassO;
|
|
|
var gui, stats, texture;
|
|
|
|
|
|
var param = {
|
|
|
sampleLevel: 4,
|
|
|
- unbiased: true
|
|
|
+ unbiased: true,
|
|
|
+ camera: 'perspective'
|
|
|
};
|
|
|
|
|
|
init();
|
|
@@ -78,6 +81,7 @@
|
|
|
'Level 4: 16 Samples': 4,
|
|
|
'Level 5: 32 Samples': 5
|
|
|
} );
|
|
|
+ gui.add( param, 'camera', [ 'perspective', 'ortho' ] );
|
|
|
|
|
|
gui.open();
|
|
|
|
|
@@ -89,6 +93,7 @@
|
|
|
|
|
|
var width = window.innerWidth || 1;
|
|
|
var height = window.innerHeight || 1;
|
|
|
+ var aspect = width / height;
|
|
|
var devicePixelRatio = window.devicePixelRatio || 1;
|
|
|
|
|
|
renderer = new THREE.WebGLRenderer( { antialias: false } );
|
|
@@ -101,8 +106,17 @@
|
|
|
|
|
|
//
|
|
|
|
|
|
- camera = new THREE.PerspectiveCamera( 65, width / height, 3, 10 );
|
|
|
- camera.position.z = 7;
|
|
|
+ cameraP = new THREE.PerspectiveCamera( 65, aspect, 3, 10 );
|
|
|
+ cameraP.position.z = 7;
|
|
|
+
|
|
|
+ cameraO = new THREE.OrthographicCamera( width / - 2, width / 2, height / 2, height / - 2, 3, 10 );
|
|
|
+ cameraO.position.z = 7;
|
|
|
+
|
|
|
+ var fov = THREE.Math.degToRad( cameraP.fov );
|
|
|
+ var hyperfocus = ( cameraP.near + cameraP.far ) / 2;
|
|
|
+ var _height = 2 * Math.tan( fov / 2 ) * hyperfocus;
|
|
|
+ cameraO.zoom = height / _height;
|
|
|
+
|
|
|
|
|
|
scene = new THREE.Scene();
|
|
|
|
|
@@ -152,14 +166,19 @@
|
|
|
|
|
|
// postprocessing
|
|
|
|
|
|
- composer = new THREE.EffectComposer( renderer );
|
|
|
-
|
|
|
- msaaRenderPass = new THREE.ManualMSAARenderPass( scene, camera );
|
|
|
- composer.addPass( msaaRenderPass );
|
|
|
+ composerP = new THREE.EffectComposer( renderer );
|
|
|
+ msaaRenderPassP = new THREE.ManualMSAARenderPass( scene, cameraP );
|
|
|
+ composerP.addPass( msaaRenderPassP );
|
|
|
+ copyPassP = new THREE.ShaderPass( THREE.CopyShader );
|
|
|
+ copyPassP.renderToScreen = true;
|
|
|
+ composerP.addPass( copyPassP );
|
|
|
|
|
|
- copyPass = new THREE.ShaderPass( THREE.CopyShader );
|
|
|
- copyPass.renderToScreen = true;
|
|
|
- composer.addPass( copyPass );
|
|
|
+ composerO = new THREE.EffectComposer( renderer );
|
|
|
+ msaaRenderPassO = new THREE.ManualMSAARenderPass( scene, cameraO );
|
|
|
+ composerO.addPass( msaaRenderPassO );
|
|
|
+ copyPassO = new THREE.ShaderPass( THREE.CopyShader );
|
|
|
+ copyPassO.renderToScreen = true;
|
|
|
+ composerO.addPass( copyPassO );
|
|
|
|
|
|
window.addEventListener( 'resize', onWindowResize, false );
|
|
|
|
|
@@ -169,9 +188,16 @@
|
|
|
|
|
|
var width = window.innerWidth;
|
|
|
var height = window.innerHeight;
|
|
|
+ var aspect = width / height;
|
|
|
|
|
|
- camera.aspect = width / height;
|
|
|
- camera.updateProjectionMatrix();
|
|
|
+ cameraP.aspect = aspect;
|
|
|
+ cameraO.updateProjectionMatrix();
|
|
|
+
|
|
|
+ cameraO.left = - height * aspect;
|
|
|
+ cameraO.right = height * aspect;
|
|
|
+ cameraO.top = height;
|
|
|
+ cameraO.bottom = - height;
|
|
|
+ cameraO.updateProjectionMatrix();
|
|
|
|
|
|
renderer.setSize( width, height );
|
|
|
|
|
@@ -197,10 +223,18 @@
|
|
|
|
|
|
}
|
|
|
|
|
|
- msaaRenderPass.sampleLevel = param.sampleLevel;
|
|
|
- msaaRenderPass.unbiased = param.unbiased;
|
|
|
+ msaaRenderPassP.sampleLevel = param.sampleLevel;
|
|
|
+ msaaRenderPassP.unbiased = param.unbiased;
|
|
|
+
|
|
|
+ msaaRenderPassO.sampleLevel = param.sampleLevel;
|
|
|
+ msaaRenderPassO.unbiased = param.unbiased;
|
|
|
+
|
|
|
+ if( param.camera === 'perspective' ){
|
|
|
+ composerP.render();
|
|
|
+ }else{
|
|
|
+ composerO.render();
|
|
|
+ }
|
|
|
|
|
|
- composer.render();
|
|
|
stats.end();
|
|
|
|
|
|
}
|