XR_EXT_spatial_mesh_tracking
Name String
XR_EXT_spatial_mesh_tracking
Erweiterungstyp
Instanzerweiterung
Registrierte Durchwahl
784
Revision
1
Ratification Status
Nicht ratifiziert
Erweiterungs- und Versionsabhängigkeiten
XR_EXT_spatial_entity
Mitwirkende
Nihav Jain, Google
Natalie Fleury, Meta
Yuichi Taguchi, Meta
Ron Bessems, Meta
Yin Li, Microsoft
Jimmy Alamparambil, ByteDance
Zhipeng Liu, ByteDance
Jun Yan, ByteDance
Übersicht
Diese Erweiterung baut auf XR_EXT_spatial_entity auf und definiert räumliche Funktionen zum Verfolgen des Dreiecksnetzes der Umgebung. Das Dreiecksnetz, das von der in dieser Erweiterung definierten Funktion bereitgestellt wird, soll von Anwendungen verwendet werden, um Kollisionen der virtuellen Inhalte mit der Umgebung zu bestimmen.
Spatial Mesh Tracking-Funktion
Diese Erweiterung definiert XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT als räumliche Funktion zum Verfolgen des Dreiecksnetzes der Umgebung. Das Tracking des Mesh von Entitäten wie Ebenen und Objekten wird von dieser Funktion nicht abgedeckt und muss stattdessen durch die Aufzählung der XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT-Komponente für die entsprechenden Funktionen angegeben werden, die diese Entitäten tracken.
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT wird verwendet, um der Anwendung je nach den Fähigkeiten der Laufzeit und der von der Anwendung ausgewählten Konfiguration sowohl ein wasserdichtes als auch ein nicht wasserdichtes Mesh bereitzustellen.
Ein wasserdichtes Mesh ist ein Mesh, bei dem Lücken und nicht gescannte Bereiche aller Größen gefüllt wurden und das innerhalb eines bestimmten volumetrischen Blocks ein dichtes Mesh bildet. Wie der Name schon sagt, sollte bei einer Anwendung, die Wasser in ein wasserdichtes Mesh füllt, kein Wasser aus dem wasserdichten Volumen austreten. Das Erstellen eines wasserdichten gescannten Meshs erfordert oft sehr viel Rechenleistung, obwohl einige Laufzeiten diese Kosten durch die vorherige Verarbeitung des Meshs ausgleichen.
Laufzeitunterstützung
Wenn die Laufzeit das Tracking für das Dreiecksnetz der Umgebung unterstützt, muss sie dies durch Aufzählen von XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT in xrEnumerateSpatialCapabilitiesEXT angeben.
Eine Laufzeit, die XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT unterstützt, kann drei mögliche Funktionen haben:
- Die Laufzeit unterstützt nur das Tracking von nicht wasserdichten Meshes. In diesem Fall listet die Laufzeit
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXTin xrEnumerateSpatialCapabilitiesEXT auf, darf aberXR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXTnicht in xrEnumerateSpatialCapabilityFeaturesEXT auflisten (siehe Tracking a Watertight Mesh). - Die Laufzeit unterstützt sowohl wasserdichtes als auch nicht wasserdichtes Mesh-Tracking. In diesem Fall listet die Laufzeit
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXTin xrEnumerateSpatialCapabilitiesEXT auf und muss auchXR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXTin xrEnumerateSpatialCapabilityFeaturesEXT auflisten (siehe Tracking eines wasserdichten Meshs), um Anfragen zum Tracking eines wasserdichten Meshs von der Anwendung zu ermöglichen. - Die Laufzeit unterstützt nur das Tracking von wasserdichten Meshes. In diesem Fall listet die Laufzeit
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXTin xrEnumerateSpatialCapabilitiesEXT auf und muss auchXR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXTin xrEnumerateSpatialCapabilityFeaturesEXT auflisten (siehe Tracking eines wasserdichten Meshs), um der Anwendung mitzuteilen, dass sie das Tracking eines wasserdichten Meshs unterstützt. In diesem Fall gibt die Laufzeit unabhängig von der Konfiguration fürXR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXTimmer ein wasserdichtes Mesh an die Anwendung zurück.
Konfiguration
Die Struktur XrSpatialCapabilityConfigurationMeshTrackingEXT ist so definiert:
typedef struct XrSpatialCapabilityConfigurationMeshTrackingEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationMeshTrackingEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.capabilityist ein XrSpatialCapabilityEXT und mussXR_SPATIAL_CAPABILITY_MESH_TRACKING_EXTsein.enabledComponentCountist einuint32_t, der die Anzahl der Elemente im ArrayenabledComponentsbeschreibt.enabledComponentsist ein Zeiger auf ein Array von XrSpatialComponentTypeEXT .
Anwendungen können die räumliche Funktion XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT aktivieren, indem sie einen Zeiger auf eine XrSpatialCapabilityConfigurationMeshTrackingEXT-Struktur in XrSpatialContextCreateInfoEXT :: capabilityConfigs einfügen.
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE zurückgeben, wenn capability nicht XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT ist.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_mesh_trackingmuss aktiviert sein, bevor XrSpatialCapabilityConfigurationMeshTrackingEXT verwendet werden kann. -
typemussXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_MESH_TRACKING_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. Siehe auch: XrSpatialFeatureTrackWatertightMeshEXT -
capabilitymuss ein gültiger XrSpatialCapabilityEXT-Wert sein -
enabledComponentsmuss ein Zeiger auf ein Array mitenabledComponentCountgültigen XrSpatialComponentTypeEXT-Werten sein. - Der Parameter
enabledComponentCountmuss größer als0sein.
Wasserdichtes Mesh tracken
Die Struktur XrSpatialFeatureTrackWatertightMeshEXT ist so definiert:
typedef struct XrSpatialFeatureTrackWatertightMeshEXT {
XrStructureType type;
const void* next;
XrBool32 enableWatertightMeshTracking;
} XrSpatialFeatureTrackWatertightMeshEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.enableWatertightMeshTrackinggibt an, ob die Laufzeit ein wasserdichtes Mesh für die gescannte Umgebung berechnen muss.
Laufzeiten, die das Tracking von wasserdichten Meshes unterstützen, müssen XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT in xrEnumerateSpatialCapabilityFeaturesEXT aufzählen. Mit der Funktion XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT können Anwendungen optional das Tracking von wasserdichten Meshes aktivieren und explizit zusätzliche Rechenleistung zulassen, die für die Generierung von wasserdichten Meshes erforderlich sein kann.
Wenn XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT von xrEnumerateSpatialCapabilityFeaturesEXT für eine bestimmte Funktion aufgezählt wird, kann die Anwendung XrSpatialFeatureTrackWatertightMeshEXT mit der entsprechenden Konfigurationsstruktur dieser Funktion verknüpfen, um anzugeben, ob das getrackte Mesh wasserdicht sein soll oder nicht. Wenn die Anwendung enableWatertightMeshTracking auf XR_TRUE festlegt, muss die Laufzeit ein wasserdichtes Mesh der Umgebung berechnen und der Anwendung bereitstellen. Wenn die Anwendung enableWatertightMeshTracking auf XR_FALSE setzt, kann das getrackte Mesh trotzdem wasserdicht sein, wenn die Laufzeit nur wasserdichtes Mesh-Tracking unterstützt, z.B. wenn die Laufzeit ein verarbeitetes Mesh aus einer vorab gescannten Umgebung bereitstellt.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_mesh_trackingmuss aktiviert sein, bevor XrSpatialFeatureTrackWatertightMeshEXT verwendet werden kann. -
typemussXR_TYPE_SPATIAL_FEATURE_TRACK_WATERTIGHT_MESH_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.
Anwendungsablauf
Das folgende Diagramm zeigt, wie eine Anwendung den räumlichen Kontext konfigurieren kann, wenn sie ein wasserdichtes Mesh der Umgebung verfolgen möchte.
Ja
Ja
App benötigt
wasserdichtes Mesh
App benötigt…
Ja
Ja
Nein
Nein
Laufzeit
unterstützt die Funktion „Mesh-Tracking“
Laufzeit…
Ja
Ja
Nein
Nein
Die Laufzeit
unterstützt die Funktion „Track watertight mesh“
Laufzeit…
Die App erstellt einen räumlichen Kontext mit der Funktion „Mesh-Tracking-Funktion“ UND „Wasserdichtes Mesh-Tracking“.
App erstellt räumliche…
App verarbeitet fehlende Funktionsunterstützung in der aktuellen Laufzeit
App-Ziehpunkt fehlt…
Die App verarbeitet das getrackte Mesh, um selbst ein wasserdichtes Mesh zu erstellen, möglicherweise mit Hilfe des Nutzers, der die Löcher im Mesh flickt.
App verarbeitet die Tr... Text ist kein SVG – kann nicht angezeigt werden
Abbildung 29: App-Ablauf zum Anfordern eines wasserdichten Mesh-Netzwerks
Garantierte Komponenten
Eine Laufzeit, die XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT unterstützt, muss die folgenden räumlichen Komponenten als garantierte Komponenten aller Entitäten bereitstellen, die von dieser Funktion erkannt werden, und sie muss sie in xrEnumerateSpatialCapabilityComponentTypesEXT auflisten:
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT
Begrenzte 3D-Komponente
Die begrenzte 3D-Komponente liefert den Mittelpunkt und die Ausdehnung der Entität, auf der sie sich befindet. Die von dieser Komponente bereitgestellten Daten erleichtern es Anwendungen, die Entitäten zu entfernen, die sich außerhalb des Sichtfelds befinden.
Weitere Informationen finden Sie unter Begrenztes 3D.
3D-Mesh-Komponente
Die 3D-Mesh-Komponente stellt das 3D-Mesh der Entität bereit, auf der sie sich befindet. Weitere Informationen finden Sie unter Mesh 3D.
Volumetrische Segmentierung (Chunking)
Die Laufzeit kann das Mesh in volumetrische Blöcke (Chunks) segmentieren, damit Anwendungen die Mesh-Blöcke außerhalb des Sichtfelds leichter entfernen können. In einem solchen Fall muss die Laufzeit jeden solchen volumetrischen Block als separate Entität behandeln und die garantierten Komponenten auf jeder solchen Entität (volumetrischer Block) haben. Wenn die Laufzeitumgebung auf diese Weise ein wasserdichtes Mesh bereitstellt, ist jeder volumetrische Block einzeln nicht wasserdicht, aber eine Gruppe von Blöcken bildet zusammen ein wasserdichtes Mesh. In einem solchen Szenario muss die Laufzeit die Komponente XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT zu jeder Entität (volumetrischer Block) hinzufügen. Der Wert der übergeordneten Entität muss für alle Blöcke, die zusammen ein wasserdichtes Mesh bilden, gleich sein. So kann die Anwendung erkennen, welche Chunks zusammen ein wasserdichtes Mesh bilden.
Meshes benachbarter volumetrischer Blöcke können gemeinsame Eckpunkte haben, aber die Dreiecke eines volumetrischen Blocks dürfen sich nicht mit den Dreiecken des benachbarten Volumens überschneiden.
Optionale Komponenten
Mesh-Normalen
Komponentendaten
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT verwendet XrSpatialBufferEXT für seine Daten. XrSpatialBufferEXT :: bufferId stellt den Puffer dar, der die Vertex-Normalen des Mesh-Netzwerks der Entität enthält, auf der sich diese Komponente befindet. XrSpatialBufferEXT :: bufferType muss XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT sein. Eine Entität, die XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT hat, muss auch XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT haben. Die von dieser Komponente bereitgestellten Normalen müssen den Eckpunkten entsprechen, die in XrSpatialMeshDataEXT :: vertexBuffer der Komponente XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT angegeben sind.
Komponentenlistenstruktur zum Abfragen von Daten
Die Struktur XrSpatialComponentMesh3DNormalsListEXT ist so definiert:
typedef struct XrSpatialComponentMesh3DNormalsListEXT {
XrStructureType type;
void* next;
uint32_t meshNormalsCount;
XrSpatialBufferEXT* meshNormals;
} XrSpatialComponentMesh3DNormalsListEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.meshNormalsCountist einuint32_t, der die Anzahl der Elemente im ArraymeshNormalsbeschreibt.meshNormalsist ein Array von XrVector3f .
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE von xrQuerySpatialComponentDataEXT zurückgeben, wenn XrSpatialComponentMesh3DNormalsListEXT in der nächsten Kette von XrSpatialComponentDataQueryResultEXT :: next enthalten ist, aber XrSpatialComponentDataQueryConditionEXT :: componentTypeCount nicht null ist und XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT nicht in XrSpatialComponentDataQueryConditionEXT :: componentTypes enthalten ist.
Die Laufzeit muss XR_ERROR_SIZE_INSUFFICIENT von xrQuerySpatialComponentDataEXT zurückgeben, wenn meshNormalsCount kleiner als XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput ist.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_mesh_trackingmuss aktiviert werden, bevor XrSpatialComponentMesh3DNormalsListEXT verwendet werden kann. -
typemussXR_TYPE_SPATIAL_COMPONENT_MESH_3D_NORMALS_LIST_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
meshNormalsmuss ein Zeiger auf ein Array vonmeshNormalsCountXrSpatialBufferEXT-Strukturen sein. - Der Parameter
meshNormalsCountmuss größer als0sein.
Konfiguration
Wenn XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT in XrSpatialCapabilityComponentTypesEXT :: componentTypes für eine Funktion aufgeführt ist, kann die Anwendung sie aktivieren, indem sie das Enum in die Liste XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents aufnimmt. Für diese Komponente ist keine spezielle Konfiguration erforderlich, um in die nächste Kette von XrSpatialCapabilityConfigurationBaseHeaderEXT aufgenommen zu werden. Es wird jedoch empfohlen, diese Komponente und ihre Daten in Verbindung mit der Komponente XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT zu verwenden.
Semantische Labels für Mesh-Netzwerke
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;
Die Aufzählung XrSpatialMeshSemanticLabelEXT beschreibt eine Reihe semantischer Labels für ein Mesh. Dies wird von verschiedenen räumlichen Komponenten verwendet, um den uint8_t-Werten aus einem XrSpatialBufferEXT für semantische Labels pro Eckpunkt oder Dreieck eine Bedeutung zu geben. Weitere Informationen finden Sie unter Semantische Labels für Mesh-Scheitelpunkte und Semantische Labels für Mesh-Dreiecke.
Erweiterungen, die entweder diesen Satz semantischer Labels erweitern oder einen eigenen neuen Satz für Meshes hinzufügen möchten, sollten den Richtlinien in den Richtlinien für das Design und die Erweiterung semantischer Labels folgen.
Enum-Beschreibung
XR_SPATIAL_MESH_SEMANTIC_LABEL_UNCATEGORIZED_EXT
Die Laufzeit konnte den Scheitelpunkt oder das Dreieck nicht klassifizieren.
XR_SPATIAL_MESH_SEMANTIC_LABEL_FLOOR_EXT
Der Eckpunkt oder das Dreieck wird einer Ebene zugeordnet.
XR_SPATIAL_MESH_SEMANTIC_LABEL_WALL_EXT
Der Scheitelpunkt oder das Dreieck wird einer Wand zugeordnet.
XR_SPATIAL_MESH_SEMANTIC_LABEL_CEILING_EXT
Der Scheitelpunkt oder das Dreieck wird einer Decke zugeordnet.
XR_SPATIAL_MESH_SEMANTIC_LABEL_TABLE_EXT
Der Eckpunkt oder das Dreieck wird einer Tabelle zugeordnet.
XR_SPATIAL_MESH_SEMANTIC_LABEL_CHAIR_EXT
Der Scheitelpunkt oder das Dreieck wird einem Stuhl zugeordnet.
XR_SPATIAL_MESH_SEMANTIC_LABEL_SOFA_EXT
Der Eckpunkt oder das Dreieck wird einem Sofa zugeordnet.
XR_SPATIAL_MESH_SEMANTIC_LABEL_BED_EXT
Der Eckpunkt oder das Dreieck wird einem Bett zugeordnet.
Semantische Labels für Mesh-Vertexe
Komponentenübersicht
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT liefert ein einzelnes semantisches Label für jeden Scheitelpunkt des Mesh-Netzwerks einer räumlichen Entität.
Komponentendaten
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT verwendet XrSpatialBufferEXT für seine Daten. XrSpatialBufferEXT :: bufferId stellt den Puffer dar, der die semantischen Vertex-Labels des Mesh-Netzwerks der Entität enthält, auf der sich diese Komponente befindet. XrSpatialBufferEXT :: bufferType muss XR_SPATIAL_BUFFER_TYPE_UINT8_EXT sein. Die Werte im Zwischenspeicher entsprechen den Werten der Aufzählung XrSpatialMeshSemanticLabelEXT. Eine Entität mit XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT muss auch die Komponente XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT haben. Die von dieser Komponente bereitgestellten semantischen Labels müssen den Eckpunkten entsprechen, die in XrSpatialMeshDataEXT :: vertexBuffer der XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT-Komponente angegeben sind. Das bedeutet, dass das semantische Label an einem bestimmten Index der von dieser Komponente bereitgestellten räumlichen Zwischenspeicherdaten dem Vertex am selben Index entspricht, der von XrSpatialMeshDataEXT :: vertexBuffer bereitgestellt wird. Das bedeutet auch, dass xrGetSpatialBufferUint8EXT :: bufferCountOutput für den Puffer für semantische Labels von Eckpunkten und XrSpatialMeshDataEXT :: vertexBuffer denselben Wert haben muss.
Komponentenlistenstruktur zum Abfragen von Daten
Die Struktur XrSpatialComponentMesh3DVertexSemanticLabelsListEXT ist so definiert:
typedef struct XrSpatialComponentMesh3DVertexSemanticLabelsListEXT {
XrStructureType type;
void* next;
uint32_t meshSemanticLabelsCount;
XrSpatialBufferEXT* meshSemanticLabels;
} XrSpatialComponentMesh3DVertexSemanticLabelsListEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.meshSemanticLabelsCountist einuint32_t, der die Anzahl der Elemente im ArraymeshSemanticLabelsbeschreibt.meshSemanticLabelsist ein Array von XrSpatialBufferEXT .
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE von xrQuerySpatialComponentDataEXT zurückgeben, wenn XrSpatialComponentMesh3DVertexSemanticLabelsListEXT in der nächsten Kette von XrSpatialComponentDataQueryResultEXT :: next enthalten ist, aber XrSpatialComponentDataQueryConditionEXT :: componentTypeCount nicht null ist und XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT nicht in XrSpatialComponentDataQueryConditionEXT :: componentTypes enthalten ist.
Die Laufzeit muss XR_ERROR_SIZE_INSUFFICIENT von xrQuerySpatialComponentDataEXT zurückgeben, wenn meshSemanticLabelsCount kleiner als XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput ist.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_mesh_trackingmuss aktiviert sein, bevor XrSpatialComponentMesh3DVertexSemanticLabelsListEXT verwendet werden kann. -
typemussXR_TYPE_SPATIAL_COMPONENT_MESH_3D_VERTEX_SEMANTIC_LABELS_LIST_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
meshSemanticLabelsmuss ein Zeiger auf ein Array vonmeshSemanticLabelsCountXrSpatialBufferEXT-Strukturen sein. - Der Parameter
meshSemanticLabelsCountmuss größer als0sein.
Konfiguration
Wenn XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT in XrSpatialCapabilityComponentTypesEXT :: componentTypes für eine Funktion aufgeführt ist, kann die Anwendung sie aktivieren, indem sie das Enum in die Liste XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents aufnimmt. Für diese Komponente ist keine spezielle Konfiguration erforderlich, um in die nächste Kette von XrSpatialCapabilityConfigurationBaseHeaderEXT aufgenommen zu werden. Es wird jedoch empfohlen, diese Komponente und ihre Daten in Verbindung mit der Komponente XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT zu verwenden. Diese Komponente kann nicht zusammen mit XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT aktiviert werden. Wenn eine Anwendung sowohl XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT als auch XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT zu XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents hinzufügt, muss die Laufzeit XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT zurückgeben. Die Laufzeit muss auch XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT zurückgeben, wenn die Anwendung versucht, beide Komponenten in separaten XrSpatialContextEXT zu aktivieren.
Semantische Labels für Mesh-Dreiecke
Komponentenübersicht
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT liefert ein einzelnes semantisches Label für jedes Dreieck des Mesh-Netzwerks einer räumlichen Entität.
Komponentendaten
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT verwendet XrSpatialBufferEXT für seine Daten. XrSpatialBufferEXT :: bufferId stellt den Puffer dar, der die semantischen Dreiecks-Labels des Meshs der Entität enthält, auf der sich diese Komponente befindet. XrSpatialBufferEXT :: bufferType muss XR_SPATIAL_BUFFER_TYPE_UINT8_EXT sein. Die Werte im Zwischenspeicher entsprechen den Werten der Aufzählung XrSpatialMeshSemanticLabelEXT. Eine Entität mit XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT muss auch die Komponente XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT haben. Die von dieser Komponente bereitgestellten semantischen Labels müssen den Dreiecken entsprechen, die in XrSpatialMeshDataEXT der Komponente XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT bereitgestellt werden. Die Elementanzahl des räumlichen Puffers, der die semantischen Labels für Dreiecke enthält, ist die Elementanzahl von XrSpatialMeshDataEXT :: indexBuffer geteilt durch 3. Das bedeutet, dass das semantische Label an einem bestimmten Index der von dieser Komponente bereitgestellten räumlichen Zwischenspeicherdaten dem Dreieck entspricht, das durch [index * 3], [index * 3 + 1], [index * 3 + 2] in XrSpatialMeshDataEXT :: indexBuffer dargestellt wird.
Komponentenlistenstruktur zum Abfragen von Daten
Die Struktur XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT ist so definiert:
typedef struct XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT {
XrStructureType type;
void* next;
uint32_t meshSemanticLabelsCount;
XrSpatialBufferEXT* meshSemanticLabels;
} XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.meshSemanticLabelsCountist einuint32_t, der die Anzahl der Elemente im ArraymeshSemanticLabelsbeschreibt.meshSemanticLabelsist ein Array von XrSpatialBufferEXT .
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE von xrQuerySpatialComponentDataEXT zurückgeben, wenn XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT in der nächsten Kette von XrSpatialComponentDataQueryResultEXT :: next enthalten ist, aber XrSpatialComponentDataQueryConditionEXT :: componentTypeCount nicht null ist und XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT nicht in XrSpatialComponentDataQueryConditionEXT :: componentTypes enthalten ist.
Die Laufzeit muss XR_ERROR_SIZE_INSUFFICIENT von xrQuerySpatialComponentDataEXT zurückgeben, wenn meshSemanticLabelsCount kleiner als XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput ist.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_EXT_spatial_mesh_trackingmuss aktiviert sein, bevor XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT verwendet werden kann. -
typemussXR_TYPE_SPATIAL_COMPONENT_MESH_3D_TRIANGLE_SEMANTIC_LABELS_LIST_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
meshSemanticLabelsmuss ein Zeiger auf ein Array vonmeshSemanticLabelsCountXrSpatialBufferEXT-Strukturen sein. - Der Parameter
meshSemanticLabelsCountmuss größer als0sein.
Konfiguration
Wenn XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT in XrSpatialCapabilityComponentTypesEXT :: componentTypes für eine Funktion aufgeführt ist, kann die Anwendung sie aktivieren, indem sie das Enum in die Liste XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents aufnimmt. Für diese Komponente ist keine spezielle Konfiguration erforderlich, um in die nächste Kette von XrSpatialCapabilityConfigurationBaseHeaderEXT aufgenommen zu werden. Es wird jedoch empfohlen, diese Komponente und ihre Daten in Verbindung mit der Komponente XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT zu verwenden. Diese Komponente kann nicht zusammen mit XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT aktiviert werden. Wenn eine Anwendung sowohl XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT als auch XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT zu XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents hinzufügt, muss die Laufzeit XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT zurückgeben. Die Laufzeit muss auch XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT zurückgeben, wenn die Anwendung versucht, beide Komponenten in separaten XrSpatialContextEXT zu aktivieren.
Neue Gebäude
- XrSpatialCapabilityConfigurationMeshTrackingEXT
Erweiterung von XrSpatialCapabilityConfigurationMeshTrackingEXT :
Erweiterung von XrSpatialComponentDataQueryResultEXT :
Neue Enums
Neue Enum-Konstanten
XR_EXT_SPATIAL_MESH_TRACKING_EXTENSION_NAMEXR_EXT_spatial_mesh_tracking_SPEC_VERSIONErweiterung von XrSpatialCapabilityEXT :
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT
Erweiterung von XrSpatialCapabilityFeatureEXT :
XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT
Erweiterung von 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
Erweiterung von 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
Probleme
Versionsverlauf
Version 1, 02.11.2025 (Nihav Jain, Google)
- Anfängliche Beschreibung der Erweiterung