2.2 KiB
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
trydas linhas 239-268 que tenta criar uma sessao manualmente - A lib
@react-three/xrgerencia a sessao internamente viaxrStore.enterAR()
2. Usar customSessionInit no createXRStore para image tracking
- A lib suporta
customSessionInitemXRSessionInitOptionsque permite injetar opcoes extras na sessao - Passar
optionalFeatures: ['image-tracking']etrackedImagesviacustomSessionInit - O
createXRStoreja adicionalocal-floor,hand-tracking,anchors,plane-detectionautomaticamente
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 apenasawait xrStore.enterAR()com listener deend- Manter
ImageTrackingAnchor,ControllerFineTuning,XRModelsem 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