diff --git a/src/renderers/webxr/WebXRManager.js b/src/renderers/webxr/WebXRManager.js index 064b2384b04923..e17518d30ce89c 100644 --- a/src/renderers/webxr/WebXRManager.js +++ b/src/renderers/webxr/WebXRManager.js @@ -65,6 +65,8 @@ class WebXRManager extends EventDispatcher { // + const updatedCameraProperties = new WeakMap(); + this.cameraAutoUpdate = true; this.enabled = false; @@ -182,6 +184,19 @@ class WebXRManager extends EventDispatcher { scope.isPresenting = false; + if ( updatedCameraProperties.has( scope.getCamera() ) ) { + + const cameraAndProperties = updatedCameraProperties.get( scope.getCamera() ); + + const userCamera = cameraAndProperties.userCamera; + userCamera.fov = cameraAndProperties.fov; + userCamera.zoom = cameraAndProperties.zoom; + userCamera.updateProjectionMatrix(); + + updatedCameraProperties.delete( scope.getCamera() ); + + } + renderer.setPixelRatio( currentPixelRatio ); renderer.setSize( currentSize.width, currentSize.height, false ); @@ -363,6 +378,8 @@ class WebXRManager extends EventDispatcher { scope.isPresenting = true; + updatedCameraProperties.delete( scope.getCamera() ); + scope.dispatchEvent( { type: 'sessionstart' } ); } @@ -633,6 +650,16 @@ class WebXRManager extends EventDispatcher { if ( camera.isPerspectiveCamera ) { + if ( ! updatedCameraProperties.has( scope.getCamera() ) ) { + + updatedCameraProperties.set( scope.getCamera(), { + userCamera: camera, + fov: camera.fov, + zoom: camera.zoom, + } ); + + } + camera.fov = RAD2DEG * 2 * Math.atan( 1 / camera.projectionMatrix.elements[ 5 ] ); camera.zoom = 1;