XR_EXT_spatial_mesh_tracking
String de nome
XR_EXT_spatial_mesh_tracking
Tipo de extensão
Extensão de instância
Número de ramal registrado
784
Revisão
1
Status de ratificação
Não ratificado
Dependências de extensão e versão
XR_EXT_spatial_entity
Colaboradores
Nihav Jain, Google
Natalie Fleury, Meta
Yuichi Taguchi, Meta
Ron Bessems, Meta
Yin Li, Microsoft
Jimmy Alamparambil, ByteDance
Zhipeng Liu, ByteDance
Jun Yan, ByteDance
Visão geral
Essa extensão se baseia em XR_EXT_spatial_entity e define recursos espaciais para rastrear a malha de triângulos do ambiente. A malha de triângulos fornecida pelo recurso definido nesta extensão é destinada ao uso por aplicativos para determinar colisões do conteúdo virtual com o ambiente.
Capacidade de rastreamento de malha espacial
Essa extensão define XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT como um recurso espacial para rastrear a malha triangular do ambiente. O rastreamento da malha de entidades como planos e objetos não é coberto por esse recurso e precisa ser indicado pela enumeração do componente XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT para os respectivos recursos que rastreiam essas entidades.
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT é usado para fornecer uma malha estanque e uma não estanque ao aplicativo, dependendo dos recursos do ambiente de execução e da configuração selecionada pelo aplicativo.
Uma malha estanque é aquela em que as lacunas e as regiões não digitalizadas de todos os tamanhos foram preenchidas e formam uma malha estanque dentro de um determinado bloco volumétrico. Como o nome sugere, se um aplicativo encher uma malha estanque com água, não deve haver vazamento de água do volume estanque. Tornar uma malha digitalizada estanque geralmente requer muita computação, embora alguns ambientes de execução compensem esse custo processando a malha com antecedência.
Suporte ao ambiente de execução
Se o ambiente de execução for compatível com o rastreamento da malha triangular do ambiente, ele precisa indicar isso enumerando XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT em xrEnumerateSpatialCapabilitiesEXT .
Há três habilidades possíveis de um ambiente de execução que oferece suporte a XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT:
- O ambiente de execução só é compatível com o rastreamento de malha não estanque. Nesse caso, o ambiente de execução enumera
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXTem xrEnumerateSpatialCapabilitiesEXT, mas não pode enumerarXR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXTem xrEnumerateSpatialCapabilityFeaturesEXT (consulte Rastrear uma malha estanque). - O ambiente de execução é compatível com o rastreamento de malha estanque e não estanque. Nesse caso, o ambiente de execução enumera
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXTem xrEnumerateSpatialCapabilitiesEXT e precisa também enumerarXR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXTem xrEnumerateSpatialCapabilityFeaturesEXT (consulte Rastreamento de uma malha estanque) para ativar solicitações de rastreamento de malha estanque do aplicativo. - O ambiente de execução só é compatível com o rastreamento de malha estanque. Nesse caso, o ambiente de execução enumera
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXTem xrEnumerateSpatialCapabilitiesEXT e precisa também enumerarXR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXTem xrEnumerateSpatialCapabilityFeaturesEXT (consulte Rastreamento de uma malha estanque) para indicar ao aplicativo que ele oferece suporte ao rastreamento de malha estanque. Nesse caso específico, o ambiente de execução sempre retorna uma malha estanque ao aplicativo, independentemente da configuração deXR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT.
Configuração
A estrutura XrSpatialCapabilityConfigurationMeshTrackingEXT é definida como:
typedef struct XrSpatialCapabilityConfigurationMeshTrackingEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationMeshTrackingEXT;
Descrições dos membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas.capabilityé um XrSpatialCapabilityEXT e precisa serXR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT.enabledComponentCounté umuint32_tque descreve a contagem de elementos na matrizenabledComponents.enabledComponentsé um ponteiro para uma matriz de XrSpatialComponentTypeEXT .
Os aplicativos podem ativar o recurso espacial XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT incluindo um ponteiro para uma estrutura XrSpatialCapabilityConfigurationMeshTrackingEXT em XrSpatialContextCreateInfoEXT :: capabilityConfigs .
O ambiente de execução precisa retornar XR_ERROR_VALIDATION_FAILURE se capability não for XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT .
Uso válido (implícito)
- A extensão
XR_EXT_spatial_mesh_trackingprecisa ser ativada antes de usar XrSpatialCapabilityConfigurationMeshTrackingEXT. -
typeprecisa serXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_MESH_TRACKING_EXT -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas . Consulte também: XrSpatialFeatureTrackWatertightMeshEXT -
capabilityprecisa ser um valor XrSpatialCapabilityEXT válido -
enabledComponentsprecisa ser um ponteiro para uma matriz de valoresenabledComponentCountválidos de XrSpatialComponentTypeEXT - O parâmetro
enabledComponentCountprecisa ser maior que0.
Como rastrear uma malha estanque
A estrutura XrSpatialFeatureTrackWatertightMeshEXT é definida como:
typedef struct XrSpatialFeatureTrackWatertightMeshEXT {
XrStructureType type;
const void* next;
XrBool32 enableWatertightMeshTracking;
} XrSpatialFeatureTrackWatertightMeshEXT;
Descrições dos membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas.enableWatertightMeshTrackingindica se o ambiente de execução precisa calcular uma malha estanque para o ambiente verificado.
Os ambientes de execução que oferecem suporte ao rastreamento de malha estanque precisam enumerar XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT em xrEnumerateSpatialCapabilityFeaturesEXT . O recurso XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT permite que os aplicativos ativem o rastreamento de malha estanque e aceitem explicitamente qualquer computação adicional que a geração de malha estanque possa incorrer.
Se XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT for enumerado por xrEnumerateSpatialCapabilityFeaturesEXT para um determinado recurso, o aplicativo poderá encadear XrSpatialFeatureTrackWatertightMeshEXT à estrutura de configuração correspondente desse recurso para indicar se ele quer que a malha rastreada seja estanque ou não. Se o aplicativo definir enableWatertightMeshTracking como XR_TRUE , o ambiente de execução precisará calcular e fornecer ao aplicativo uma malha estanque do ambiente. Se o aplicativo definir enableWatertightMeshTracking como XR_FALSE, a malha rastreada poderá ainda ser estanque se o ambiente de execução oferecer suporte apenas ao rastreamento de malha estanque, por exemplo, nos casos em que o ambiente de execução fornece uma malha processada de um ambiente pré-verificado.
Uso válido (implícito)
- A extensão
XR_EXT_spatial_mesh_trackingprecisa ser ativada antes de usar XrSpatialFeatureTrackWatertightMeshEXT -
typeprecisa serXR_TYPE_SPATIAL_FEATURE_TRACK_WATERTIGHT_MESH_EXT -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas
Fluxo do aplicativo
O diagrama abaixo mostra como um aplicativo pode configurar o contexto espacial se quiser rastrear uma malha estanque do ambiente.
Sim
Sim
O app precisa de
uma malha hermética
O app precisa de...
Sim
Sim
Não
Não
O ambiente de execução
oferece suporte ao recurso de "rastreamento de malha"
Ambiente de execução...
Sim
Sim
Não
Não
O ambiente de execução
é compatível com o recurso "rastrear malha estanque"
Ambiente de execução...
O app cria um contexto espacial com o recurso "mesh tracking capability" E "track watertight mesh"
O app cria...
O app lida com a falta de suporte a recursos no ambiente de execução atual
O app lida com a falta de...
O app processa a malha rastreada para criar uma malha estanque, talvez com a ajuda do usuário para corrigir os furos na malha.
O app processa a tr... O texto não é SVG, não é possível exibir
Figura 29. Fluxo do app para solicitar uma malha estanque
Componentes garantidos
Um ambiente de execução compatível com XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT precisa fornecer os seguintes componentes espaciais como componentes garantidos de todas as entidades descobertas por essa capacidade e precisa enumerá-los em xrEnumerateSpatialCapabilityComponentTypesEXT :
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT
Componente 3D limitado
O componente 3D limitado fornece o centro e as extensões da entidade em que está. Os dados fornecidos por esse componente facilitam a remoção de entidades que estão fora do tronco de visualização dos aplicativos.
Consulte 3D limitado para mais detalhes.
Componente de malha 3D
O componente de malha 3D fornece a malha 3D da entidade em que está. Consulte Malha 3D para mais detalhes.
Segmentação volumétrica (divisão em partes)
O ambiente de execução pode segmentar a malha em blocos volumétricos (partes) para facilitar a remoção dos blocos de malha fora do tronco de visualização pelos aplicativos. Nesse caso, o ambiente de execução precisa tratar cada bloco volumétrico como uma entidade separada e ter o conjunto de Componentes Garantidos em cada uma dessas entidades (bloco volumétrico). Se o ambiente de execução estiver fornecendo uma malha estanque dessa maneira, cada bloco volumétrico individualmente não será estanque, mas um grupo de blocos formará uma malha estanque. Nesse cenário, o ambiente de execução precisa adicionar o componente XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT em cada entidade (bloco volumétrico), e o valor da entidade pai nos blocos que formam uma malha estanque precisa ser o mesmo. Isso permite que o aplicativo identifique quais blocos formam uma malha estanque.
As malhas de blocos volumétricos adjacentes podem compartilhar vértices, mas os triângulos de um bloco volumétrico não podem se sobrepor aos triângulos do volume adjacente.
Componentes opcionais
Normais da malha
Dados do componente
O XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT usa XrSpatialBufferEXT para os dados. XrSpatialBufferEXT :: bufferId representa o buffer que contém as normais de vértice da malha da entidade em que esse componente está. O XrSpatialBufferEXT :: bufferType precisa ser XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT . Uma entidade que tem XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT precisa ter também o XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT. As normais fornecidas por esse componente precisam corresponder aos vértices fornecidos no XrSpatialMeshDataEXT :: vertexBuffer do componente XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT.
Estrutura de lista de componentes para consultar dados
A estrutura XrSpatialComponentMesh3DNormalsListEXT é definida como:
typedef struct XrSpatialComponentMesh3DNormalsListEXT {
XrStructureType type;
void* next;
uint32_t meshNormalsCount;
XrSpatialBufferEXT* meshNormals;
} XrSpatialComponentMesh3DNormalsListEXT;
Descrições dos membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma estrutura desse tipo é definida no OpenXR principal ou nesta extensão.meshNormalsCounté umuint32_tque descreve a contagem de elementos na matrizmeshNormals.meshNormalsé uma matriz de XrVector3f .
O ambiente de execução precisa retornar XR_ERROR_VALIDATION_FAILURE de xrQuerySpatialComponentDataEXT se XrSpatialComponentMesh3DNormalsListEXT estiver na próxima cadeia de XrSpatialComponentDataQueryResultEXT :: next, mas XrSpatialComponentDataQueryConditionEXT :: componentTypeCount não for zero e XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT não estiver incluído em XrSpatialComponentDataQueryConditionEXT :: componentTypes .
O ambiente de execução precisa retornar XR_ERROR_SIZE_INSUFFICIENT de xrQuerySpatialComponentDataEXT se meshNormalsCount for menor que XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Uso válido (implícito)
- A extensão
XR_EXT_spatial_mesh_trackingprecisa ser ativada antes de usar XrSpatialComponentMesh3DNormalsListEXT. -
typeprecisa serXR_TYPE_SPATIAL_COMPONENT_MESH_3D_NORMALS_LIST_EXT -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas -
meshNormalsprecisa ser um ponteiro para uma matriz de estruturasmeshNormalsCountXrSpatialBufferEXT - O parâmetro
meshNormalsCountprecisa ser maior que0.
Configuração
Se XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT for enumerado em XrSpatialCapabilityComponentTypesEXT :: componentTypes para algum recurso, o aplicativo poderá ativá-lo incluindo o tipo enumerado na lista XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Esse componente não requer nenhuma configuração especial para ser incluído na próxima cadeia de XrSpatialCapabilityConfigurationBaseHeaderEXT . No entanto, recomendamos que os aplicativos usem esse componente e os dados dele em conjunto com o componente XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT.
Rótulos semânticos de malha
typedef enum XrSpatialMeshSemanticLabelEXT {
XR_SPATIAL_MESH_SEMANTIC_LABEL_UNCATEGORIZED_EXT = 1,
XR_SPATIAL_MESH_SEMANTIC_LABEL_FLOOR_EXT = 2,
XR_SPATIAL_MESH_SEMANTIC_LABEL_WALL_EXT = 3,
XR_SPATIAL_MESH_SEMANTIC_LABEL_CEILING_EXT = 4,
XR_SPATIAL_MESH_SEMANTIC_LABEL_TABLE_EXT = 5,
XR_SPATIAL_MESH_SEMANTIC_LABEL_CHAIR_EXT = 6,
XR_SPATIAL_MESH_SEMANTIC_LABEL_SOFA_EXT = 7,
XR_SPATIAL_MESH_SEMANTIC_LABEL_BED_EXT = 8,
XR_SPATIAL_MESH_SEMANTIC_LABEL_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialMeshSemanticLabelEXT;
A enumeração XrSpatialMeshSemanticLabelEXT descreve um conjunto de rótulos semânticos para uma malha. Isso é usado por diferentes componentes espaciais para dar significado aos valores uint8_t de um XrSpatialBufferEXT para rótulos semânticos por vértice ou por triângulo. Consulte Rótulos semânticos de vértices de malha e Rótulos semânticos de triângulos de malha.
As extensões que quiserem ampliar esse conjunto de rótulos semânticos ou adicionar um novo conjunto para malhas precisam seguir as diretrizes fornecidas em Diretrizes de design e extensão de rótulos semânticos .
Descrição do tipo enumerado
XR_SPATIAL_MESH_SEMANTIC_LABEL_UNCATEGORIZED_EXT
O ambiente de execução não conseguiu classificar o vértice ou o triângulo.
XR_SPATIAL_MESH_SEMANTIC_LABEL_FLOOR_EXT
O vértice ou triângulo é mapeado para um andar.
XR_SPATIAL_MESH_SEMANTIC_LABEL_WALL_EXT
O vértice ou triângulo é mapeado para uma parede.
XR_SPATIAL_MESH_SEMANTIC_LABEL_CEILING_EXT
O vértice ou triângulo é mapeado para um teto.
XR_SPATIAL_MESH_SEMANTIC_LABEL_TABLE_EXT
O vértice ou triângulo é mapeado para uma tabela.
XR_SPATIAL_MESH_SEMANTIC_LABEL_CHAIR_EXT
O vértice ou triângulo é mapeado para uma cadeira.
XR_SPATIAL_MESH_SEMANTIC_LABEL_SOFA_EXT
O vértice ou triângulo é mapeado para um sofá.
XR_SPATIAL_MESH_SEMANTIC_LABEL_BED_EXT
O vértice ou triângulo é mapeado para um canteiro.
Rótulos semânticos de vértices de malha
Visão geral do componente
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT fornece um único rótulo semântico para cada vértice da malha de uma entidade espacial.
Dados do componente
O XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT usa XrSpatialBufferEXT para os dados. XrSpatialBufferEXT :: bufferId representa o buffer que contém os rótulos semânticos de vértice da malha da entidade em que esse componente está. O XrSpatialBufferEXT :: bufferType precisa ser XR_SPATIAL_BUFFER_TYPE_UINT8_EXT . Os valores no buffer correspondem aos valores da enumeração XrSpatialMeshSemanticLabelEXT. Uma entidade que tem XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT precisa ter também o componente XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT. Os rótulos semânticos fornecidos por esse componente precisam corresponder aos vértices fornecidos em XrSpatialMeshDataEXT :: vertexBuffer do componente XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT. Isso significa que o rótulo semântico em um determinado índice dos dados do buffer espacial fornecidos por esse componente corresponde ao vértice no mesmo índice fornecido por XrSpatialMeshDataEXT :: vertexBuffer . Isso também implica que xrGetSpatialBufferUint8EXT :: bufferCountOutput precisa ser o mesmo valor para o buffer de rótulo semântico de vértice e XrSpatialMeshDataEXT :: vertexBuffer .
Estrutura de lista de componentes para consultar dados
A estrutura XrSpatialComponentMesh3DVertexSemanticLabelsListEXT é definida como:
typedef struct XrSpatialComponentMesh3DVertexSemanticLabelsListEXT {
XrStructureType type;
void* next;
uint32_t meshSemanticLabelsCount;
XrSpatialBufferEXT* meshSemanticLabels;
} XrSpatialComponentMesh3DVertexSemanticLabelsListEXT;
Descrições dos membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma estrutura desse tipo é definida no OpenXR principal ou nesta extensão.meshSemanticLabelsCounté umuint32_tque descreve a contagem de elementos na matrizmeshSemanticLabels.meshSemanticLabelsé uma matriz de XrSpatialBufferEXT .
O ambiente de execução precisa retornar XR_ERROR_VALIDATION_FAILURE de xrQuerySpatialComponentDataEXT se XrSpatialComponentMesh3DVertexSemanticLabelsListEXT estiver na próxima cadeia de XrSpatialComponentDataQueryResultEXT :: next, mas XrSpatialComponentDataQueryConditionEXT :: componentTypeCount não for zero e XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT não estiver incluído em XrSpatialComponentDataQueryConditionEXT :: componentTypes .
O ambiente de execução precisa retornar XR_ERROR_SIZE_INSUFFICIENT de xrQuerySpatialComponentDataEXT se meshSemanticLabelsCount for menor que XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Uso válido (implícito)
- A extensão
XR_EXT_spatial_mesh_trackingprecisa ser ativada antes de usar XrSpatialComponentMesh3DVertexSemanticLabelsListEXT. -
typeprecisa serXR_TYPE_SPATIAL_COMPONENT_MESH_3D_VERTEX_SEMANTIC_LABELS_LIST_EXT -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas -
meshSemanticLabelsprecisa ser um ponteiro para uma matriz de estruturasmeshSemanticLabelsCountXrSpatialBufferEXT - O parâmetro
meshSemanticLabelsCountprecisa ser maior que0.
Configuração
Se XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT for enumerado em XrSpatialCapabilityComponentTypesEXT :: componentTypes para algum recurso, o aplicativo poderá ativá-lo incluindo o tipo enumerado na lista XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Esse componente não requer nenhuma configuração especial para ser incluído na próxima cadeia de XrSpatialCapabilityConfigurationBaseHeaderEXT . No entanto, recomendamos que os aplicativos usem esse componente e os dados dele em conjunto com o componente XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT. Esse componente não pode ser ativado junto com XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT . Se um aplicativo adicionar XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT e XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT a XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents , o ambiente de execução precisará retornar XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT . O ambiente de execução também precisa retornar XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT se o aplicativo tentar ativar os dois componentes em XrSpatialContextEXTs separados.
Rótulos semânticos de triângulo de malha
Visão geral do componente
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT fornece um único rótulo semântico para cada triângulo da malha de uma entidade espacial.
Dados do componente
O XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT usa XrSpatialBufferEXT para os dados. XrSpatialBufferEXT :: bufferId representa o buffer que contém os rótulos semânticos de triângulo da malha da entidade em que esse componente está. O XrSpatialBufferEXT :: bufferType precisa ser XR_SPATIAL_BUFFER_TYPE_UINT8_EXT . Os valores no buffer correspondem aos valores da enumeração XrSpatialMeshSemanticLabelEXT. Uma entidade que tem XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT precisa ter também o componente XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT. Os rótulos semânticos fornecidos por esse componente precisam corresponder aos triângulos fornecidos no XrSpatialMeshDataEXT do componente XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT. A contagem de elementos do buffer espacial que contém os rótulos semânticos do triângulo é a contagem de elementos de XrSpatialMeshDataEXT :: indexBuffer dividida por 3. Isso significa que o rótulo semântico em um determinado índice dos dados do buffer espacial fornecidos por esse componente corresponde ao triângulo representado por [index * 3], [index * 3 + 1], [index * 3 + 2] em XrSpatialMeshDataEXT :: indexBuffer .
Estrutura de lista de componentes para consultar dados
A estrutura XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT é definida como:
typedef struct XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT {
XrStructureType type;
void* next;
uint32_t meshSemanticLabelsCount;
XrSpatialBufferEXT* meshSemanticLabels;
} XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT;
Descrições dos membros
typeé o XrStructureType dessa estrutura.nextéNULLou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma estrutura desse tipo é definida no OpenXR principal ou nesta extensão.meshSemanticLabelsCounté umuint32_tque descreve a contagem de elementos na matrizmeshSemanticLabels.meshSemanticLabelsé uma matriz de XrSpatialBufferEXT .
O ambiente de execução precisa retornar XR_ERROR_VALIDATION_FAILURE de xrQuerySpatialComponentDataEXT se XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT estiver na próxima cadeia de XrSpatialComponentDataQueryResultEXT :: next, mas XrSpatialComponentDataQueryConditionEXT :: componentTypeCount não for zero e XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT não estiver incluído em XrSpatialComponentDataQueryConditionEXT :: componentTypes .
O ambiente de execução precisa retornar XR_ERROR_SIZE_INSUFFICIENT de xrQuerySpatialComponentDataEXT se meshSemanticLabelsCount for menor que XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Uso válido (implícito)
- A extensão
XR_EXT_spatial_mesh_trackingprecisa ser ativada antes de usar XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT. -
typeprecisa serXR_TYPE_SPATIAL_COMPONENT_MESH_3D_TRIANGLE_SEMANTIC_LABELS_LIST_EXT -
nextprecisa serNULLou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas -
meshSemanticLabelsprecisa ser um ponteiro para uma matriz de estruturasmeshSemanticLabelsCountXrSpatialBufferEXT - O parâmetro
meshSemanticLabelsCountprecisa ser maior que0.
Configuração
Se XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT for enumerado em XrSpatialCapabilityComponentTypesEXT :: componentTypes para algum recurso, o aplicativo poderá ativá-lo incluindo o tipo enumerado na lista XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Esse componente não requer nenhuma configuração especial para ser incluído na próxima cadeia de XrSpatialCapabilityConfigurationBaseHeaderEXT . No entanto, recomendamos que os aplicativos usem esse componente e os dados dele em conjunto com o componente XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT. Esse componente não pode ser ativado junto com XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT . Se um aplicativo adicionar XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT e XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT a XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents , o ambiente de execução precisará retornar XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT . O ambiente de execução também precisa retornar XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT se o aplicativo tentar ativar os dois componentes em XrSpatialContextEXTs separados.
Novas estruturas
- XrSpatialCapabilityConfigurationMeshTrackingEXT
Estendendo XrSpatialCapabilityConfigurationMeshTrackingEXT :
Estendendo XrSpatialComponentDataQueryResultEXT :
Novos tipos enumerados
Novas constantes de tipo enumerado
XR_EXT_SPATIAL_MESH_TRACKING_EXTENSION_NAMEXR_EXT_spatial_mesh_tracking_SPEC_VERSIONEstendendo XrSpatialCapabilityEXT :
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT
Estendendo XrSpatialCapabilityFeatureEXT :
XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT
Estendendo XrSpatialComponentTypeEXT :
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXTXR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXTXR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT
Estendendo XrStructureType :
XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_MESH_TRACKING_EXTXR_TYPE_SPATIAL_COMPONENT_MESH_3D_NORMALS_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_MESH_3D_TRIANGLE_SEMANTIC_LABELS_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_MESH_3D_VERTEX_SEMANTIC_LABELS_LIST_EXTXR_TYPE_SPATIAL_FEATURE_TRACK_WATERTIGHT_MESH_EXT
Problemas
Histórico de versões
Revisão 1, 02/11/2025 (Nihav Jain, Google)
- Descrição inicial da extensão