From 83f322a7e0493e1114f3fd4b2a8bb5849b3f423a Mon Sep 17 00:00:00 2001 From: Amr Khamis <101368138+AmrKhamis1@users.noreply.github.com> Date: Sat, 14 Mar 2026 23:02:09 +0200 Subject: [PATCH] Add forceMonoscopic option for WebXR --- src/renderers/webxr/WebXRManager.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/renderers/webxr/WebXRManager.js b/src/renderers/webxr/WebXRManager.js index 03ed5ab7e7426b..0d84de98c446d8 100644 --- a/src/renderers/webxr/WebXRManager.js +++ b/src/renderers/webxr/WebXRManager.js @@ -111,6 +111,15 @@ class WebXRManager extends EventDispatcher { */ this.isPresenting = false; + /** + * When `true`, both eyes use the left eye's view position. Useful for content + * that must be viewed from a single viewpoint (e.g. 360° panoramas, Matterport-style). + * + * @type {boolean} + * @default false + */ + this.forceMonoscopic = false; + /** * Returns a group representing the `target ray` space of the XR controller. * Use this space for visualizing 3D objects that support the user in pointing @@ -982,6 +991,13 @@ class WebXRManager extends EventDispatcher { camera.matrix.fromArray( view.transform.matrix ); camera.matrix.decompose( camera.position, camera.quaternion, camera.scale ); + if ( scope.forceMonoscopic && i === 1 && cameras[ 0 ] !== undefined ) { + + camera.position.copy( cameras[ 0 ].position ); + camera.matrix.compose( camera.position, camera.quaternion, camera.scale ); + + } + camera.projectionMatrix.fromArray( view.projectionMatrix ); camera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert(); camera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height );