XR_ANDROID_depth_texture
Stringa del nome
XR_ANDROID_depth_texture
Tipo di estensione
Estensione dell'istanza
Numero di interno registrato
703
Revisione
1
Stato di ratifica
Non ratificato
Dipendenze da estensioni e versioni
Data ultima modifica
2024-09-11
Stato IP
Nessuna rivendicazione di proprietà intellettuale nota.
Collaboratori
Sushant Kulkarni, Google
Cairn Overturf, Google
Spencer Quin, Google
Levana Chen, Google
Panoramica
Questa estensione consente all'applicazione di richiedere mappe di profondità dell'ambiente reale intorno al visore e di eseguire query sulle risoluzioni di profondità supportate al momento della creazione.
Questa estensione ha lo scopo di esporre la profondità grezza e uniforme per l'occlusione, i test di hit e altre attività specifiche che sfruttano la geometria accurata della scena, ad esempio il rilevamento di volti contraffatti.
Nota
Le mappe di profondità vengono generate dal runtime e condivise con l'applicazione utilizzando XrDepthSwapchainANDROID . Il runtime non deve modificare le risoluzioni delle immagini di profondità restituite tramite xrEnumerateDepthResolutionsANDROID per tutta la durata dell'applicazione.
Autorizzazioni
Questa estensione espone una texture di profondità con sottocampionamento per mitigare i problemi relativi alle informazioni che consentono l'identificazione personale (PII). Le applicazioni Android devono disporre dell'autorizzazione android.permission.SCENE_UNDERSTANDING_FINE elencata nel loro manifest, in quanto questa estensione espone la geometria dell'ambiente. L'autorizzazione android.permission.SCENE_UNDERSTANDING_FINE è considerata pericolosa. L'applicazione deve richiedere l'autorizzazione in fase di runtime per utilizzare queste funzioni:
(livello di protezione: pericoloso)
Ispezionare la funzionalità del sistema
La struttura XrSystemDepthTrackingPropertiesANDROID è definita come:
typedef struct XrSystemDepthTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsDepthTracking;
} XrSystemDepthTrackingPropertiesANDROID;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture. Nessuna struttura di questo tipo è definita in OpenXR di base o in questa estensione.supportsDepthTrackingè unXrBool32che indica se il sistema attuale supporta il monitoraggio della profondità.
Un'applicazione può verificare se il sistema è in grado di tracciare la profondità estendendo XrSystemProperties con la struttura XrSystemDepthTrackingPropertiesANDROID quando chiama xrGetSystemProperties .
Se e solo se un runtime restituisce XR_FALSE per supportsDepthTracking , il runtime deve restituire XR_ERROR_FEATURE_UNSUPPORTED da xrCreateDepthSwapchainANDROID .
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_depth_texturedeve essere attivata prima di utilizzare XrSystemDepthTrackingPropertiesANDROID -
typedeve essereXR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROID -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture
Risoluzioni della profondità della query
La funzione xrEnumerateDepthResolutionsANDROID è definita come:
XrResult xrEnumerateDepthResolutionsANDROID(
XrSession session,
uint32_t resolutionCapacityInput,
uint32_t* resolutionCountOutput,
XrDepthCameraResolutionANDROID* resolutions);
Descrizioni dei parametri
sessionè l'XrSession che enumera le risoluzioni di profondità supportate.resolutionCapacityInputè la capacità diresolutionso 0 per recuperare la capacità richiesta.resolutionCountOutputè un puntatore al conteggio diuint64_tresolutionsscritti o un puntatore alla capacità richiesta nel caso in cuiresolutionCapacityInputsia insufficiente.resolutionsè un puntatore a un array di XrDepthCameraResolutionANDROID , ma can può essereNULLseresolutionCapacityInputè0.- Consulta la sezione Parametri delle dimensioni del buffer per una descrizione dettagliata del recupero delle dimensioni
resolutionsrichieste.
xrEnumerateDepthResolutionsANDROID enumera le risoluzioni di profondità supportate dalla sessione corrente. Le risoluzioni di profondità devono essere in ordine dalla preferenza di runtime più alta a quella più bassa. L'applicazione deve utilizzare la preferenza più elevata che supporta per prestazioni e qualità ottimali.
I runtime devono sempre restituire contenuti del buffer identici da questa enumerazione per tutta la durata della sessione.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_depth_texturedeve essere attivata prima di chiamare xrEnumerateDepthResolutionsANDROID -
sessiondeve essere un handle XrSession valido -
resolutionCountOutputdeve essere un puntatore a un valoreuint32_t - Se
resolutionCapacityInputnon è0,resolutionsdeve essere un puntatore a un array di valoriresolutionCapacityInputXrDepthCameraResolutionANDROID
Codici di ritorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_VALIDATION_FAILURE
L'enumerazione XrDepthCameraResolutionANDROID descrive le risoluzioni di profondità supportate durante la creazione di un XrDepthSwapchainANDROID .
typedef enum XrDepthCameraResolutionANDROID {
XR_DEPTH_CAMERA_RESOLUTION_80x80_ANDROID = 0,
XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID = 1,
XR_DEPTH_CAMERA_RESOLUTION_320x320_ANDROID = 2,
XR_DEPTH_CAMERA_RESOLUTION_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrDepthCameraResolutionANDROID;
Descrizioni dell'enumerante
XR_DEPTH_CAMERA_RESOLUTION_80x80_ANDROID: la risoluzione delle immagini di profondità e confidenza è 80x80.XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID: la risoluzione delle immagini di profondità e confidenza è 160 x 160.XR_DEPTH_CAMERA_RESOLUTION_320x320_ANDROID: la risoluzione delle immagini di profondità e confidenza è 320 x 320.
Crea una swapchain di profondità
XR_DEFINE_HANDLE(XrDepthSwapchainANDROID)
Un XrDepthSwapchainANDROID è un handle di swapchain di profondità.
La funzione xrCreateDepthSwapchainANDROID è definita come:
XrResult xrCreateDepthSwapchainANDROID(
XrSession session,
const XrDepthSwapchainCreateInfoANDROID* createInfo,
XrDepthSwapchainANDROID* swapchain);
Descrizioni dei parametri
sessionè l'XrSession che crea la swapchain di profondità.createInfoè un puntatore a una struttura XrDepthSwapchainCreateInfoANDROID contenente i parametri da utilizzare per creare la swapchain.swapchainè un puntatore a un handle in cui viene restituito l'oggetto XrDepthSwapchainANDROID creato.
L'applicazione può utilizzare la funzione xrCreateDepthSwapchainANDROID per creare una swapchain di profondità che gestisce sia le immagini di profondità che quelle di confidenza.
- Il runtime deve restituire
XR_ERROR_FEATURE_UNSUPPORTEDse il sistema non supporta il monitoraggio della profondità. - Il runtime deve restituire
XR_ERROR_PERMISSION_INSUFFICIENTse le autorizzazioni richieste non sono state concesse all'app chiamante. - Il runtime deve restituire
XR_ERROR_VALIDATION_FAILUREse la risoluzione di profondità specificata in XrDepthSwapchainCreateInfoANDROID non è supportata. - Il runtime deve creare immagini di confidenza della profondità solo quando i bit corrispondenti sono impostati per
createInfoal momento della creazione della swapchain.
L'handle della swapchain di profondità restituito può essere utilizzato successivamente nelle chiamate API. L'handle XrDepthSwapchainANDROID deve essere liberato tramite la funzione xrDestroyDepthSwapchainANDROID.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_depth_texturedeve essere abilitata prima di chiamare xrCreateDepthSwapchainANDROID -
sessiondeve essere un handle XrSession valido -
createInfodeve essere un puntatore a una struttura XrDepthSwapchainCreateInfoANDROID valida -
swapchaindeve essere un puntatore a un handle XrDepthSwapchainANDROID
Codici di ritorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FEATURE_UNSUPPORTEDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOST
La struttura XrDepthSwapchainCreateInfoANDROID è definita come:
typedef struct XrDepthSwapchainCreateInfoANDROID {
XrStructureType type;
const void* next;
XrDepthCameraResolutionANDROID resolution;
XrDepthSwapchainCreateFlagsANDROID createFlags;
} XrDepthSwapchainCreateInfoANDROID;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture. Nessuna struttura di questo tipo è definita in OpenXR di base o in questa estensione.resolutionè la XrDepthCameraResolutionANDROID con cui vengono create le texture di profondità e confidenza.createFlagsè uno o più XrDepthSwapchainCreateFlagsANDROID .
La struttura XrDepthSwapchainCreateInfoANDROID fornisce opzioni di creazione per XrDepthSwapchainANDROID quando viene passata a xrCreateDepthSwapchainANDROID .
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_depth_texturedeve essere abilitata prima di utilizzare XrDepthSwapchainCreateInfoANDROID -
typedeve essereXR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROID -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture -
resolutiondeve essere un valore XrDepthCameraResolutionANDROID valido -
createFlagsdeve essere una combinazione valida di valori XrDepthSwapchainCreateFlagBitsANDROID -
createFlagsnon deve essere0
XrDepthSwapchainCreateFlagsANDROID specifica le opzioni di creazione per XrDepthSwapchainANDROID .
typedef XrFlags64 XrDepthSwapchainCreateFlagsANDROID;
I bit validi per XrDepthSwapchainCreateFlagsANDROID sono definiti da XrDepthSwapchainCreateFlagBitsANDROID , che è specificato come:
// Flag bits for XrDepthSwapchainCreateFlagsANDROID
static const XrDepthSwapchainCreateFlagsANDROID XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID = 0x00000001;
static const XrDepthSwapchainCreateFlagsANDROID XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID = 0x00000002;
static const XrDepthSwapchainCreateFlagsANDROID XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID = 0x00000004;
static const XrDepthSwapchainCreateFlagsANDROID XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID = 0x00000008;
Descrizioni dei flag
XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID: indica che la swapchain fornirà immagini di profondità fluide.XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID: indica che la swapchain fornirà immagini di confidenza della profondità fluide.XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID: indica che la swapchain fornirà immagini di profondità non elaborate.XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID: indica che la swapchain fornirà immagini di confidenza della profondità non elaborate.
La funzione xrDestroyDepthSwapchainANDROID è definita come:
XrResult xrDestroyDepthSwapchainANDROID(
XrDepthSwapchainANDROID swapchain);
Descrizioni dei parametri
swapchainè un handle XrDepthSwapchainANDROID creato in precedenza da xrCreateDepthSwapchainANDROID .
La funzione xrDestroyDepthSwapchainANDROID distrugge la swapchain di profondità. Dopo questa chiamata, il runtime potrebbe liberare tutta la memoria e le risorse correlate.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_depth_texturedeve essere attivata prima di chiamare xrDestroyDepthSwapchainANDROID -
swapchaindeve essere un handle XrDepthSwapchainANDROID valido
Thread Safety
- L'accesso a
swapchaine a tutti gli handle secondari deve essere sincronizzato esternamente
Codici di ritorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
Accedere alle texture di profondità
La funzione xrEnumerateDepthSwapchainImagesANDROID è definita come:
XrResult xrEnumerateDepthSwapchainImagesANDROID(
XrDepthSwapchainANDROID depthSwapchain,
uint32_t depthImageCapacityInput,
uint32_t* depthImageCountOutput,
XrDepthSwapchainImageANDROID* depthImages);
Descrizioni dei parametri
depthSwapchainè XrDepthSwapchainANDROID da cui ottenere le immagini.depthImageCapacityInputè la capacità dell'arraydepthImageso 0 per indicare una richiesta di recupero della capacità richiesta.depthImageCountOutputè un puntatore al conteggio didepthImagesscritti o un puntatore alla capacità richiesta nel caso in cuidepthImageCapacityInputsia insufficiente.depthImagesè un puntatore a un array di strutture XrDepthSwapchainImageANDROID. Può essereNULLsedepthImageCapacityInputè 0.- Consulta la sezione Parametri delle dimensioni del buffer per una descrizione dettagliata del recupero delle dimensioni
depthImagesrichieste.
xrEnumerateDepthSwapchainImagesANDROID riempie un array di strutture XrDepthSwapchainImageANDROID. Le risorse devono essere costanti e valide per tutta la durata di XrDepthSwapchainANDROID . Questa funzione si comporta in modo analogo a xrEnumerateSwapchainImages .
Il runtime deve sempre restituire contenuti del buffer identici da questa enumerazione per tutta la durata della swapchain.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_depth_texturedeve essere abilitata prima di chiamare xrEnumerateDepthSwapchainImagesANDROID -
depthSwapchaindeve essere un handle XrDepthSwapchainANDROID valido -
depthImageCountOutputdeve essere un puntatore a un valoreuint32_t - Se
depthImageCapacityInputnon è0,depthImagesdeve essere un puntatore a un array di strutturedepthImageCapacityInputXrDepthSwapchainImageANDROID
Codici di ritorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_VALIDATION_FAILURE
La struttura XrDepthSwapchainImageANDROID è definita come:
typedef struct XrDepthSwapchainImageANDROID {
XrStructureType type;
void* next;
const float* rawDepthImage;
const uint8_t* rawDepthConfidenceImage;
const float* smoothDepthImage;
const uint8_t* smoothDepthConfidenceImage;
} XrDepthSwapchainImageANDROID;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture. Nessuna struttura di questo tipo è definita in OpenXR di base o in questa estensione.rawDepthImageèNULLo il puntatore alle immagini di profondità non elaborate per le visualizzazioni sinistra e destra allocate dal runtime. I valori sono espressi in metri. Valori speciali:0.0indica un pixel di profondità non valido o vuoto nella profondità grezza,Infindica una profondità nota che è effettivamente infinitamente lontana,rawDepthConfidenceImageèNULLo il puntatore alle immagini di confidenza della profondità grezza per le visualizzazioni sinistra e destra allocate dal runtime.smoothDepthImageèNULLo il puntatore alle immagini di profondità uniformi per le visualizzazioni sinistra e destra allocate dal runtime. I valori sono espressi in metri. Valori speciali:0.0indica un pixel di profondità non valido o vuoto nella profondità uniforme,Infindica una profondità nota che è effettivamente infinitamente lontana.smoothDepthConfidenceImageèNULLo il puntatore alle immagini di confidenza della profondità uniforme per le visualizzazioni sinistra e destra allocate dal runtime.
I puntatori del buffer delle immagini saranno validi solo durante la durata della swapchain. Una volta distrutta la swapchain, i puntatori verranno considerati sospesi.
XrDepthSwapchainImageANDROID rappresenta le immagini di profondità di un XrDepthSwapchainANDROID leggibile , allocate come descritto in XrDepthSwapchainCreateInfoANDROID :: resolution e XrDepthSwapchainCreateInfoANDROID :: createFlags durante la chiamata a xrCreateDepthSwapchainANDROID . Per ogni immagine di profondità:
- I valori delle immagini sono disposti in memoria in ordine di riga, senza spaziatura interna tra le righe.
- Il primo valore è in alto a sinistra e l'ultimo in basso a destra.
- Le dimensioni della memoria a cui punta sono determinate dal valore di xrEnumerateDepthSwapchainImagesANDROID e impostate da XrDepthSwapchainCreateInfoANDROID ::
resolutiondurante la chiamata di xrCreateDepthSwapchainANDROID . Ad esempio, se XrDepthSwapchainCreateInfoANDROID ::resolutionèXR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID, le immagini di profondità avranno dimensioni2*160*160*sizeof(float). - Il valore di
rawDepthImagedeve essereNULLse XrDepthSwapchainCreateInfoANDROID ::createFlagsnon includevaXR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID. - Il valore di
rawDepthConfidenceImagedeve essereNULLse XrDepthSwapchainCreateInfoANDROID ::createFlagsnon includevaXR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID. - Il valore di
smoothDepthImagedeve essereNULLse XrDepthSwapchainCreateInfoANDROID ::createFlagsnon includevaXR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID. - Il valore di
smoothDepthImagedeve essereNULLse XrDepthSwapchainCreateInfoANDROID ::createFlagsnon includevaXR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_depth_texturedeve essere abilitata prima di utilizzare XrDepthSwapchainImageANDROID -
typedeve essereXR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROID -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture
La funzione xrAcquireDepthSwapchainImagesANDROID è definita come:
XrResult xrAcquireDepthSwapchainImagesANDROID(
XrDepthSwapchainANDROID depthSwapchain,
const XrDepthAcquireInfoANDROID* acquireInfo,
XrDepthAcquireResultANDROID* acquireResult);
Descrizioni dei parametri
depthSwapchainè un handle XrDepthSwapchainANDROID per l'immagine di profondità.acquireInfoè un XrDepthAcquireInfoANDROID contenente informazioni su come acquisire l'immagine di profondità.acquireResultè l'XrDepthAcquireResultANDROID restituito contenente informazioni sull'immagine di profondità acquisita.
Le applicazioni possono utilizzare la funzione xrAcquireDepthSwapchainImagesANDROID per acquisire l'ultimo indice di swapchain disponibile, ovvero XrDepthAcquireResultANDROID :: acquiredIndex , nell'array XrDepthSwapchainImageANDROID enumerato da xrEnumerateDepthSwapchainImagesANDROID. XrDepthAcquireResultANDROID restituito contiene anche altre informazioni, come il campo visivo e la posa, necessarie per interpretare i dati di profondità. È sicuro leggere dallo slot acquisito nell'array di immagini fino alla successiva chiamata a xrAcquireDepthSwapchainImagesANDROID .
In una sessione deve essere presente una sola chiamata a xrAcquireDepthSwapchainImagesANDROID tra ogni coppia di chiamate xrBeginFrame e xrEndFrame corrispondenti.
- Il runtime potrebbe bloccare se le immagini della swapchain acquisite in precedenza sono ancora in uso.
- Il runtime deve restituire
XR_ERROR_CALL_ORDER_INVALIDse xrAcquireDepthSwapchainImagesANDROID viene chiamato prima di xrBeginFrame o dopo xrEndFrame . - Il runtime deve restituire
XR_ERROR_LIMIT_REACHEDse xrAcquireDepthSwapchainImagesANDROID viene chiamato più di una volta per frame, ovvero in una sessione in esecuzione, dopo una chiamata a xrBeginFrame a cui non è associato xrEndFrame. - Il runtime potrebbe restituire
XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROIDse i dati sulla profondità dell'ambiente non sono ancora disponibili. In questo caso, l'applicazione deve chiamare di nuovo xrAcquireDepthSwapchainImagesANDROID in un frame successivo.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_depth_texturedeve essere abilitata prima di chiamare xrAcquireDepthSwapchainImagesANDROID -
depthSwapchaindeve essere un handle XrDepthSwapchainANDROID valido -
acquireInfodeve essere un puntatore a una struttura XrDepthAcquireInfoANDROID valida -
acquireResultdeve essere un puntatore a una struttura XrDepthAcquireResultANDROID
Codici di ritorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_CALL_ORDER_INVALIDXR_ERROR_DEPTH_NOT_AVAILABLE_ANDROIDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
La struttura XrDepthAcquireInfoANDROID è definita come:
typedef struct XrDepthAcquireInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime displayTime;
} XrDepthAcquireInfoANDROID;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture. Nessuna struttura di questo tipo è definita in OpenXR di base o in questa estensione.spaceè un XrSpace che definisce il sistema di riferimento della posa restituita in XrDepthAcquireResultANDROID ::views.displayTimeè unXrTimeche specifica l'ora utilizzata per calcolare la posa per la posa restituita in XrDepthAcquireResultANDROID ::views. Le applicazioni devono superare il tempo di visualizzazione previsto per il frame corrente.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_depth_texturedeve essere abilitata prima di utilizzare XrDepthAcquireInfoANDROID -
typedeve essereXR_TYPE_DEPTH_ACQUIRE_INFO_ANDROID -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture -
spacedeve essere un handle XrSpace valido
La struttura XrDepthAcquireResultANDROID è definita come:
typedef struct XrDepthAcquireResultANDROID {
XrStructureType type;
const void* next;
uint32_t acquiredIndex;
XrTime exposureTimestamp;
XrDepthViewANDROID views[2];
} XrDepthAcquireResultANDROID;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture. Nessuna struttura di questo tipo è definita in OpenXR di base o in questa estensione.acquiredIndexè l'indice della texture acquisita nell'array XrDepthSwapchainImageANDROID enumerato da xrEnumerateDepthSwapchainImagesANDROID .exposureTimestampèXrTimeche specifica l'ora in cui è stata acquisita la mappa di profondità.viewsè un array di due XrDepthViewANDROID , uno per ogni occhio, dove l'indice 0 è l'occhio sinistro e l'indice 1 è l'occhio destro.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_depth_texturedeve essere abilitata prima di utilizzare XrDepthAcquireResultANDROID -
typedeve essereXR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROID -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture - Ogni elemento di
viewsdeve essere una struttura XrDepthViewANDROID valida
La struttura XrDepthViewANDROID è definita come:
typedef struct XrDepthViewANDROID {
XrStructureType type;
const void* next;
XrFovf fov;
XrPosef pose;
} XrDepthViewANDROID;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture. Nessuna struttura di questo tipo è definita in OpenXR di base o in questa estensione.fovè un XrFovf che specifica il campo visivo utilizzato per generare questa visualizzazione. La visualizzazione non viene mai invertita orizzontalmente o verticalmente.poseè un XrPosef che specifica la posa da cui è stata eseguita il rendering della mappa di profondità. Il sistema di riferimento è specificato in XrDepthAcquireInfoANDROID .
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_depth_texturedeve essere attivata prima di utilizzare XrDepthViewANDROID -
typedeve essereXR_TYPE_DEPTH_VIEW_ANDROID -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture
Codice di esempio per il monitoraggio della profondità
Il seguente codice di esempio mostra come acquisire immagini di profondità e utilizzare i valori di profondità per mappare le coordinate delle immagini di profondità nello spazio scenico.
XrInstance instance; // previously initialized
XrSystemId systemId; // previously initialized
XrSession session; // previously initialized
XrSpace stageSpace; // space created for XR_REFERENCE_SPACE_TYPE_STAGE.
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateDepthSwapchainANDROID xrCreateDepthSwapchainANDROID; // previously initialized
PFN_xrDestroyDepthSwapchainANDROID xrDestroyDepthSwapchainANDROID; // previously initialized
PFN_xrEnumerateDepthSwapchainImagesANDROID xrEnumerateDepthSwapchainImagesANDROID; // previously initialized
PFN_xrEnumerateDepthResolutionsANDROID xrEnumerateDepthResolutionsANDROID; // previously initialized
PFN_xrAcquireDepthSwapchainImagesANDROID xrAcquireDepthSwapchainImagesANDROID; // previously initialized
float tanf(float);
// Inspect system capability
XrSystemProperties properties{XR_TYPE_SYSTEM_PROPERTIES};
XrSystemDepthTrackingPropertiesANDROID depthTrackingProperties{XR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROID};
properties.next = &depthTrackingProperties;
CHK_XR(xrGetSystemProperties(instance, systemId, &properties));
if (!depthTrackingProperties.supportsDepthTracking) {
// depth tracking is not supported.
return;
}
// Query the supported depth resolution.
XrDepthCameraResolutionANDROID supportedDepthResolution;
uint32_t supportedResolutionCount = 0;
CHK_XR(xrEnumerateDepthResolutionsANDROID(
session, 1, &supportedResolutionCount, &supportedDepthResolution));
// Define metadata to access the raw and smooth depth along with confidences.
XrDepthSwapchainCreateInfoANDROID swapchainCreateInfo = {
.type = XR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROID,
.next = nullptr,
// Use the resolution supported by the runtime.
.resolution = supportedDepthResolution,
.createFlags =
XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID |
XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID |
XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID |
XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID,
};
XrDepthSwapchainANDROID depthSwapchain;
CHK_XR(xrCreateDepthSwapchainANDROID(
session, &swapchainCreateInfo, &depthSwapchain));
// Enumerate depth images.
uint32_t imageCountOutput = 0;
CHK_XR(xrEnumerateDepthSwapchainImagesANDROID(
depthSwapchain, 0, &imageCountOutput, nullptr));
std::vector<XrDepthSwapchainImageANDROID> depthImages(imageCountOutput);
for (int i = 0; i < imageCountOutput; i++) {
depthImages[i].type = XR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROID;
}
CHK_XR(xrEnumerateDepthSwapchainImagesANDROID(
depthSwapchain, imageCountOutput, &imageCountOutput, depthImages.data()));
while (1) {
// ...
// For every frame in frame loop
// ...
XrFrameState frameState; // previously returned from xrWaitFrame
const XrTime time = frameState.predictedDisplayTime;
XrDepthAcquireInfoANDROID acquireInfo = {
.type = XR_TYPE_DEPTH_ACQUIRE_INFO_ANDROID,
.space = stageSpace,
.displayTime = time
};
XrDepthAcquireResultANDROID acquireResult = {
.type = XR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROID,
};
CHK_XR(xrAcquireDepthSwapchainImagesANDROID(
depthSwapchain, &acquireInfo, &acquireResult));
// Each value in a depth image corresponds to a point in the real world.
// The sample code below shows how to find the stageSpace position of
// the point corresponding to a particular value in the depth image.
// For this sample code, assume we are using a right handed coordinate system
// with +X to the right, +Y up and -Z forward.
XrDepthSwapchainImageANDROID *image =
&depthImages[acquireResult.acquiredIndex];
// Assume supported resolution is XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID.
const int imageResolution = 160;
int imageY = 80; // value in [0, imageResolution)
int imageX = 80; // value in [0, imageResolution)
// Get depth value from left eye.
// A right depth value is obtained with the following expression:
// depthR = image->rawDepthImage[imageResolution*imageResolution+i*imageResolution+j]
float depthL = image->rawDepthImage[imageY*imageResolution + imageX];
XrDepthViewANDROID viewL = acquireResult.views[0];
float tanL = tanf(viewL.fov.angleLeft);
float tanR = tanf(viewL.fov.angleRight);
float tanU = tanf(viewL.fov.angleUp);
float tanD = tanf(viewL.fov.angleDown);
float s = (imageX + 0.5f) / (float)imageResolution;
float t = (imageY + 0.5f) / (float)imageResolution;
// Calculate the depth camera space position of the point
// corresponding to this depth value.
XrVector3f posInCameraSpace;
posInCameraSpace.z = -depthL;
posInCameraSpace.x = (tanL + (tanR - tanL)*s)*depthL;
posInCameraSpace.y = (tanD + (tanU - tanD)*t)*depthL;
XrPosef depthCameraPoseL = viewL.pose;
// Transform posInCameraSpace by depthCameraPoseL
// ...
// Finish frame loop
// ...
}
Nuovi tipi di oggetti
Nuovi comandi
- xrAcquireDepthSwapchainImagesANDROID
- xrCreateDepthSwapchainANDROID
- xrDestroyDepthSwapchainANDROID
- xrEnumerateDepthResolutionsANDROID
- xrEnumerateDepthSwapchainImagesANDROID
Nuove strutture
- XrDepthAcquireInfoANDROID
- XrDepthAcquireResultANDROID
- XrDepthSwapchainCreateInfoANDROID
- XrDepthSwapchainImageANDROID
- XrDepthViewANDROID
Estensione di XrSystemProperties :
Nuovi enum
Nuove maschere di bit
Nuove costanti enum
XR_ANDROID_DEPTH_TEXTURE_EXTENSION_NAMEXR_ANDROID_depth_texture_SPEC_VERSIONEstensione di XrObjectType :
XR_OBJECT_TYPE_DEPTH_SWAPCHAIN_ANDROID
Estensione di XrResult :
XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROID
Estensione di XrStructureType :
XR_TYPE_DEPTH_ACQUIRE_INFO_ANDROIDXR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROIDXR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROIDXR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROIDXR_TYPE_DEPTH_VIEW_ANDROIDXR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROID
Problemi
Cronologia delle versioni
Revisione 1, 09/09/2024 (Levana Chen)
- Descrizione iniziale dell'estensione