提交 1dfbba57 编写于 作者: M Mugen87

EffectComposer: Introduce .setPixelRatio() and harmonize resizing.

上级 0cc10e97
......@@ -15,10 +15,20 @@ THREE.EffectComposer = function ( renderer, renderTarget ) {
stencilBuffer: false
};
var size = renderer.getDrawingBufferSize( new THREE.Vector2() );
renderTarget = new THREE.WebGLRenderTarget( size.width, size.height, parameters );
var size = renderer.getSize( new THREE.Vector2() );
this._pixelRatio = renderer.getPixelRatio();
this._width = size.width;
this._height = size.height;
renderTarget = new THREE.WebGLRenderTarget( this._width * this._pixelRatio, this._height * this._pixelRatio, parameters );
renderTarget.texture.name = 'EffectComposer.rt1';
} else {
this._pixelRatio = 1;
this._width = renderTarget.width;
this._height = renderTarget.height;
}
this.renderTarget1 = renderTarget;
......@@ -162,10 +172,13 @@ Object.assign( THREE.EffectComposer.prototype, {
if ( renderTarget === undefined ) {
var size = this.renderer.getDrawingBufferSize( new THREE.Vector2() );
var size = this.renderer.getSize( new THREE.Vector2() );
this._pixelRatio = this.renderer.getPixelRatio();
this._width = size.width;
this._height = size.height;
renderTarget = this.renderTarget1.clone();
renderTarget.setSize( size.width, size.height );
renderTarget.setSize( this._width * this._pixelRatio, this._height * this._pixelRatio );
}
......@@ -181,15 +194,29 @@ Object.assign( THREE.EffectComposer.prototype, {
setSize: function ( width, height ) {
this.renderTarget1.setSize( width, height );
this.renderTarget2.setSize( width, height );
this._width = width;
this._height = height;
var effectiveWidth = this._width * this._pixelRatio;
var effectiveHeight = this._height * this._pixelRatio;
this.renderTarget1.setSize( effectiveWidth, effectiveHeight );
this.renderTarget2.setSize( effectiveWidth, effectiveHeight );
for ( var i = 0; i < this.passes.length; i ++ ) {
this.passes[ i ].setSize( width, height );
this.passes[ i ].setSize( effectiveWidth, effectiveHeight );
}
},
setPixelRatio: function ( pixelRatio ) {
this._pixelRatio = pixelRatio;
this.setSize( this._width, this._height );
}
} );
......
......@@ -252,12 +252,11 @@
SCREEN_HEIGHT = window.innerHeight;
SCREEN_WIDTH = window.innerWidth;
renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
camera.aspect = SCREEN_WIDTH / SCREEN_HEIGHT;
camera.updateProjectionMatrix();
composer.reset();
renderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
composer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
}
......
......@@ -244,7 +244,7 @@
camera.updateProjectionMatrix();
renderer.setSize( window.innerWidth, window.innerHeight );
composer.reset();
composer.setSize( window.innerWidth, window.innerHeight );
}
......
......@@ -135,8 +135,8 @@
effectFocus = new THREE.ShaderPass( THREE.FocusShader );
effectFocus.uniforms[ "screenWidth" ].value = window.innerWidth;
effectFocus.uniforms[ "screenHeight" ].value = window.innerHeight;
effectFocus.uniforms[ "screenWidth" ].value = window.innerWidth * window.devicePixelRatio;
effectFocus.uniforms[ "screenHeight" ].value = window.innerHeight * window.devicePixelRatio;
composer = new THREE.EffectComposer( renderer );
......@@ -156,17 +156,16 @@
function onWindowResize() {
renderer.setSize( window.innerWidth, window.innerHeight );
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
camera.lookAt( scene.position );
composer.reset();
renderer.setSize( window.innerWidth, window.innerHeight );
composer.setSize( window.innerWidth, window.innerHeight );
effectFocus.uniforms[ "screenWidth" ].value = window.innerWidth;
effectFocus.uniforms[ "screenHeight" ].value = window.innerHeight;
effectFocus.uniforms[ "screenWidth" ].value = window.innerWidth * window.devicePixelRatio;
effectFocus.uniforms[ "screenHeight" ].value = window.innerHeight * window.devicePixelRatio;
}
......
......@@ -239,11 +239,7 @@
cameraO.updateProjectionMatrix();*/
renderer.setSize( width, height );
var pixelRatio = renderer.getPixelRatio();
var newWidth = Math.floor( width * pixelRatio ) || 1;
var newHeight = Math.floor( height * pixelRatio ) || 1;
composer.setSize( newWidth, newHeight );
composer.setSize( width, height );
}
......
......@@ -92,11 +92,7 @@
camera.updateProjectionMatrix();
renderer.setSize( width, height );
var pixelRatio = renderer.getPixelRatio();
var newWidth = Math.floor( width * pixelRatio ) || 1;
var newHeight = Math.floor( height * pixelRatio ) || 1;
composer.setSize( newWidth, newHeight );
composer.setSize( width, height );
}
......
......@@ -118,8 +118,8 @@
// Sobel operator
effectSobel = new THREE.ShaderPass( THREE.SobelOperatorShader );
effectSobel.uniforms[ "resolution" ].value.x = window.innerWidth;
effectSobel.uniforms[ "resolution" ].value.y = window.innerHeight;
effectSobel.uniforms[ 'resolution' ].value.x = window.innerWidth * window.devicePixelRatio;
effectSobel.uniforms[ 'resolution' ].value.y = window.innerHeight * window.devicePixelRatio;
composer.addPass( effectSobel );
var controls = new THREE.OrbitControls( camera, renderer.domElement );
......@@ -145,8 +145,8 @@
renderer.setSize( window.innerWidth, window.innerHeight );
composer.setSize( window.innerWidth, window.innerHeight );
effectSobel.uniforms[ "resolution" ].value.x = window.innerWidth;
effectSobel.uniforms[ "resolution" ].value.y = window.innerHeight;
effectSobel.uniforms[ 'resolution' ].value.x = window.innerWidth * window.devicePixelRatio;
effectSobel.uniforms[ 'resolution' ].value.y = window.innerHeight * window.devicePixelRatio;
}
......
......@@ -143,11 +143,7 @@
camera.updateProjectionMatrix();
renderer.setSize( width, height );
var pixelRatio = renderer.getPixelRatio();
var newWidth = Math.floor( width * pixelRatio ) || 1;
var newHeight = Math.floor( height * pixelRatio ) || 1;
composer.setSize( newWidth, newHeight );
composer.setSize( width, height );
}
......
......@@ -177,6 +177,7 @@
// postprocessing
composer = new THREE.EffectComposer( renderer );
composer.setPixelRatio( 1 ); // ensure pixel ratio is always 1 for performance reasons
ssaaRenderPassP = new THREE.SSAARenderPass( scene, cameraP );
composer.addPass( ssaaRenderPassP );
ssaaRenderPassO = new THREE.SSAARenderPass( scene, cameraO );
......@@ -204,11 +205,7 @@
cameraO.updateProjectionMatrix();
renderer.setSize( width, height );
var pixelRatio = renderer.getPixelRatio();
var newWidth = Math.floor( width * pixelRatio ) || 1;
var newHeight = Math.floor( height * pixelRatio ) || 1;
composer.setSize( newWidth, newHeight );
composer.setSize( width, height );
}
......
......@@ -172,11 +172,7 @@
camera.updateProjectionMatrix();
renderer.setSize( width, height );
var pixelRatio = renderer.getPixelRatio();
var newWidth = Math.floor( width * pixelRatio ) || 1;
var newHeight = Math.floor( height * pixelRatio ) || 1;
composer.setSize( newWidth, newHeight );
composer.setSize( width, height );
}
......
......@@ -109,7 +109,6 @@
bloomPass.radius = params.bloomRadius;
composer = new THREE.EffectComposer( renderer );
composer.setSize( window.innerWidth, window.innerHeight );
composer.addPass( renderScene );
composer.addPass( bloomPass );
......
......@@ -140,7 +140,6 @@
var bloomComposer = new THREE.EffectComposer( renderer );
bloomComposer.renderToScreen = false;
bloomComposer.setSize( window.innerWidth * window.devicePixelRatio, window.innerHeight * window.devicePixelRatio );
bloomComposer.addPass( renderScene );
bloomComposer.addPass( bloomPass );
......@@ -158,7 +157,6 @@
finalPass.needsSwap = true;
var finalComposer = new THREE.EffectComposer( renderer );
finalComposer.setSize( window.innerWidth * window.devicePixelRatio, window.innerHeight * window.devicePixelRatio );
finalComposer.addPass( renderScene );
finalComposer.addPass( finalPass );
......@@ -251,8 +249,8 @@
renderer.setSize( width, height );
bloomComposer.setSize( width * window.devicePixelRatio, height * window.devicePixelRatio );
finalComposer.setSize( width * window.devicePixelRatio, height * window.devicePixelRatio );
bloomComposer.setSize( width, height );
finalComposer.setSize( width, height );
render();
......
......@@ -199,12 +199,11 @@
function onWindowResize() {
renderer.setSize( window.innerWidth, window.innerHeight );
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
composer.reset();
renderer.setSize( window.innerWidth, window.innerHeight );
composer.setSize( window.innerWidth, window.innerHeight );
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册