String de nome
XR_ANDROID_unbounded_reference_space
Tipo de extensão
Extensão de instância
Número de extensão registrado
468
Revisão
1
Dependências de extensão e versão
Data da última modificação
2024-09-12
Status do IP
Nenhuma reivindicação de IP conhecida.
Colaboradores
Spencer Quin, Google
Jared Finder, Google
Fengtao Fan, Google
Lachlan Ford, Google
Nihav Jain, Google
Levana Chen, Google
Visão geral
Essa extensão permite que os aplicativos criem um espaço de referência
UNBOUNDED_ANDROID
. Esse espaço de referência permite que o espectador se mova livremente por um ambiente
complexo, muitas vezes a muitos metros de onde começou, sempre otimizando
a estabilidade do sistema de coordenadas perto do espectador. À medida que o dispositivo detecta mais
do ambiente para criar uma compreensão melhor da cena, a origem do
espaço de referência pode se desviar com ajustes enormes conforme necessário para manter
o rastreamento do dispositivo.
Para criar um espaço de referência UNBOUNDED_ANDROID
, o aplicativo pode definir
XrReferenceSpaceCreateInfo::referenceSpaceType
XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID
e transmitir para
xrCreateReferenceSpace.
XrInstance instance; // previously initialized
XrSession session; // previously initialized
XrPosef pose; // previously initialized
// Use the new reference space type in the create info struct
XrReferenceSpaceCreateInfo createInfo = {
.type = XR_REFERENCE_SPACE_CREATE_INFO;
.next = nullptr;
.referenceSpaceType = XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID;
.poseInReferenceSpace = pose;
}
XrSpace referenceSpace;
CHK_XR(xrCreateReferenceSpace(session, &createInfo, &referenceSpace));
// After usage
CHK_XR(xrDestroySpace(referenceSpace));
O espaço de referência UNBOUNDED_ANDROID
estabelece uma origem com bloqueio mundial da
posição do fone de ouvido quando o rastreamento do dispositivo começa. Ele está alinhado à gravidade para
excluir inclinação e rolagem, com +X à direita, +Y para cima e -Z para frente.
O espaço UNBOUNDED_ANDROID
é útil quando um aplicativo precisa renderizar
conteúdo em escala mundial que se estende além dos limites de um único STAGE
, por
exemplo, um andar inteiro ou vários andares de um edifício.
Um espaço UNBOUNDED_ANDROID
mantém a estabilidade perto do espectador ajustando
a origem ao longo do tempo. Ele pode fazer ajustes pequenos e grandes conforme
necessário para manter o rastreamento do dispositivo.
- O ambiente de execução não deve enfileirar o evento XrEventDataReferenceSpaceChangePending em resposta a pequenos ajustes.
- O ambiente de execução precisa enfileirar o evento
XrEventDataReferenceSpaceChangePending em resposta a
ajustes grandes. Por exemplo, a pose no espaço
UNBOUNDED_ANDROID
é redefinida devido a uma perda de rastreamento, e o rastreamento é restabelecido em uma estimativa desconectada do mundo (um "novo mapa"). - O sistema está sempre atualizando o entendimento do mundo e ajustando o rastreamento de dispositivos. Se um aplicativo exigir um local persistido independente das redefinições de rastreamento, uma âncora poderá ser usada nesse caso.
Evento de mudança de espaço de referência
Para parâmetros definidos pela estrutura XrEventDataReferenceSpaceChangePending que retornaram eventos de mudança de mundo ou otimização de relocalização:
typedef struct XrEventDataReferenceSpaceChangePending {
XrStructureType type;
const void* next;
XrSession session;
XrReferenceSpaceType referenceSpaceType;
XrTime changeTime;
XrBool32 poseValid;
XrPosef poseInPreviousSpace;
} XrEventDataReferenceSpaceChangePending;
Descrições dos participantes
- A
referenceSpaceType
estáXR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID
. changeTime
vai representar oXrTime
em que a relocalização foi concluída.poseValid
seráfalse
devido à estimativa desconectada outrue
após a reconexão.poseInPreviousSpace
não será válido quandoposeValid
forfalse
.
Quando visualizações, controladores ou outros espaços perdem o rastreamento em relação ao
espaço UNBOUNDED_ANDROID
, os aplicativos podem continuar recebendo valores
position
e orientation
inferidos ou conhecidos por último. Essas poses inferidas podem,
por exemplo, ser baseadas em atualizações do modelo do pescoço, estimativa de posição inercial ou a
posição conhecida mais recente. Um aplicativo pode presumir que continuará a ter o
XR_SPACE_LOCATION_POSITION_VALID_BIT
e
XR_VIEW_STATE_POSITION_VALID_BIT
definidos, mas
XR_SPACE_LOCATION_POSITION_TRACKED_BIT
e
XR_VIEW_STATE_POSITION_TRACKED_BIT
podem ser limpos pelo ambiente de execução para indicar
que a posição é inferida ou conhecida pela última vez dessa forma.
Quando o rastreamento é recuperado, o ambiente de execução pode centralizar a origem
de forma arbitrária, por exemplo, movendo a origem para coincidir com o espectador. Um
aplicativo pode verificar o valor poseValid
retornado do evento
XrEventDataReferenceSpaceChangePending para determinar se ele está pronto para
uso.
Novos tipos de objeto
Novos tipos de flags
Novas constantes de tipo enumerado
A enumeração XrReferenceSpaceType foi ampliada com:
XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID
Novos tipos enumerados
Novas estruturas
Novas funções
Problemas
Histórico de versões
- Revisão 1, 12/09/2024 (Levana Chen)
- Descrição inicial da extensão