export function isLeftEyeCamera(renderingRenderer: any, activeCamera: any): boolean { const xrCamera = renderingRenderer.xr.getCamera(); if (xrCamera && xrCamera.cameras && xrCamera.cameras.length >= 2) { if (activeCamera === xrCamera.cameras[0]) { return true; } if (activeCamera === xrCamera.cameras[1]) { return false; } const viewMatrixX = activeCamera.matrixWorldInverse.elements[12]; const leftCamX = xrCamera.cameras[0].matrixWorldInverse.elements[12]; const rightCamX = xrCamera.cameras[1].matrixWorldInverse.elements[12]; const diffToLeft = Math.abs(viewMatrixX - leftCamX); const diffToRight = Math.abs(viewMatrixX - rightCamX); if (diffToLeft < 0.001 || diffToLeft < diffToRight) { return true; } if (diffToRight < 0.001) { return false; } } return activeCamera.projectionMatrix.elements[8] <= 0; } export function applySbsTextureWindow( renderingRenderer: any, activeCamera: any, material: any, is2DMode: boolean ): void { if (!material.map) return; const isPresentingXR = renderingRenderer.xr.isPresenting; if (is2DMode && !isPresentingXR) { material.map.offset.x = 0; material.map.repeat.x = 0.5; material.map.offset.y = 0; material.map.repeat.y = 1; return; } material.map.offset.x = 0; material.map.repeat.x = 1; material.map.offset.y = 0; material.map.repeat.y = 1; if (!isPresentingXR) { return; } material.map.offset.x = isLeftEyeCamera(renderingRenderer, activeCamera) ? 0 : 0.5; material.map.repeat.x = 0.5; } export function hideContentMeshes(vr180Mesh: any, planeMesh: any): void { if (vr180Mesh) vr180Mesh.visible = false; if (planeMesh) planeMesh.visible = false; } export function showActiveContentMesh(vr180Mesh: any, planeMesh: any, activeContentMesh: any): void { hideContentMeshes(vr180Mesh, planeMesh); if (activeContentMesh) { activeContentMesh.visible = true; } } export function positionPlaneForPresentation( planeMesh: any, camera2D: any, isFallback2D: boolean, planeDistance: number, plane2DDistance: number ): void { if (!planeMesh) return; const zPosition = isFallback2D && camera2D ? camera2D.position.z - plane2DDistance : -planeDistance; planeMesh.position.set(0, 1.6, zPosition); }