Files
SteelXR2/.lovable/plan.md
T
gpt-engineer-app[bot] 973e7219a8 Save plan in Lovable
2026-02-27 19:43:09 +00:00

2.2 KiB

Plano: Corrigir entrada XR no Meta Quest 3

Problema raiz

O codigo atual cria duas sessoes XR em sequencia: primeiro manualmente via navigator.xr.requestSession('immersive-ar', ...) (linha 242), depois via xrStore.enterAR() (linha 271). O Quest 3 rejeita a segunda porque ja existe uma sessao ativa. Alem disso, a primeira sessao nao esta conectada ao renderer do Three.js, entao mesmo se funcionasse, nao renderizaria nada.

Correcoes

1. Remover a chamada manual a navigator.xr.requestSession

  • Eliminar todo o bloco try das linhas 239-268 que tenta criar uma sessao manualmente
  • A lib @react-three/xr gerencia a sessao internamente via xrStore.enterAR()

2. Usar customSessionInit no createXRStore para image tracking

  • A lib suporta customSessionInit em XRSessionInitOptions que permite injetar opcoes extras na sessao
  • Passar optionalFeatures: ['image-tracking'] e trackedImages via customSessionInit
  • O createXRStore ja adiciona local-floor, hand-tracking, anchors, plane-detection automaticamente

3. Condicionar o emulador

  • emulate: 'metaQuest3' ativa o emulador IWER em localhost, o que pode interferir no Quest real
  • Condicionar: so emular se nao estiver em dispositivo XR real (checar navigator.xr?.isSessionSupported)
  • Ou mais simples: so emular em location.hostname === 'localhost' E quando !navigator.xr

4. Arquivo: src/pages/XRSession.tsx

Mudancas:

  • Mover criacao do store para dentro do componente (ou lazy init) para poder passar o bitmap como customSessionInit
  • handleEnterAR: simplificar para apenas await xrStore.enterAR() com listener de end
  • Manter ImageTrackingAnchor, ControllerFineTuning, XRModel sem alteracoes
ANTES (bugado):
  1. navigator.xr.requestSession('immersive-ar')  ← cria sessao A
  2. xrStore.enterAR()                              ← tenta sessao B → REJEITADA

DEPOIS (correto):
  1. createXRStore({ customSessionInit: { optionalFeatures: ['image-tracking'], trackedImages: [...] } })
  2. xrStore.enterAR()                              ← unica sessao, com image tracking

Sem alteracoes em

  • ModelViewer, ViewerControls, SmartMeasure, checklist, medicoes, screenshots, PDF, IFC import