|
@@ -261,6 +261,29 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
//
|
|
|
|
|
|
+ var backgroundCamera = new THREE.OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );
|
|
|
+ var backgroundCamera2 = new THREE.PerspectiveCamera();
|
|
|
+ var backgroundPlaneMesh = new THREE.Mesh(
|
|
|
+ new THREE.PlaneBufferGeometry( 2, 2 ),
|
|
|
+ new THREE.MeshBasicMaterial( { depthTest: false, depthWrite: false } )
|
|
|
+ );
|
|
|
+ var backgroundBoxShader = THREE.ShaderLib[ 'cube' ];
|
|
|
+ var backgroundBoxMesh = new THREE.Mesh(
|
|
|
+ new THREE.BoxBufferGeometry( 5, 5, 5 ),
|
|
|
+ new THREE.ShaderMaterial( {
|
|
|
+ uniforms: backgroundBoxShader.uniforms,
|
|
|
+ vertexShader: backgroundBoxShader.vertexShader,
|
|
|
+ fragmentShader: backgroundBoxShader.fragmentShader,
|
|
|
+ depthTest: false,
|
|
|
+ depthWrite: false,
|
|
|
+ side: THREE.BackSide
|
|
|
+ } )
|
|
|
+ );
|
|
|
+ objects.update( backgroundPlaneMesh );
|
|
|
+ objects.update( backgroundBoxMesh );
|
|
|
+
|
|
|
+ //
|
|
|
+
|
|
|
function getTargetPixelRatio() {
|
|
|
|
|
|
return _currentRenderTarget === null ? _pixelRatio : 1;
|
|
@@ -1137,7 +1160,46 @@ THREE.WebGLRenderer = function ( parameters ) {
|
|
|
|
|
|
this.setRenderTarget( renderTarget );
|
|
|
|
|
|
- if ( this.autoClear || forceClear ) {
|
|
|
+ //
|
|
|
+
|
|
|
+ var needsClear = this.autoClear || forceClear;
|
|
|
+ var background = scene.background;
|
|
|
+
|
|
|
+ if ( background === null ) {
|
|
|
+
|
|
|
+ glClearColor( _clearColor.r, _clearColor.g, _clearColor.b, _clearAlpha );
|
|
|
+
|
|
|
+ } else if ( background instanceof THREE.CubeTexture ) {
|
|
|
+
|
|
|
+ backgroundCamera2.projectionMatrix = camera.projectionMatrix;
|
|
|
+
|
|
|
+ backgroundCamera2.matrixWorld.extractRotation( camera.matrixWorld );
|
|
|
+ backgroundCamera2.matrixWorldInverse.getInverse( backgroundCamera2.matrixWorld );
|
|
|
+
|
|
|
+ backgroundBoxMesh.material.uniforms[ "tCube" ].value = background;
|
|
|
+ backgroundBoxMesh.modelViewMatrix.multiplyMatrices( backgroundCamera2.matrixWorldInverse, backgroundBoxMesh.matrixWorld );
|
|
|
+
|
|
|
+ _this.renderBufferDirect( backgroundCamera2, null, backgroundBoxMesh.geometry, backgroundBoxMesh.material, backgroundBoxMesh, null );
|
|
|
+
|
|
|
+ needsClear = false;
|
|
|
+
|
|
|
+ } else if ( background instanceof THREE.Texture ) {
|
|
|
+
|
|
|
+ backgroundPlaneMesh.material.map = background;
|
|
|
+
|
|
|
+ _this.renderBufferDirect( backgroundCamera, null, backgroundPlaneMesh.geometry, backgroundPlaneMesh.material, backgroundPlaneMesh, null );
|
|
|
+
|
|
|
+ needsClear = false;
|
|
|
+
|
|
|
+ } else if ( background instanceof THREE.Color ) {
|
|
|
+
|
|
|
+ glClearColor( background.r, background.g, background.b, 1 );
|
|
|
+
|
|
|
+ needsClear = true;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( needsClear ) {
|
|
|
|
|
|
this.clear( this.autoClearColor, this.autoClearDepth, this.autoClearStencil );
|
|
|
|