XR_ANDROID_depth_texture
String de nome
XR_ANDROID_depth_texture
Tipo de extensão
Extensão de instância
Número da extensão registrada
703
Revisão
1
Status de ratificação
Não ratificado
Dependências de extensão e versão
Data da última modificação
2024-09-11
Status do IP
Não há reivindicações de IP conhecidas.
Colaboradores
Sushant Kulkarni, Google
Cairn Overturf, Google
Spencer Quin, Google
Levana Chen, Google
Visão geral
Essa extensão permite que o aplicativo solicite mapas de profundidade do ambiente real ao redor do headset e consulte as resoluções de profundidade compatíveis na criação.
Essa extensão tem como objetivo expor a profundidade bruta e suave para oclusão, testes de ocorrência e outras tarefas específicas que aproveitam a geometria precisa da cena, por exemplo, detecção de rostos falsificados.
Observação
Os mapas de profundidade são gerados pelo tempo de execução e compartilhados com o aplicativo usando XrDepthSwapchainANDROID . O tempo de execução não pode mudar as resoluções de imagem de profundidade retornadas por xrEnumerateDepthResolutionsANDROID durante o ciclo de vida do aplicativo.
Permissões
Essa extensão expõe uma textura de profundidade com redução de resolução para mitigar problemas relacionados a informações de identificação pessoal (PII). Os aplicativos Android precisam ter a permissão android.permission.SCENE_UNDERSTANDING_FINE listada no manifesto, já que essa extensão expõe a geometria do ambiente. A permissão android.permission.SCENE_UNDERSTANDING_FINE é considerada perigosa. O aplicativo precisa solicitar a permissão no momento da execução para usar estas funções:
(nível de proteção: perigoso)
Inspecionar a capacidade do sistema
A estrutura XrSystemDepthTrackingPropertiesANDROID é definida da seguinte forma:
typedef struct XrSystemDepthTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsDepthTracking;
} XrSystemDepthTrackingPropertiesANDROID;
Descrições de membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas é definida no OpenXR principal ou nesta extensão.supportsDepthTrackingé umXrBool32que indica se o sistema atual é compatível com o rastreamento de profundidade.
Um aplicativo pode inspecionar se o sistema é capaz de rastrear a profundidade estendendo o XrSystemProperties com a estrutura XrSystemDepthTrackingPropertiesANDROID ao chamar xrGetSystemProperties .
Se e somente se um tempo de execução retornar XR_FALSE para supportsDepthTracking , o tempo de execução deverá retornar XR_ERROR_FEATURE_UNSUPPORTED de xrCreateDepthSwapchainANDROID .
Uso válido (implícito)
- A extensão
XR_ANDROID_depth_textureprecisa ser ativada antes de usar XrSystemDepthTrackingPropertiesANDROID. -
typeprecisa serXR_TYPE_SYSTEM_DEPTH_TRACKING_PROPERTIES_ANDROID -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas.
Resoluções de profundidade da consulta
A função xrEnumerateDepthResolutionsANDROID é definida como:
XrResult xrEnumerateDepthResolutionsANDROID(
XrSession session,
uint32_t resolutionCapacityInput,
uint32_t* resolutionCountOutput,
XrDepthCameraResolutionANDROID* resolutions);
Descrições dos parâmetros
sessioné a XrSession que enumera as resoluções de profundidade compatíveis.resolutionCapacityInputé a capacidade doresolutionsou 0 para recuperar a capacidade necessária.resolutionCountOutputé um ponteiro para a contagem deuint64_tresolutionsgravados ou para a capacidade necessária casoresolutionCapacityInputseja insuficiente.resolutionsé um ponteiro para uma matriz de XrDepthCameraResolutionANDROID , mas pode serNULLseresolutionCapacityInputfor0.- Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada de como recuperar o tamanho
resolutionsnecessário.
xrEnumerateDepthResolutionsANDROID enumera as resoluções de profundidade compatíveis com a sessão atual. As resoluções de profundidade devem estar em ordem da preferência de tempo de execução mais alta para a mais baixa. O aplicativo deve usar a preferência mais alta que ele oferece para otimizar a performance e a qualidade.
Os runtimes precisam sempre retornar conteúdos de buffer idênticos dessa enumeração durante a vida útil da sessão.
Uso válido (implícito)
- A extensão
XR_ANDROID_depth_textureprecisa ser ativada antes de chamar xrEnumerateDepthResolutionsANDROID. -
sessionprecisa ser um identificador XrSession válido -
resolutionCountOutputprecisa ser um ponteiro para um valoruint32_t. - Se
resolutionCapacityInputnão for0,resolutionsprecisa ser um ponteiro para uma matriz de valoresresolutionCapacityInputXrDepthCameraResolutionANDROID.
Códigos de retorno
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
O enum XrDepthCameraResolutionANDROID descreve as resoluções de profundidade compatíveis ao criar um 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;
Descrições de enumeradores
XR_DEPTH_CAMERA_RESOLUTION_80x80_ANDROID— A resolução das imagens de profundidade e confiança é de 80 x 80.XR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID: a resolução das imagens de profundidade e confiança é de 160 x 160.XR_DEPTH_CAMERA_RESOLUTION_320x320_ANDROID: a resolução das imagens de profundidade e confiança é de 320 x 320.
Criar uma cadeia de troca de profundidade
XR_DEFINE_HANDLE(XrDepthSwapchainANDROID)
Um XrDepthSwapchainANDROID é um identificador de cadeia de troca de profundidade.
A função xrCreateDepthSwapchainANDROID é definida como:
XrResult xrCreateDepthSwapchainANDROID(
XrSession session,
const XrDepthSwapchainCreateInfoANDROID* createInfo,
XrDepthSwapchainANDROID* swapchain);
Descrições dos parâmetros
sessioné o XrSession que cria a cadeia de troca de profundidade.createInfoé um ponteiro para uma estrutura XrDepthSwapchainCreateInfoANDROID que contém parâmetros a serem usados para criar a cadeia de troca.swapchainé um ponteiro para um identificador em que o XrDepthSwapchainANDROID criado é retornado.
O aplicativo pode usar a função xrCreateDepthSwapchainANDROID para criar uma cadeia de troca de profundidade que gerencia imagens de profundidade e confiança.
- O ambiente de execução precisa retornar
XR_ERROR_FEATURE_UNSUPPORTEDse o sistema não for compatível com o rastreamento de profundidade. - O tempo de execução precisa retornar
XR_ERROR_PERMISSION_INSUFFICIENTse as permissões necessárias não tiverem sido concedidas ao app que fez a chamada. - O ambiente de execução precisa retornar
XR_ERROR_VALIDATION_FAILUREse a resolução de profundidade especificada em XrDepthSwapchainCreateInfoANDROID não for compatível. - O tempo de execução deve criar imagens de confiança de profundidade somente quando os bits correspondentes estiverem definidos para
createInfona criação do swapchain.
O identificador de cadeia de troca de profundidade retornado pode ser usado posteriormente em chamadas de API. O identificador XrDepthSwapchainANDROID precisa ser liberado pela função xrDestroyDepthSwapchainANDROID.
Uso válido (implícito)
- A extensão
XR_ANDROID_depth_textureprecisa ser ativada antes de chamar xrCreateDepthSwapchainANDROID. -
sessionprecisa ser um identificador XrSession válido -
createInfoprecisa ser um ponteiro para uma estrutura XrDepthSwapchainCreateInfoANDROID válida -
swapchainprecisa ser um ponteiro para um identificador XrDepthSwapchainANDROID.
Códigos de retorno
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
A estrutura XrDepthSwapchainCreateInfoANDROID é definida como:
typedef struct XrDepthSwapchainCreateInfoANDROID {
XrStructureType type;
const void* next;
XrDepthCameraResolutionANDROID resolution;
XrDepthSwapchainCreateFlagsANDROID createFlags;
} XrDepthSwapchainCreateInfoANDROID;
Descrições de membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas é definida no OpenXR principal ou nesta extensão.resolutioné a XrDepthCameraResolutionANDROID com que as texturas de profundidade e confiança são criadas.createFlagsé uma ou mais XrDepthSwapchainCreateFlagsANDROID .
A estrutura XrDepthSwapchainCreateInfoANDROID oferece opções de criação para XrDepthSwapchainANDROID quando transmitida para xrCreateDepthSwapchainANDROID .
Uso válido (implícito)
- A extensão
XR_ANDROID_depth_textureprecisa ser ativada antes de usar XrDepthSwapchainCreateInfoANDROID. -
typeprecisa serXR_TYPE_DEPTH_SWAPCHAIN_CREATE_INFO_ANDROID -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas. -
resolutionprecisa ser um valor XrDepthCameraResolutionANDROID válido -
createFlagsprecisa ser uma combinação válida de valores XrDepthSwapchainCreateFlagBitsANDROID. -
createFlagsnão pode ser0
O XrDepthSwapchainCreateFlagsANDROID especifica opções de criação para XrDepthSwapchainANDROID .
typedef XrFlags64 XrDepthSwapchainCreateFlagsANDROID;
Os bits válidos para XrDepthSwapchainCreateFlagsANDROID são definidos por XrDepthSwapchainCreateFlagBitsANDROID , que é especificado como:
// 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;
Descrições de flags
XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID: indica que a cadeia de troca vai fornecer imagens de profundidade suaves.XR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID: indica que a cadeia de troca vai fornecer imagens de confiança de profundidade suaves.XR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID: indica que a cadeia de troca vai fornecer imagens de profundidade bruta.XR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID: indica que a cadeia de troca vai fornecer imagens de confiança de profundidade bruta.
A função xrDestroyDepthSwapchainANDROID é definida como:
XrResult xrDestroyDepthSwapchainANDROID(
XrDepthSwapchainANDROID swapchain);
Descrições dos parâmetros
swapchainé um identificador XrDepthSwapchainANDROID criado anteriormente por xrCreateDepthSwapchainANDROID .
A função xrDestroyDepthSwapchainANDROID destrói a cadeia de troca de profundidade. Depois dessa chamada, o tempo de execução pode liberar toda a memória e os recursos relacionados.
Uso válido (implícito)
- A extensão
XR_ANDROID_depth_textureprecisa ser ativada antes de chamar xrDestroyDepthSwapchainANDROID. -
swapchainprecisa ser um identificador XrDepthSwapchainANDROID válido
Concorrência segura
- O acesso a
swapchaine a qualquer identificador filho precisa ser sincronizado externamente.
Códigos de retorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
Acessar texturas de profundidade
A função xrEnumerateDepthSwapchainImagesANDROID é definida como:
XrResult xrEnumerateDepthSwapchainImagesANDROID(
XrDepthSwapchainANDROID depthSwapchain,
uint32_t depthImageCapacityInput,
uint32_t* depthImageCountOutput,
XrDepthSwapchainImageANDROID* depthImages);
Descrições dos parâmetros
depthSwapchainé o XrDepthSwapchainANDROID para receber imagens.depthImageCapacityInputé a capacidade da matrizdepthImagesou 0 para indicar uma solicitação de recuperação da capacidade necessária.depthImageCountOutputé um ponteiro para a contagem dedepthImagesgravados ou para a capacidade necessária casodepthImageCapacityInputseja insuficiente.depthImagesé um ponteiro para uma matriz de estruturas XrDepthSwapchainImageANDROID. Ele pode serNULLsedepthImageCapacityInputfor 0.- Consulte a seção Parâmetros de tamanho do buffer para uma descrição detalhada de como recuperar o tamanho
depthImagesnecessário.
xrEnumerateDepthSwapchainImagesANDROID preenche uma matriz de estruturas XrDepthSwapchainImageANDROID. Os recursos precisam ser constantes e válidos durante o ciclo de vida do XrDepthSwapchainANDROID . Essa função se comporta de maneira análoga a xrEnumerateSwapchainImages .
O tempo de execução deve sempre retornar conteúdos de buffer idênticos dessa enumeração durante o ciclo de vida da cadeia de troca.
Uso válido (implícito)
- A extensão
XR_ANDROID_depth_textureprecisa ser ativada antes de chamar xrEnumerateDepthSwapchainImagesANDROID -
depthSwapchainprecisa ser um identificador XrDepthSwapchainANDROID válido -
depthImageCountOutputprecisa ser um ponteiro para um valoruint32_t. - Se
depthImageCapacityInputnão for0,depthImagesprecisa ser um ponteiro para uma matriz de estruturasdepthImageCapacityInputXrDepthSwapchainImageANDROID.
Códigos de retorno
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
A estrutura XrDepthSwapchainImageANDROID é definida como:
typedef struct XrDepthSwapchainImageANDROID {
XrStructureType type;
void* next;
const float* rawDepthImage;
const uint8_t* rawDepthConfidenceImage;
const float* smoothDepthImage;
const uint8_t* smoothDepthConfidenceImage;
} XrDepthSwapchainImageANDROID;
Descrições de membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas é definida no OpenXR principal ou nesta extensão.rawDepthImageéNULLou o ponteiro para imagens de profundidade bruta das visualizações esquerda e direita alocadas pelo tempo de execução. Os valores estão em metros. Valores especiais:0.0indica um pixel de profundidade inválido ou vazio na profundidade bruta,Infindica uma profundidade conhecida que está efetivamente infinitamente distante,rawDepthConfidenceImageéNULLou o ponteiro para imagens de confiança de profundidade bruta para as visualizações esquerda e direita alocadas pelo tempo de execução.smoothDepthImageéNULLou o ponteiro para imagens de profundidade suavizadas para as visualizações esquerda e direita alocadas pelo tempo de execução. Os valores estão em metros. Valores especiais:0.0indica um pixel de profundidade inválido ou vazio na profundidade suave,Infindica uma profundidade conhecida que está efetivamente infinitamente distante.smoothDepthConfidenceImageéNULLou o ponteiro para imagens de confiança de profundidade suave para as visualizações esquerda e direita alocadas pelo tempo de execução.
Os ponteiros de buffer de imagem só serão válidos durante a vida útil da cadeia de troca. Quando a cadeia de troca for destruída, os ponteiros serão considerados pendentes.
XrDepthSwapchainImageANDROID representa as imagens de profundidade de um XrDepthSwapchainANDROID legível , alocado conforme descrito em XrDepthSwapchainCreateInfoANDROID :: resolution e XrDepthSwapchainCreateInfoANDROID :: createFlags ao chamar xrCreateDepthSwapchainANDROID . Para cada imagem de profundidade:
- Os valores de imagem são organizados na memória em ordem de linha principal, sem padding entre as linhas.
- O primeiro valor é o canto superior esquerdo, e o último é o canto inferior direito.
- O tamanho da memória apontada é determinado pelo valor de xrEnumerateDepthSwapchainImagesANDROID e definido por XrDepthSwapchainCreateInfoANDROID ::
resolutionao chamar xrCreateDepthSwapchainANDROID . Por exemplo, se XrDepthSwapchainCreateInfoANDROID ::resolutionforXR_DEPTH_CAMERA_RESOLUTION_160x160_ANDROID, as imagens de profundidade terão o tamanho2*160*160*sizeof(float). - O valor de
rawDepthImageprecisa serNULLse XrDepthSwapchainCreateInfoANDROID ::createFlagsnão incluirXR_DEPTH_SWAPCHAIN_CREATE_RAW_DEPTH_IMAGE_BIT_ANDROID. - O valor de
rawDepthConfidenceImageprecisa serNULLse XrDepthSwapchainCreateInfoANDROID ::createFlagsnão incluirXR_DEPTH_SWAPCHAIN_CREATE_RAW_CONFIDENCE_IMAGE_BIT_ANDROID. - O valor de
smoothDepthImageprecisa serNULLse XrDepthSwapchainCreateInfoANDROID ::createFlagsnão incluirXR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_DEPTH_IMAGE_BIT_ANDROID. - O valor de
smoothDepthImageprecisa serNULLse XrDepthSwapchainCreateInfoANDROID ::createFlagsnão incluirXR_DEPTH_SWAPCHAIN_CREATE_SMOOTH_CONFIDENCE_IMAGE_BIT_ANDROID.
Uso válido (implícito)
- A extensão
XR_ANDROID_depth_textureprecisa ser ativada antes de usar XrDepthSwapchainImageANDROID. -
typeprecisa serXR_TYPE_DEPTH_SWAPCHAIN_IMAGE_ANDROID -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas.
A função xrAcquireDepthSwapchainImagesANDROID é definida como:
XrResult xrAcquireDepthSwapchainImagesANDROID(
XrDepthSwapchainANDROID depthSwapchain,
const XrDepthAcquireInfoANDROID* acquireInfo,
XrDepthAcquireResultANDROID* acquireResult);
Descrições dos parâmetros
depthSwapchainé um handle XrDepthSwapchainANDROID para a imagem de profundidade.acquireInfoé um XrDepthAcquireInfoANDROID que contém informações sobre como adquirir a imagem de profundidade.acquireResulté o XrDepthAcquireResultANDROID retornado que contém informações sobre a imagem de profundidade adquirida.
Os aplicativos podem usar a função xrAcquireDepthSwapchainImagesANDROID para adquirir o índice de imagem de cadeia de troca mais recente disponível, ou seja, XrDepthAcquireResultANDROID :: acquiredIndex, na matriz XrDepthSwapchainImageANDROID enumerada por xrEnumerateDepthSwapchainImagesANDROID. O XrDepthAcquireResultANDROID retornado também contém outras informações, como o campo de visão e a postura necessários para interpretar os dados de profundidade. É seguro ler do slot adquirido na matriz de imagens até a próxima chamada para xrAcquireDepthSwapchainImagesANDROID .
Não pode haver mais de uma chamada para xrAcquireDepthSwapchainImagesANDROID entre qualquer par de chamadas correspondentes xrBeginFrame e xrEndFrame em uma sessão.
- O tempo de execução pode bloquear se as imagens de cadeia de troca adquiridas anteriormente ainda estiverem sendo usadas por ele.
- O tempo de execução deve retornar
XR_ERROR_CALL_ORDER_INVALIDse xrAcquireDepthSwapchainImagesANDROID for chamado antes de xrBeginFrame ou depois de xrEndFrame . - O tempo de execução precisa retornar
XR_ERROR_LIMIT_REACHEDse xrAcquireDepthSwapchainImagesANDROID for chamado mais de uma vez por frame, ou seja, em uma sessão em execução, após uma chamada para xrBeginFrame que não teve um xrEndFrame associado. - O tempo de execução pode retornar
XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROIDse os dados de profundidade do ambiente ainda não estiverem disponíveis. Se isso acontecer, o aplicativo deverá chamar xrAcquireDepthSwapchainImagesANDROID novamente em um frame posterior.
Uso válido (implícito)
- A extensão
XR_ANDROID_depth_textureprecisa ser ativada antes de chamar xrAcquireDepthSwapchainImagesANDROID -
depthSwapchainprecisa ser um identificador XrDepthSwapchainANDROID válido -
acquireInfoprecisa ser um ponteiro para uma estrutura XrDepthAcquireInfoANDROID válida -
acquireResultprecisa ser um ponteiro para uma estrutura XrDepthAcquireResultANDROID.
Códigos de retorno
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
A estrutura XrDepthAcquireInfoANDROID é definida da seguinte maneira:
typedef struct XrDepthAcquireInfoANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime displayTime;
} XrDepthAcquireInfoANDROID;
Descrições de membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas é definida no OpenXR principal ou nesta extensão.spaceé um XrSpace que define o frame de referência da postura retornada em XrDepthAcquireResultANDROID ::views.displayTimeé umXrTimeque especifica o tempo usado para calcular a postura da postura retornada em XrDepthAcquireResultANDROID ::views. Os aplicativos devem transmitir o tempo de exibição previsto para o frame atual.
Uso válido (implícito)
- A extensão
XR_ANDROID_depth_textureprecisa ser ativada antes de usar XrDepthAcquireInfoANDROID. -
typeprecisa serXR_TYPE_DEPTH_ACQUIRE_INFO_ANDROID -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas. -
spaceprecisa ser um identificador XrSpace válido
A estrutura XrDepthAcquireResultANDROID é definida como:
typedef struct XrDepthAcquireResultANDROID {
XrStructureType type;
const void* next;
uint32_t acquiredIndex;
XrTime exposureTimestamp;
XrDepthViewANDROID views[2];
} XrDepthAcquireResultANDROID;
Descrições de membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas é definida no OpenXR principal ou nesta extensão.acquiredIndexé o índice da textura adquirida na matriz XrDepthSwapchainImageANDROID enumerada por xrEnumerateDepthSwapchainImagesANDROID .exposureTimestampé oXrTimeque especifica o momento em que o mapa de profundidade foi capturado.viewsé uma matriz de dois XrDepthViewANDROID, um para cada olho. O índice 0 é o olho esquerdo e o índice 1 é o olho direito.
Uso válido (implícito)
- A extensão
XR_ANDROID_depth_textureprecisa ser ativada antes de usar XrDepthAcquireResultANDROID. -
typeprecisa serXR_TYPE_DEPTH_ACQUIRE_RESULT_ANDROID -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas. - Qualquer elemento de
viewsprecisa ser uma estrutura XrDepthViewANDROID válida.
A estrutura XrDepthViewANDROID é definida como:
typedef struct XrDepthViewANDROID {
XrStructureType type;
const void* next;
XrFovf fov;
XrPosef pose;
} XrDepthViewANDROID;
Descrições de membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas é definida no OpenXR principal ou nesta extensão.fové um XrFovf que especifica o campo de visão usado para gerar essa visualização. A visualização nunca é invertida na horizontal nem na vertical.poseé um XrPosef que especifica a postura de renderização do mapa de profundidade. O frame de referência é especificado em XrDepthAcquireInfoANDROID .
Uso válido (implícito)
- A extensão
XR_ANDROID_depth_textureprecisa ser ativada antes de usar XrDepthViewANDROID. -
typeprecisa serXR_TYPE_DEPTH_VIEW_ANDROID -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas.
Exemplo de código para rastreamento de profundidade
O exemplo de código a seguir demonstra como adquirir imagens de profundidade e usar valores de profundidade para mapear coordenadas de imagens de profundidade para o espaço da cena.
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
// ...
}
Novos tipos de objeto
Novos comandos
- xrAcquireDepthSwapchainImagesANDROID
- xrCreateDepthSwapchainANDROID
- xrDestroyDepthSwapchainANDROID
- xrEnumerateDepthResolutionsANDROID
- xrEnumerateDepthSwapchainImagesANDROID
Novas estruturas
- XrDepthAcquireInfoANDROID
- XrDepthAcquireResultANDROID
- XrDepthSwapchainCreateInfoANDROID
- XrDepthSwapchainImageANDROID
- XrDepthViewANDROID
Extensão de XrSystemProperties :
Novos tipos enumerados
Novas máscaras de bits
Novas constantes de enumeração
XR_ANDROID_DEPTH_TEXTURE_EXTENSION_NAMEXR_ANDROID_depth_texture_SPEC_VERSIONExtensão de XrObjectType :
XR_OBJECT_TYPE_DEPTH_SWAPCHAIN_ANDROID
Extensão de XrResult :
XR_ERROR_DEPTH_NOT_AVAILABLE_ANDROID
Extensão de 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
Problemas
Histórico de versões
Revisão 1, 09/09/2024 (Levana Chen)
- Descrição inicial da extensão