Estensione OpenXR XR_ANDROID_unbounded_reference_space

Stringa del nome

XR_ANDROID_unbounded_reference_space

Tipo di estensione

Estensione dell'istanza

Numero di estensione registrato

468

Revisione

1

Dipendenze di estensioni e versioni

OpenXR 1.0

Data ultima modifica

2024-09-12

Stato IP

Nessuna rivendicazione IP nota.

Collaboratori

Spencer Quin, Google

Jared Finder, Google

Fengtao Fan, Google

Lachlan Ford, Google

Nihav Jain, Google

Levana Chen, Google

Panoramica

Questa estensione consente alle applicazioni di creare uno UNBOUNDED_ANDROID spazio di riferimento. Questo spazio di riferimento consente allo spettatore di muoversi liberamente in un ambiente complesso, spesso a molti metri da dove ha iniziato, ottimizzando sempre la stabilità del sistema di coordinate vicino allo spettatore. Man mano che il dispositivo rileva di più nel suo ambiente per comprendere meglio la scena, l'origine dello spazio di riferimento può variare con aggiustamenti enormi, se necessario, per mantenere il monitoraggio del dispositivo.

Per creare uno spazio di riferimento UNBOUNDED_ANDROID, l'applicazione può impostare XrReferenceSpaceCreateInfo::referenceSpaceType XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID e passare a 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));

Lo spazio di riferimento UNBOUNDED_ANDROID stabilisce un'origine bloccata a livello mondiale della posizione dell'headset all'avvio del monitoraggio del dispositivo. È allineato alla gravità per escludere inclinazione e roll, con +X a destra, +Y in alto e -Z in avanti.

Lo spazio UNBOUNDED_ANDROID è utile quando un'applicazione deve visualizzare contenuti a livello mondiale che vanno oltre i confini di un singolo STAGE, ad esempio un intero piano o più piani di un edificio.

Uno spazio UNBOUNDED_ANDROID mantiene la stabilità vicino allo spettatore regolando la sua origine nel tempo. Può apportare aggiustamenti lievi e significativi, se necessario, per mantenere il monitoraggio del dispositivo.

  • Il runtime non deve mettere in coda l'evento XrEventDataReferenceSpaceChangePending in risposta a piccoli aggiustamenti.
  • Il runtime deve mettere in coda l'evento XrEventDataReferenceSpaceChangePending in risposta a aggiustamenti enormi. Ad esempio, la posa nello spazio UNBOUNDED_ANDROID viene reimpostata a causa di una perdita del rilevamento e il rilevamento viene ristabilito su una stima disconnessa del mondo ("nuova mappa").
  • Il sistema aggiorna costantemente la propria comprensione del mondo e aggiusta il monitoraggio dei dispositivi. Se un'applicazione richiede una posizione permanente indipendentemente dai reset del monitoraggio, in questo caso puoi utilizzare un'ancora.

Evento di modifica dello spazio di riferimento

Per i parametri definiti dalla struttura XrEventDataReferenceSpaceChangePending che è stata restituita in caso di modifica del mondo o ottimizzazione degli eventi di rilocalizzazione:

typedef struct XrEventDataReferenceSpaceChangePending {
    XrStructureType         type;
    const void*             next;
    XrSession               session;
    XrReferenceSpaceType    referenceSpaceType;
    XrTime                  changeTime;
    XrBool32                poseValid;
    XrPosef                 poseInPreviousSpace;
} XrEventDataReferenceSpaceChangePending;

Descrizioni dei membri

  • referenceSpaceType XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID.
  • changeTime rappresenterà il XrTime al termine della relocalizzazione.
  • poseValid sarà false a causa della stima disconnessa o true dopo la ricollegamento.
  • poseInPreviousSpace non sarà valido quando poseValid è false.

Quando le visualizzazioni, i controller o altri spazi registrano una perdita di monitoraggio rispetto allo spazioUNBOUNDED_ANDROID, le applicazioni possono continuare a ricevere valori position e orientation dedotti o di ultima conoscenza. Queste pose dedotte possono, ad esempio, basarsi su aggiornamenti del modello del collo, navigazione stimata inerziale o su una posizione nota per ultima. Un'applicazione può presumere che continuerà ad avere i valori XR_SPACE_LOCATION_POSITION_VALID_BIT e XR_VIEW_STATE_POSITION_VALID_BIT impostati, ma XR_SPACE_LOCATION_POSITION_TRACKED_BIT e XR_VIEW_STATE_POSITION_TRACKED_BIT potrebbero essere cancellati dal runtime per indicare che la posizione è dedotta o dell'ultima nota in questo modo.

Quando il monitoraggio viene recuperato, il runtime potrebbe recentrare l'origine in modo arbitrario, ad esempio spostandola in modo che corrisponda allo spettatore. Un'applicazione può controllare il valore poseValid restituito dall'evento XrEventDataReferenceSpaceChangePending per determinare se è pronta per l'uso.

Nuovi tipi di oggetti

Nuovi tipi di indicatori

Nuove costanti enum

L'enumerazione XrReferenceSpaceType è estesa con:

  • XR_REFERENCE_SPACE_TYPE_UNBOUNDED_ANDROID

Nuovi enum

Nuove strutture

Nuove funzioni

Problemi

Cronologia delle versioni

  • Revisione 1, 12-09-2024 (Levana Chen)
    • Descrizione iniziale dell'estensione