diff --git a/examples/jsm/csm/CSMFrustum.js b/examples/jsm/csm/CSMFrustum.js index f34d26ff577428..a4b6f7507589b2 100644 --- a/examples/jsm/csm/CSMFrustum.js +++ b/examples/jsm/csm/CSMFrustum.js @@ -145,6 +145,9 @@ class CSMFrustum { target.length = breaks.length; + const near = this.vertices.near[ 0 ].z; + const far = this.vertices.far[ 0 ].z; + for ( let i = 0; i < breaks.length; i ++ ) { const cascade = target[ i ]; @@ -159,9 +162,11 @@ class CSMFrustum { } else { + const alpha = ( breaks[ i - 1 ] * far - near ) / ( far - near ); + for ( let j = 0; j < 4; j ++ ) { - cascade.vertices.near[ j ].lerpVectors( this.vertices.near[ j ], this.vertices.far[ j ], breaks[ i - 1 ] ); + cascade.vertices.near[ j ].lerpVectors( this.vertices.near[ j ], this.vertices.far[ j ], alpha ); } @@ -177,9 +182,11 @@ class CSMFrustum { } else { + const alpha = ( breaks[ i ] * far - near ) / ( far - near ); + for ( let j = 0; j < 4; j ++ ) { - cascade.vertices.far[ j ].lerpVectors( this.vertices.near[ j ], this.vertices.far[ j ], breaks[ i ] ); + cascade.vertices.far[ j ].lerpVectors( this.vertices.near[ j ], this.vertices.far[ j ], alpha ); } diff --git a/src/renderers/webgl-fallback/WebGLBackend.js b/src/renderers/webgl-fallback/WebGLBackend.js index 1ef89923d982d8..707c12022bf3f4 100644 --- a/src/renderers/webgl-fallback/WebGLBackend.js +++ b/src/renderers/webgl-fallback/WebGLBackend.js @@ -832,6 +832,14 @@ class WebGLBackend extends Backend { if ( setFrameBuffer && resolveRenderTarget ) this._resolveRenderTarget( descriptor ); + // Restore the framebuffer of the active render pass when clearing an unrelated + // render target, so subsequent draws in the pass don't bind to the cleared target. + if ( setFrameBuffer && this._currentContext !== null && this._currentContext !== descriptor ) { + + this._setFramebuffer( this._currentContext ); + + } + } }