XR_EXT_spatial_entity
Name String
XR_EXT_spatial_entity
Erweiterungstyp
Instanzerweiterung
Registrierte Durchwahlnummer
741
Revision
1
Ratification Status (Status der Ratifizierung)
Ratifiziert
Abhängigkeiten von Erweiterungen und Versionen
XR_EXT_future
Mitwirkende
Nihav Jain, Google
Jared Finder, Google
Natalie Fleury, Meta
Yuichi Taguchi, Meta
Ron Bessems, Meta
Yin Li, Microsoft
Karthik Kadappan, Magic Leap
Jimmy Alamparambil, ByteDance
Zhipeng Liu, ByteDance
Jun Yan, ByteDance
Übersicht
Diese Erweiterung führt die Konzepte und Grundlagen für das Erkennen von Szenen und räumliches Denken in OpenXR ein. Dadurch werden mehrere zusammenhängende, aber unterschiedliche Funktionsbereiche vereinheitlicht, die gemäß dieser Erweiterung auf weitgehend einheitliche Weise aufgelistet, konfiguriert und verwendet werden. Da diese Erweiterung keine konkreten Definitionen für einen dieser Funktionsbereiche enthält, ist der formale Spezifikationstext eher abstrakt. Die in diesem Erweiterungsspezifikationstext enthaltenen Beispiele beziehen sich manchmal auf Funktionen, die in einer bevorstehenden oder hypothetischen zugehörigen Erweiterung definiert sind. Dies dient nur der Veranschaulichung und schränkt solche zusätzlichen Funktionen nicht ein oder legt sie nicht fest.
Die wichtigsten Teile dieser Erweiterung sind:
- Räumliche Einheiten : Die Funktionalität dreht sich um Einheiten , die für sich genommen nur sehr wenige Funktionen bieten.
- Räumliche Komponenten : Diese Einheiten sind mit Komponenten verknüpft, die Daten und Verhaltensweisen bereitstellen.
- Räumliche Komponententypen : Jede räumliche Komponente hat einen bestimmten Komponententyp. Jede Entität hat höchstens eine Komponente eines bestimmten Komponententyps.
- Räumlicher Kontext : Alle Interaktionen mit räumlichen Einheiten erfolgen in einem Kontext nach einer Initialisierungs- und Konfigurationsphase.
- Räumliche Funktionen : Die Bearbeitung räumlicher Einheiten wird weitgehend durch Funktionen bereitgestellt . Eine Funktionseinheit, z. B. anwendungsdefinierte Anker, Erkennung von Ebenen oder Bild-Tracking. Jede Funktion wird in der Regel in einer separaten Erweiterung definiert (wie gewohnt bei der Instanzerstellung aktiviert) und zum Zeitpunkt der Erstellung für einen bestimmten Kontext aktiviert.
- Jede Funktion ist einer Reihe von Komponententypen zugeordnet, für die Komponenten für jede Entität vorhanden sind, die von dieser Funktion bereitgestellt wird . Die Erweiterung, die eine Funktion definiert, gibt an, welche Komponententypen für die Funktion obligatorisch („garantiert“) sind. Dieselbe oder andere Erweiterungen können optionale Komponententypen angeben, die von einigen potenziellen Implementierungen bereitgestellt werden. Eine beliebige Anzahl von Capabilities kann Entitäten mit Komponenten eines bestimmten Komponententyps bereitstellen, die unabhängig von der Capability, die sie erzeugt hat, einheitlich verwendet werden können.
- Funktionen für räumliche Fähigkeiten : Einige Funktionen erfordern eine Konfiguration und werden daher durch Funktionen für Fähigkeiten parametrisiert .
Diese Erweiterung bietet einen Mechanismus zum Auflisten der Komponenten, die von jeder Funktion bereitgestellt werden, die auf dem aktuellen System unterstützt wird. Dies gilt sowohl für die obligatorischen als auch für die optionalen Komponenten.
Da für einige Implementierungen möglicherweise unterschiedliche Parametrisierungsgrade für Funktionen erforderlich sind, bietet diese Erweiterung einen Mechanismus zum Auflisten der unterstützten Funktionsmerkmale, die mit einer bestimmten Funktion im aktuellen System verknüpft sind.
Diese Erweiterung definiert auch mehrere gängige Komponenten, die voraussichtlich für eine Vielzahl von Funktionen verwendet werden .
Räumliche Einheit
Räumliche Einheiten sind Einheiten, die in einem bestimmten Raum existieren und deren zugehörige Daten in Komponenten organisiert sind. Sie können Folgendes sein:
- Physisch (z.B. planare Oberflächen wie Wände und Böden, Objekte wie Stühle und Bücherregale usw.)
- virtuell (z.B. Inhalte, die von einer anderen Anwendung oder einem anderen Nutzer platziert und geteilt werden)
- App-definiert (z.B. wenn eine App einen Bereich als „Wohnzimmer“ oder „Küche“ oder einen Punkt als Standort für den Fernseher usw. markiert)
Elemente, die über das Aktionssystem verfügbar gemacht werden, z. B. Controller oder Blicksteuerung, sollten nicht als räumliche Einheiten modelliert werden.
Räumliche Entitäten in OpenXR werden als Entity-Component-System modelliert . Jede räumliche Einheit hat eine Reihe von Komponenten, die jeweils einen eindeutigen Satz von Daten und Verhaltensweisen für diese Einheit bereitstellen.
Räumliche Entitäten werden entweder durch ein XrSpatialEntityIdEXT-Atom oder ein XrSpatialEntityEXT-Handle dargestellt. Details dazu finden Sie im Abschnitt Spatial Entity Representations.
Räumliche Komponententypen
Eine räumliche Einheit hat eine oder mehrere Komponenten, die Daten oder Verhaltensweisen für diese Einheit bereitstellen. Unter Common Components finden Sie einige gängige Komponenten, die von dieser Erweiterung definiert werden.
typedef enum XrSpatialComponentTypeEXT {
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT = 1,
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT = 2,
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT = 3,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT = 4,
XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT = 1000741000,
XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT = 1000741001,
XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT = 1000741002,
XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT = 1000741003,
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT = 1000743000,
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT = 1000744000,
XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT = 1000744001,
XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT = 1000744002,
XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT = 1000762000,
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT = 1000763000,
XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT = 1000782000,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT = 1000783000,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT = 1000783001,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT = 1000783002,
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID = 1000785000,
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID = 1000786000,
XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID = 1000791000,
XR_SPATIAL_COMPONENT_TYPE_ROOM_ANDROIDSYS = 1000792002,
XR_SPATIAL_COMPONENT_TYPE_MATERIAL_TYPE_ANDROIDSYS = 1000792003,
XR_SPATIAL_COMPONENT_TYPE_CONFIDENCE_ANDROIDSYS = 1000792004,
XR_SPATIAL_COMPONENT_TYPE_ROOM_EMPTINESS_ANDROIDSYS = 1000792005,
XR_SPATIAL_COMPONENT_TYPE_OCCUPANCY_GRID_ANDROIDX1 = 1000793000,
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID = 1000794000,
XR_SPATIAL_COMPONENT_TYPE_STREETSCAPE_GEOMETRY_METADATA_ANDROIDX2 = 1000798000,
XR_SPATIAL_COMPONENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialComponentTypeEXT;
Die Enumeration XrSpatialComponentTypeEXT identifiziert die verschiedenen Arten von Komponenten, die die Laufzeit möglicherweise unterstützt.
Nicht alle aufgeführten Komponententypen werden von dieser Erweiterung allein bereitgestellt. Für einige müssen zusätzliche Erweiterungen bei der Instanzerstellung aktiviert werden, wie in der Dokumentation beschrieben.
Die Enumeratoren haben die folgenden Werte:
Enum-Beschreibung
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT
Komponente, die die 2D-Begrenzungen für eine räumliche Einheit bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentBounded2DListEXT und die entsprechende Datenstruktur ist XrSpatialBounded2DDataEXT.
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT
Komponente, die die 3D-Begrenzungen für eine räumliche Einheit bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentBounded3DListEXT. Die entsprechende Datenstruktur ist XrBoxf.
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT
Komponente, die die XrSpatialEntityIdEXT des übergeordneten Elements für eine räumliche Entität bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentParentListEXT. Die entsprechende Datenstruktur ist XrSpatialEntityIdEXT.
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT
Komponente, die ein 3D-Mesh für eine räumliche Einheit bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentMesh3DListEXT. Die entsprechende Datenstruktur ist XrSpatialMeshDataEXT.
XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT
Komponente, die die Enumeration für die Ausrichtung der Ebene für eine räumliche Einheit bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentPlaneAlignmentListEXT. Die entsprechende Datenstruktur ist XrSpatialPlaneAlignmentEXT (hinzugefügt durch die XR_EXT_spatial_plane_tracking-Erweiterung).
XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT
Komponente, die ein 2D-Mesh für eine räumliche Einheit bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentMesh2DListEXT. Die entsprechende Datenstruktur ist XrSpatialMeshDataEXT (hinzugefügt durch die Erweiterung XR_EXT_spatial_plane_tracking).
XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT
Komponente, die ein 2D-Begrenzungspolygon für eine räumliche Einheit bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentPolygon2DListEXT. Die entsprechende Datenstruktur ist XrSpatialPolygon2DDataEXT (hinzugefügt durch die XR_EXT_spatial_plane_tracking-Erweiterung).
XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT
Komponente, die ein semantisches Label für eine Ebene bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentPlaneSemanticLabelListEXT. Die entsprechende Datenstruktur ist XrSpatialPlaneSemanticLabelEXT (hinzugefügt durch die Erweiterung XR_EXT_spatial_plane_tracking).
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT
Eine Komponente, die den Markierungstyp, die ID und den Standort beschreibt. Die entsprechende Listenstruktur ist XrSpatialComponentMarkerListEXT. Die entsprechende Datenstruktur ist XrSpatialMarkerDataEXT (hinzugefügt durch die Erweiterung XR_EXT_spatial_marker_tracking).
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT
Komponente, die ein semantisches Label für eine Szene bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentObjectSemanticLabelListEXT. Die entsprechende Datenstruktur ist XrSpatialObjectSemanticLabelEXT . (Hinzugefügt durch die Erweiterung XR_EXT_spatial_object_tracking)
XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT
Komponente, die ein semantisches Label für eine Tastatur bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentKeyboardSemanticLabelListEXT. Die entsprechende Datenstruktur ist XrSpatialKeyboardSemanticLabelEXT (hinzugefügt durch die XR_EXT_spatial_object_tracking-Erweiterung).
XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT
Komponente, die ein semantisches Label für eine Maus bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentMouseSemanticLabelListEXT. Die entsprechende Datenstruktur ist XrSpatialMouseSemanticLabelEXT (hinzugefügt durch die XR_EXT_spatial_object_tracking-Erweiterung).
XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT
Komponente, die den Standort für einen Anker bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentAnchorListEXT. Die entsprechende Datenstruktur ist XrPosef (hinzugefügt durch die XR_EXT_spatial_anchor-Erweiterung).
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT
Komponente, die die persistente UUID für eine räumliche Einheit bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentPersistenceListEXT. Die entsprechende Datenstruktur ist XrSpatialPersistenceDataEXT (hinzugefügt durch die Erweiterung XR_EXT_spatial_persistence).
XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT
Eine Komponente, die den planaren Bildtyp beschreibt. Die entsprechende Listenstruktur ist XrSpatialComponentImage2DListEXT und die entsprechende Datenstruktur ist XrSpatialImageSizeEXT . (Hinzugefügt durch die Erweiterung XR_EXT_spatial_image_tracking)
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT
Komponente, die die Normalen für das 3D-Mesh einer räumlichen Einheit bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentMesh3DNormalsListEXT. Die entsprechende Datenstruktur ist XrSpatialBufferEXT (hinzugefügt durch die XR_EXT_spatial_mesh_tracking-Erweiterung).
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT
Komponente, die die semantischen Labels pro Vertex für das 3D-Mesh eines räumlichen Objekts bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentMesh3DVertexSemanticLabelsListEXT. Die entsprechende Datenstruktur ist XrSpatialBufferEXT. Die Daten im Puffer werden XrSpatialMeshSemanticLabelEXT zugeordnet (hinzugefügt durch die XR_EXT_spatial_mesh_tracking-Erweiterung).
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT
Komponente, die die semantischen Labels für die einzelnen Dreiecksflächen des 3D-Netzes einer räumlichen Einheit bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT. Die entsprechende Datenstruktur ist XrSpatialBufferEXT. Die Daten im Puffer werden XrSpatialMeshSemanticLabelEXT zugeordnet (hinzugefügt durch die XR_EXT_spatial_mesh_tracking-Erweiterung).
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID
Komponente, die ein semantisches Label für ein Objekt bereitstellt; die entsprechende Listenstruktur ist XrSpatialComponentObjectSemanticLabelListANDROID; die entsprechende Datenstruktur ist XrSpatialObjectSemanticLabelANDROID (hinzugefügt durch die XR_ANDROID_spatial_object_tracking-Erweiterung).
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID
Komponente, die die Position eines Raycast-Treffers auf einer Entität bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentRaycastResultListANDROID. Die entsprechende Datenstruktur ist XrSpatialRaycastResultDataANDROID (wird durch die XR_ANDROID_spatial_discovery_raycast-Erweiterung hinzugefügt).
XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID
Komponente, die die Entitäts-ID der Entität bereitstellt, die die angehängte Entität umfasst. Die entsprechende Listenstruktur ist XrSpatialComponentSubsumedByListANDROID. Die entsprechende Datenstruktur ist XrSpatialEntityIdEXT (wird durch die Erweiterung XR_ANDROID_spatial_component_subsumed_by hinzugefügt).
XR_SPATIAL_COMPONENT_TYPE_ROOM_ANDROIDSYS
Komponente, die die Abmessungen und den Zimmertyp eines Schuhkartons bereitstellt; die entsprechende Listenstruktur ist XrSpatialComponentRoomListANDROIDSYS; die entsprechende Datenstruktur ist XrSpatialRoomDataANDROIDSYS (hinzugefügt durch die XR_ANDROIDSYS_spatial_room_tracking-Erweiterung)
XR_SPATIAL_COMPONENT_TYPE_MATERIAL_TYPE_ANDROIDSYS
Komponente, die den Materialtyp einer Grenzfläche angibt; entsprechende Listenstruktur: XrSpatialComponentMaterialTypeListANDROIDSYS; entsprechende Datenstruktur: XrSpatialMaterialTypeANDROIDSYS (hinzugefügt durch die XR_ANDROIDSYS_spatial_room_tracking-Erweiterung)
XR_SPATIAL_COMPONENT_TYPE_CONFIDENCE_ANDROIDSYS
Komponente, die das Konfidenzniveau eines verfolgbaren Elements angibt. Die entsprechende Listenstruktur ist XrSpatialComponentConfidenceListANDROIDSYS. Die entsprechende Datenstruktur ist float (hinzugefügt durch die Erweiterung XR_ANDROIDSYS_spatial_room_tracking).
XR_SPATIAL_COMPONENT_TYPE_ROOM_EMPTINESS_ANDROIDSYS
Komponente, die die Leere eines Raums angibt. Die entsprechende Listenstruktur ist XrSpatialComponentRoomEmptinessListANDROIDSYS. Die entsprechende Datenstruktur ist float (wird durch die Erweiterung XR_ANDROIDSYS_spatial_room_tracking hinzugefügt).
XR_SPATIAL_COMPONENT_TYPE_OCCUPANCY_GRID_ANDROIDX1
Komponente, die Informationen zum Belegungsgitter der angehängten Entität bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentOccupancyGridListANDROIDX1. Die entsprechende Datenstruktur ist XrSpatialOccupancyGridDataANDROIDX1 (wird durch die Erweiterung XR_ANDROIDX1_spatial_occupancy_grid hinzugefügt).
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID
Eine Komponente, die eine Quad-Annotation beschreibt. Die entsprechende Listenstruktur ist XrSpatialComponentAnnotationQuadListANDROID. Die entsprechende Datenstruktur ist XrSpatialAnnotationQuadDataANDROID (wird durch die XR_ANDROID_spatial_annotation_tracking-Erweiterung hinzugefügt).
XR_SPATIAL_COMPONENT_TYPE_STREETSCAPE_GEOMETRY_METADATA_ANDROIDX2
Komponente, die die Metadaten für eine Streetscape-Geometrie bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentStreetscapeGeometryMetadataListANDROIDX2. Die entsprechende Datenstruktur ist XrSpatialStreetscapeGeometryMetadataANDROIDX2 (hinzugefügt durch die XR_ANDROIDX2_geospatial_streetscape-Erweiterung).
Räumliche Funktionen und Einrichtung
Räumliche Funktionen definieren die Möglichkeiten einer Laufzeit, Entitäten zu erkennen, die eine garantierte Reihe von Komponenten enthalten. Anwendungen aktivieren die Komponenten einer räumlichen Funktion beim Erstellen von XrSpatialContextEXT. Die Laufzeit muss wiederum nur die aktivierten Komponenten für erkannte Einheiten bereitstellen. Wenn eine Laufzeit beispielsweise meldet, dass eine der Komponenten für eine bestimmte Funktion „semantische Labels“ ist, bedeutet das, dass die Anwendung semantische Labels über die Konfiguration für diese Funktion aktivieren kann und die Laufzeit die Komponente für semantische Labels nur bereitstellen muss, wenn sie konfiguriert ist.
typedef enum XrSpatialCapabilityEXT {
XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT = 1000741000,
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT = 1000743000,
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT = 1000743001,
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT = 1000743002,
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT = 1000743003,
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT = 1000744000,
XR_SPATIAL_CAPABILITY_ANCHOR_EXT = 1000762000,
XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT = 1000782000,
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT = 1000783000,
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID = 1000785000,
XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID = 1000786000,
XR_SPATIAL_CAPABILITY_ROOM_TRACKING_ANDROIDSYS = 1000792000,
XR_SPATIAL_CAPABILITY_ROOM_BOUNDARY_TRACKING_ANDROIDSYS = 1000792001,
XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID = 1000794000,
XR_SPATIAL_CAPABILITY_STREETSCAPE_GEOMETRY_ANDROIDX2 = 1000798000,
XR_SPATIAL_CAPABILITY_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialCapabilityEXT;
Die Enumeration XrSpatialCapabilityEXT identifiziert die verschiedenen Arten von Funktionen, die die Laufzeit möglicherweise unterstützt.
Die Enumeratoren haben die folgenden Werte:
Enum-Beschreibung
XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT
Flugzeug-Tracking (von der Erweiterung XR_EXT_spatial_plane_tracking hinzugefügt)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT
QR-Codes erkennen und verfolgen (Hinzugefügt durch die Erweiterung XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT
Micro-QR-Codes können erkannt und getrackt werden. (Hinzugefügt durch die Erweiterung XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT
Aruco-Marker erkennen und verfolgen (Hinzugefügt durch die Erweiterung XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT
AprilTags erkennen und verfolgen können. (Hinzugefügt durch die Erweiterung XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT
Objekt-Tracking (hinzugefügt durch die Erweiterung XR_EXT_spatial_object_tracking)
XR_SPATIAL_CAPABILITY_ANCHOR_EXT
Möglichkeit zum Erstellen räumlicher Anker (hinzugefügt durch die XR_EXT_spatial_anchor-Erweiterung)
XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT
Ebene Referenzbilder erkennen und verfolgen können. (Hinzugefügt durch die Erweiterung XR_EXT_spatial_image_tracking)
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT
Möglichkeit, das Mesh einer Umgebung zu verfolgen. (Hinzugefügt durch die Erweiterung XR_EXT_spatial_mesh_tracking)
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID
Objekt-Tracking (hinzugefügt durch die Erweiterung XR_ANDROID_spatial_object_tracking)
XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID
Raycast für Tiefenpuffer (von der Erweiterung XR_ANDROID_spatial_discovery_raycast hinzugefügt)
XR_SPATIAL_CAPABILITY_ROOM_TRACKING_ANDROIDSYS
Möglichkeit, einen Raum zu verfolgen (hinzugefügt durch die Erweiterung XR_ANDROIDSYS_spatial_room_tracking)
XR_SPATIAL_CAPABILITY_ROOM_BOUNDARY_TRACKING_ANDROIDSYS
Möglichkeit, eine Raumgrenze zu verfolgen (hinzugefügt durch die XR_ANDROIDSYS_spatial_room_tracking-Erweiterung)
XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID
Vermerk-Tracking (hinzugefügt durch die Erweiterung XR_ANDROID_spatial_annotation_tracking)
XR_SPATIAL_CAPABILITY_STREETSCAPE_GEOMETRY_ANDROIDX2
Streetscape-Geometrie (hinzugefügt durch die XR_ANDROIDX2_geospatial_streetscape-Erweiterung)
Die Funktion xrEnumerateSpatialCapabilitiesEXT ist so definiert:
XrResult xrEnumerateSpatialCapabilitiesEXT(
XrInstance instance,
XrSystemId systemId,
uint32_t capabilityCapacityInput,
uint32_t* capabilityCountOutput,
XrSpatialCapabilityEXT* capabilities);
Parameterbeschreibungen
instanceist ein Handle für eine XrInstance .systemIdist dasXrSystemId, dessen räumliche Funktionen aufgelistet werden.capabilityCapacityInputist die Kapazität descapabilities-Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.capabilityCountOutputist die Anzahl der Funktionen oder die erforderliche Kapazität, fallscapabilityCapacityInputnicht ausreicht.capabilitiesist ein Array von XrSpatialCapabilityEXT . KannNULLsein, wenncapabilityCapacityInput= 0.- Eine detaillierte Beschreibung zum Abrufen der erforderlichen
capabilities-Größe finden Sie im Abschnitt Puffergrößenparameter.
Die Anwendung kann die Liste der räumlichen Funktionen, die von einem bestimmten XrSystemId unterstützt werden, mit xrEnumerateSpatialCapabilitiesEXT aufzählen .
Die Laufzeit darf die räumlichen Funktionen, deren Erweiterung für instance nicht aktiviert ist, nicht aufzählen .
Gültige Nutzung (implizit)
- Die
XR_EXT_spatial_entity-Erweiterung muss aktiviert werden, bevor xrEnumerateSpatialCapabilitiesEXT aufgerufen wird. -
instancemuss ein gültiger XrInstance-Handle sein. -
capabilityCountOutputmuss ein Zeiger auf einenuint32_t-Wert sein. - – Wenn
capabilityCapacityInputnicht0ist ,capabilitiesmuss ein Zeiger auf ein Array voncapabilityCapacityInputXrSpatialCapabilityEXT-Werten sein.
Rückgabecodes
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
Die Funktion xrEnumerateSpatialCapabilityComponentTypesEXT ist so definiert:
XrResult xrEnumerateSpatialCapabilityComponentTypesEXT(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
XrSpatialCapabilityComponentTypesEXT* capabilityComponents);
Parameterbeschreibungen
instanceist ein Handle für eine XrInstance .systemIdist dieXrSystemId, deren Komponenten für räumliche Funktionen aufgelistet werden.capabilityist die XrSpatialCapabilityEXT, für die die Komponenten aufgelistet werden.capabilityComponentsist ein Zeiger auf einen XrSpatialCapabilityComponentTypesEXT, der eine Ein-/Ausgabestruktur ist, in der ein von der Anwendung zugewiesenes Array ausgefüllt wird.
Diese Funktion listet die Komponententypen auf, die die angegebene Funktion für ihre Entitäten im konfigurierten System bereitstellt.
Die Anwendung kann die in XrSpatialCapabilityComponentTypesEXT :: componentTypes aufgeführten Komponententypen verwenden, um die vollständige Gruppe von Komponenten zu ermitteln, die das systemId für capability unterstützt. Sie kann diese Liste verwenden, um eine gültige Konfiguration für capability zu ermitteln, wenn ein XrSpatialContextEXT dafür erstellt wird.
Die Laufzeit muss XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT zurückgeben, wenn capability nicht von xrEnumerateSpatialCapabilitiesEXT aufgezählt wird .
Die Laufzeit darf die räumlichen Komponententypen, deren Erweiterung für instance nicht aktiviert ist, nicht aufzählen .
Gültige Nutzung (implizit)
- Die
XR_EXT_spatial_entity-Erweiterung muss aktiviert werden, bevor xrEnumerateSpatialCapabilityComponentTypesEXT aufgerufen wird. -
instancemuss ein gültiger XrInstance-Handle sein. -
capabilitymuss ein gültiger XrSpatialCapabilityEXT-Wert sein. -
capabilityComponentsmuss ein Zeiger auf eine XrSpatialCapabilityComponentTypesEXT-Struktur sein.
Rückgabecodes
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
Die Struktur XrSpatialCapabilityComponentTypesEXT ist so definiert:
typedef struct XrSpatialCapabilityComponentTypesEXT {
XrStructureType type;
void* next;
uint32_t componentTypeCapacityInput;
uint32_t componentTypeCountOutput;
XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialCapabilityComponentTypesEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht definiert.componentTypeCapacityInputist die Kapazität des Arrays oder 0, um die erforderliche Kapazität abzurufen.componentTypeCountOutputist die Anzahl der Komponententypen oder die erforderliche Kapazität, fallscomponentTypeCapacityInputnicht ausreicht.componentTypesist ein Array von XrSpatialComponentTypeEXT . KannNULLsein, wenncomponentTypeCapacityInput= 0.- Eine detaillierte Beschreibung zum Abrufen der erforderlichen
componentTypes-Größe finden Sie im Abschnitt Puffergrößenparameter.
Gültige Nutzung (implizit)
- Die
XR_EXT_spatial_entity-Erweiterung muss aktiviert werden, bevor XrSpatialCapabilityComponentTypesEXT verwendet wird. -
typemussXR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. - Wenn
componentTypeCapacityInputnicht0ist ,componentTypesmuss ein Zeiger auf ein Array voncomponentTypeCapacityInputXrSpatialComponentTypeEXT-Werten sein.
Funktionen für räumliche Fähigkeiten
typedef enum XrSpatialCapabilityFeatureEXT {
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT = 1000743000,
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT = 1000743001,
XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT = 1000744000,
XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID = 1000761000,
XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID = 1000761001,
XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID = 1000761002,
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXT = 1000782000,
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_STATIC_IMAGES_EXT = 1000782001,
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_FIXED_SIZE_IMAGES_EXT = 1000782002,
XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT = 1000783000,
XR_SPATIAL_CAPABILITY_FEATURE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialCapabilityFeatureEXT;
Für einige Funktionen sind Parameter für die Anwendung verfügbar, mit denen konfiguriert werden kann, wie die Komponentendaten von der Laufzeit berechnet werden. Diese Dimensionen der Parametrisierung/Konfigurierbarkeit werden als Funktionsmerkmale bezeichnet. Bei einer Funktion zum Verfolgen von Bildern kann eine Laufzeitumgebung möglicherweise eine Funktion unterstützen, mit der die Anwendung angeben kann, ob die verfolgten Bilder statisch sind oder nicht.
Wenn diese Informationen über eine Konfigurationsstruktur an die Laufzeit übergeben werden, darf sich die Menge der Komponententypen, die in den zugehörigen Einheiten vorhanden sind, z.B. im verfolgten Bild, nicht ändern. Die Laufzeit kann jedoch z.B. die Tracking-Funktionen der Bild-Tracking-Funktion optimieren und so die Nutzerfreundlichkeit der Anwendung verbessern.
Solche Funktionen werden durch XrSpatialCapabilityFeatureEXT dargestellt und die Anwendung listet sie mit xrEnumerateSpatialCapabilityFeaturesEXT auf .
Für jede Funktion gibt es eine entsprechende Konfigurationsstruktur, mit der sie aktiviert werden kann. Solche Konfigurationsstrukturen müssen mit XrSpatialCapabilityConfigurationBaseHeaderEXT :: next der entsprechenden Funktion verkettet werden.
Die Enumeratoren haben die folgenden Werte:
Enum-Beschreibung
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT
Funktion, mit der Anwendungen die Größe der Markierungen angeben können. Die entsprechende Konfigurationsstruktur ist XrSpatialMarkerSizeEXT (hinzugefügt durch die XR_EXT_spatial_marker_tracking-Erweiterung).
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT
Funktion, mit der Anwendungen angeben können, ob Markierungen statisch sind. Die entsprechende Konfigurationsstruktur ist XrSpatialMarkerStaticOptimizationEXT (wird durch die Erweiterung XR_EXT_spatial_marker_tracking hinzugefügt).
XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT
Räumliche Funktion, mit der Anwendungen eine Teilmenge von Labels aus XrSpatialObjectSemanticLabelEXT für die Laufzeit angeben können, die verfolgt werden sollen. Die entsprechende Konfigurationsstruktur ist XrSpatialFeatureObjectSemanticLabelSubsetEXT . (Hinzugefügt durch die Erweiterung XR_EXT_spatial_object_tracking)
XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID
Die Laufzeit unterstützt den Filter XrSpatialBoundsSpherefANDROID für XrSpatialDiscoverySnapshotCreateInfoEXT. Bei der Erstellung des räumlichen Kontexts ist keine Konfigurationsstruktur erforderlich. (Hinzugefügt durch die Erweiterung XR_ANDROID_spatial_discovery_bounds)
XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID
Die Laufzeit unterstützt den Filter XrSpatialBoundsBoxfANDROID für XrSpatialDiscoverySnapshotCreateInfoEXT. Bei der Erstellung des räumlichen Kontexts muss keine Konfigurationsstruktur enthalten sein. (Hinzugefügt durch die Erweiterung XR_ANDROID_spatial_discovery_bounds)
XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID
Die Laufzeit unterstützt den Filter XrSpatialBoundsFrustumfANDROID für XrSpatialDiscoverySnapshotCreateInfoEXT. Für die Erstellung des räumlichen Kontexts ist keine Konfigurationsstruktur erforderlich. (Hinzugefügt durch die Erweiterung XR_ANDROID_spatial_discovery_bounds)
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXT
Die Laufzeit unterstützt das automatische Ableiten der physischen Größe erkannter und verfolgter Bilder. Die entsprechende Konfigurationsstruktur ist XrSpatialImageSizeEXT (hinzugefügt durch die XR_EXT_spatial_image_tracking-Erweiterung).
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_STATIC_IMAGES_EXT
Die Laufzeit unterstützt XrSpatialImageStaticOptimizationEXT . Die entsprechende Konfigurationsstruktur ist XrSpatialImageStaticOptimizationEXT . (Hinzugefügt durch die Erweiterung XR_EXT_spatial_image_tracking)
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_FIXED_SIZE_IMAGES_EXT
Die Laufzeit unterstützt XrSpatialImageSizeEXT . Die entsprechende Konfigurationsstruktur ist XrSpatialImageSizeEXT (hinzugefügt durch die XR_EXT_spatial_image_tracking-Erweiterung).
XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT
Funktion zum Erstellen eines wasserdichten Mesh der Umgebung. Die entsprechende Konfigurationsstruktur ist XrSpatialFeatureTrackWatertightMeshEXT . (Hinzugefügt durch die Erweiterung XR_EXT_spatial_mesh_tracking)
Die Funktion xrEnumerateSpatialCapabilityFeaturesEXT ist so definiert:
XrResult xrEnumerateSpatialCapabilityFeaturesEXT(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
uint32_t capabilityFeatureCapacityInput,
uint32_t* capabilityFeatureCountOutput,
XrSpatialCapabilityFeatureEXT* capabilityFeatures);
Parameterbeschreibungen
instanceist ein Handle für eine XrInstance .systemIdist dieXrSystemId, deren räumliche Funktionen aufgelistet werden.capabilityist die XrSpatialCapabilityEXT, für die die Funktionen aufgelistet werden.capabilityFeatureCapacityInputist die Kapazität des Arrays oder 0, um die erforderliche Kapazität abzurufen.capabilityFeatureCountOutputist die Anzahl der Funktionen oder die erforderliche Kapazität, fallscapabilityFeatureCapacityInputnicht ausreicht.capabilityFeaturesist ein Array von XrSpatialCapabilityFeatureEXT . KannNULLsein, wenncapabilityFeatureCapacityInput= 0.- Eine detaillierte Beschreibung zum Abrufen der erforderlichen
capabilityFeatures-Größe finden Sie im Abschnitt Puffergrößenparameter.
Die Anwendung ermittelt die von einem bestimmten System für eine XrSpatialCapabilityEXT unterstützten Funktionen mit xrEnumerateSpatialCapabilityFeaturesEXT .
Bei Funktionen, die Funktionen verfügbar machen, wählt die Anwendung die zu aktivierende Funktion oder die zu aktivierenden Funktionen aus und stellt die entsprechende Konfigurationsstruktur in der nächsten Kette der Funktionskonfigurationsstrukturen in XrSpatialContextCreateInfoEXT :: capabilityConfigs bereit .
Wenn capability keine Funktion ist, die von xrEnumerateSpatialCapabilitiesEXT aufgezählt wird, muss die Laufzeit XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT zurückgeben .
Die Laufzeit darf die Funktionen für räumliche Fähigkeiten, deren Erweiterung für instance nicht aktiviert ist, nicht aufzählen .
Gültige Nutzung (implizit)
- Die
XR_EXT_spatial_entity-Erweiterung muss aktiviert werden, bevor xrEnumerateSpatialCapabilityFeaturesEXT aufgerufen wird. -
instancemuss ein gültiger XrInstance-Handle sein. -
capabilitymuss ein gültiger XrSpatialCapabilityEXT-Wert sein. -
capabilityFeatureCountOutputmuss ein Zeiger auf einenuint32_t-Wert sein. - : Wenn
capabilityFeatureCapacityInputnicht0ist ,capabilityFeaturesmuss ein Zeiger auf ein Array voncapabilityFeatureCapacityInputXrSpatialCapabilityFeatureEXT-Werten sein.
Rückgabecodes
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
Räumlicher Kontext
Räumlichen Kontext erstellen
XR_DEFINE_HANDLE(XrSpatialContextEXT)
Das Handle XrSpatialContextEXT stellt die Ressourcen zum Ermitteln und Aktualisieren einer bestimmten Anzahl von räumlichen Einheiten in der Umgebung des Nutzers dar. Die Anwendung kann diesen Handle verwenden, um räumliche Einheiten mit anderen Funktionen in dieser Erweiterung zu ermitteln und zu aktualisieren.
Die Funktion xrCreateSpatialContextAsyncEXT ist so definiert:
XrResult xrCreateSpatialContextAsyncEXT(
XrSession session,
const XrSpatialContextCreateInfoEXT* createInfo,
XrFutureEXT* future);
Parameterbeschreibungen
sessionist eine XrSession, in der der räumliche Kontext aktiv ist.createInfoist das XrSpatialContextCreateInfoEXT, das zum Angeben der Parameter für den räumlichen Kontext verwendet wird.futureist ein Zeiger auf einXrFutureEXT.
Die Anwendung kann ein XrSpatialContextEXT-Handle erstellen, indem sie:
- Bereitstellung von Strukturen, die von XrSpatialCapabilityConfigurationBaseHeaderEXT abgeleitet sind, in XrSpatialContextCreateInfoEXT ::
capabilityConfigs, um Funktionen und Komponenten für diese Funktion zu aktivieren. - Konfigurieren Sie die Funktionen selbst mit den entsprechenden Konfigurationsstrukturen der XrSpatialCapabilityFeatureEXT .
Die Laufzeit muss XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT zurückgeben, wenn XrSpatialContextCreateInfoEXT ::capabilityConfigCount 0 ist. Für ein Handle für räumlichen Kontext ist mindestens eine Funktion erforderlich.
Die Laufzeit muss XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT zurückgeben, wenn eine Funktion im XrSpatialContextCreateInfoEXT :: capabilityConfigs-Array nicht von xrEnumerateSpatialCapabilitiesEXT aufgezählt wird .
Die Laufzeit muss XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT zurückgeben, wenn XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponentCount in XrSpatialContextCreateInfoEXT :: capabilityConfigs 0 ist. Eine Funktionskonfiguration ist ohne eine Liste der Komponententypen, die für diese Funktion aktiviert werden sollen, unvollständig.
Die Laufzeit muss XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT zurückgeben, wenn ein in XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents aufgeführter Komponententyp nicht für XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability in xrEnumerateSpatialCapabilityComponentTypesEXT aufgezählt wird .
Wenn eine der Strukturen in der nächsten Kette von XrSpatialContextCreateInfoEXT :: capabilityConfigs einer XrSpatialCapabilityFeatureEXT entspricht, die für diese Funktion in xrEnumerateSpatialCapabilityFeaturesEXT nicht aufgeführt ist, muss die Laufzeit diese XrSpatialCapabilityFeatureEXT-Struktur ignorieren.
Die Laufzeit muss XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT zurückgeben, wenn XrSpatialContextCreateInfoEXT :: capabilityConfigs mehrere Strukturen mit demselben XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability enthält .
Um eine optimale Nutzung der Systemressourcen zu gewährleisten, kann die Laufzeit die im Array XrSpatialContextCreateInfoEXT bereitgestellten Konfigurationen verwenden, um sich auf eingehende räumliche Anfragen vorzubereiten. Eine Laufzeit, die die Funktion zum Erfassen von Ebenen unterstützt, kann beispielsweise nur dann mit der Pipeline zum Erfassen von Ebenen beginnen, wenn die Anwendung ein Handle für den räumlichen Kontext mit der Funktion zum Erfassen von Ebenen erstellt. Wenn die konfigurierten Funktionen eine lange Aufwärmzeit haben, kann es bei Aufrufen von xrCreateSpatialDiscoverySnapshotAsyncEXT zu einem leeren Snapshot kommen. Die Anwendung kann auf XrEventDataSpatialDiscoveryRecommendedEXT warten, bevor xrCreateSpatialDiscoverySnapshotAsyncEXT verwendet wird, um sicherzustellen, dass die zugrunde liegenden Trackingdienste bereit sind.
Wenn eine Laufzeit ein Berechtigungssystem erzwingt, um den Anwendungszugriff auf die räumlichen Funktionen zu steuern, die für den XrSpatialContextEXT konfiguriert werden, muss die Laufzeit XR_ERROR_PERMISSION_INSUFFICIENT zurückgeben, wenn diese Berechtigungen nicht für diese Anwendung erteilt wurden.
Diese Funktion startet einen asynchronen Vorgang und erstellt ein entsprechendes XrFutureEXT , das mit xrPollFutureEXT und zugehörigen Funktionen verwendet werden kann. Der Rückgabewert dieser Funktion gibt nur an, ob die Parameter akzeptabel waren, um den asynchronen Vorgang zu planen. Die entsprechende Vervollständigungsfunktion ist xrCreateSpatialContextCompleteEXT , die verwendet werden kann, wenn sich ein Future aus dieser Funktion im Status READY befindet und die Ausgaben von dieser Funktion in der Vervollständigungsstruktur XrCreateSpatialContextCompletionEXT enthalten sind .
Gültige Nutzung (implizit)
- Die
XR_EXT_spatial_entity-Erweiterung muss aktiviert sein, bevor xrCreateSpatialContextAsyncEXT aufgerufen wird. -
sessionmuss ein gültiger XrSession-Handle sein -
createInfomuss ein Zeiger auf eine gültige XrSpatialContextCreateInfoEXT-Struktur sein. -
futuremuss ein Zeiger auf einenXrFutureEXT-Wert sein.
Rückgabecodes
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXTXR_ERROR_VALIDATION_FAILURE
Die Struktur XrSpatialContextCreateInfoEXT ist so definiert:
typedef struct XrSpatialContextCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t capabilityConfigCount;
const XrSpatialCapabilityConfigurationBaseHeaderEXT* const* capabilityConfigs;
} XrSpatialContextCreateInfoEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht definiert.capabilityConfigCountist einuint32_t, das die Anzahl der Elemente imcapabilityConfigs-Array beschreibt.capabilityConfigsist ein Zeiger auf ein Array von XrSpatialCapabilityConfigurationBaseHeaderEXT-Zeigern.
Die Struktur XrSpatialContextCreateInfoEXT beschreibt die Informationen zum Erstellen eines XrSpatialContextEXT-Handles.
Gültige Nutzung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor XrSpatialContextCreateInfoEXT verwendet wird. -
typemussXR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein . Siehe auch XrSpatialContextPersistenceConfigEXT. -
capabilityConfigsmuss ein Zeiger auf ein Array voncapabilityConfigCountgültigen Strukturen auf Basis von XrSpatialCapabilityConfigurationBaseHeaderEXT sein. Siehe auch XrSpatialCapabilityConfigurationAnchorEXT , XrSpatialCapabilityConfigurationAprilTagEXT , XrSpatialCapabilityConfigurationArucoMarkerEXT , XrSpatialCapabilityConfigurationDepthRaycastANDROID , XrSpatialCapabilityConfigurationImageTrackingEXT , XrSpatialCapabilityConfigurationMeshTrackingEXT , XrSpatialCapabilityConfigurationMicroQrCodeEXT , XrSpatialCapabilityConfigurationObjectTrackingANDROID , XrSpatialCapabilityConfigurationObjectTrackingEXT , XrSpatialCapabilityConfigurationPlaneTrackingEXT , XrSpatialCapabilityConfigurationQrCodeEXT , XrSpatialCapabilityConfigurationRoomBoundaryTrackingANDROIDSYS , XrSpatialCapabilityConfigurationRoomTrackingANDROIDSYS , XrSpatialCapabilityConfigurationStreetscapeGeometryANDROIDX2 - Der Parameter
capabilityConfigCountmuss größer als0sein.
Die Struktur XrSpatialCapabilityConfigurationBaseHeaderEXT ist so definiert:
typedef struct XrSpatialCapabilityConfigurationBaseHeaderEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationBaseHeaderEXT;
Diese Struktur wird nicht direkt in der API verwendet, sondern ihre untergeordneten Strukturen können mit XrSpatialContextCreateInfoEXT verwendet werden, um räumliche Funktionen zu konfigurieren.
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.capabilityist eine XrSpatialCapabilityEXT .enabledComponentCountist einuint32_t, das die Anzahl der Elemente imenabledComponents-Array beschreibt.enabledComponentsist ein Zeiger auf ein Array vom Typ XrSpatialComponentTypeEXT .
Die Laufzeit muss XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT zurückgeben, wenn capability nicht von xrEnumerateSpatialCapabilitiesEXT aufgezählt wird . Die Laufzeit muss XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT zurückgeben, wenn ein in enabledComponents aufgeführter Komponententyp für capability in xrEnumerateSpatialCapabilityComponentTypesEXT nicht aufgezählt wird .
Gültige Nutzung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor XrSpatialCapabilityConfigurationBaseHeaderEXT verwendet werden kann. -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
capabilitymuss ein gültiger XrSpatialCapabilityEXT-Wert sein. -
enabledComponentsmuss ein Zeiger auf ein Array vonenabledComponentCountgültigen XrSpatialComponentTypeEXT-Werten sein. - Der Parameter
enabledComponentCountmuss größer als0sein.
Die Funktion xrCreateSpatialContextCompleteEXT ist so definiert:
XrResult xrCreateSpatialContextCompleteEXT(
XrSession session,
XrFutureEXT future,
XrCreateSpatialContextCompletionEXT* completion);
Parameterbeschreibungen
sessionist die XrSession, die zuvor an xrCreateSpatialContextAsyncEXT übergeben wurde:session.futureist derXrFutureEXT, der von xrCreateSpatialContextAsyncEXT empfangen wird .completionist ein Zeiger auf eine XrCreateSpatialContextCompletionEXT .
xrCreateSpatialContextCompleteEXT schließt den asynchronen Vorgang ab, der von xrCreateSpatialContextAsyncEXT gestartet wurde . Die Laufzeit muss XR_ERROR_FUTURE_PENDING_EXT zurückgeben, wenn future nicht bereit ist. Die Laufzeit muss XR_ERROR_FUTURE_INVALID_EXT zurückgeben, wenn future bereits abgeschlossen oder abgebrochen wurde.
Gültige Nutzung (implizit)
- Die
XR_EXT_spatial_entity-Erweiterung muss aktiviert werden, bevor xrCreateSpatialContextCompleteEXT aufgerufen wird. -
sessionmuss ein gültiger XrSession-Handle sein -
completionmuss ein Zeiger auf eine XrCreateSpatialContextCompletionEXT-Struktur sein.
Rückgabecodes
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_FUTURE_INVALID_EXTXR_ERROR_FUTURE_PENDING_EXTXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
Die Struktur XrCreateSpatialContextCompletionEXT ist so definiert:
typedef struct XrCreateSpatialContextCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialContextEXT spatialContext;
} XrCreateSpatialContextCompletionEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.futureResultist das XrResult des Vorgangs zum Erstellen des räumlichen Kontexts.spatialContextist ein XrSpatialContextEXT, der mit den Daten und der Konfiguration in xrCreateSpatialContextAsyncEXT ::createInfoerstellt wurde .
Zukünftige Rückgabecodes
futureResult-Werte:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT
Wenn futureResult ein Erfolgscode ist, muss spatialContext gültig sein. Wenn spatialContext gültig ist, bleibt es nur innerhalb des Lebenszyklus von xrCreateSpatialContextAsyncEXT :: session oder bis die Anwendung spatialContext mit xrDestroySpatialContextEXT zerstört, je nachdem, was zuerst eintritt.
Gültige Nutzung (implizit)
- Die
XR_EXT_spatial_entity-Erweiterung muss aktiviert werden, bevor XrCreateSpatialContextCompletionEXT verwendet wird. -
typemussXR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
futureResultmuss ein gültiger XrResult-Wert sein. - Wenn
spatialContextnicht XR_NULL_HANDLE ist , mussspatialContextein gültiger XrSpatialContextEXT-Handle sein.
Räumlichen Kontext entfernen
Die Funktion xrDestroySpatialContextEXT ist so definiert:
XrResult xrDestroySpatialContextEXT(
XrSpatialContextEXT spatialContext);
Parameterbeschreibungen
spatialContextist ein XrSpatialContextEXT, das zuvor von xrCreateSpatialContextAsyncEXT erstellt wurde .
Die Anwendung kann die Funktion xrDestroySpatialContextEXT aufrufen, um das spatialContext-Handle und die zugrunde liegenden Ressourcen freizugeben, wenn die Aufgaben zur Erkennung und Aktualisierung räumlicher Einheiten abgeschlossen sind. Wenn kein anderer gültiger XrSpatialContextEXT vorhanden ist, der mit denselben räumlichen Funktionen wie spatialContext erstellt wurde, dient dieser Aufruf als Vorschlag für die Laufzeit, die für diese Funktionen erforderlichen Tracking-Dienste zu deaktivieren, um Systemressourcen zu sparen.
Gültige Nutzung (implizit)
- Die
XR_EXT_spatial_entity-Erweiterung muss aktiviert werden, bevor xrDestroySpatialContextEXT aufgerufen wird. -
spatialContextmuss ein gültiger XrSpatialContextEXT-Handle sein.
Threadsicherheit
- Der Zugriff auf
spatialContextund alle untergeordneten Handles muss extern synchronisiert werden.
Rückgabecodes
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Räumliche Entitätsdarstellungen
Räumliche Entitäts-ID
XR_DEFINE_ATOM(XrSpatialEntityIdEXT)
XrSpatialEntityIdEXT wird verwendet, um jede Art von Entität darzustellen, die von der Laufzeit in der räumlichen Umgebung des Nutzers erkannt wird. Ein XrSpatialEntityIdEXT ist für den XrSpatialContextEXT gültig, in dem es gefunden wird. Die Laufzeit darf dasselbe XrSpatialEntityIdEXT nicht für verschiedene Einheiten innerhalb desselben XrSpatialContextEXT verwenden. Außerdem darf die Laufzeit nicht denselben XrSpatialEntityIdEXT für mehrere XrSpatialContextEXT innerhalb derselben XrSession wiederverwenden, unabhängig davon, ob er dieselbe oder verschiedene Entitäten darstellt.
#define XR_NULL_SPATIAL_ENTITY_ID_EXT 0
XR_NULL_SPATIAL_ENTITY_ID_EXT ist ein reservierter Wert, der eine ungültige XrSpatialEntityIdEXT darstellt . Sie dürfen nur dann an API-Funktionen übergeben und von diesen zurückgegeben werden, wenn dies ausdrücklich zulässig ist.
Handle für räumliche Entitäten
XR_DEFINE_HANDLE(XrSpatialEntityEXT)
Das Handle XrSpatialEntityEXT stellt eine räumliche Einheit dar. Eine Anwendung kann ein solches Handle erstellen, um ihr Interesse an einer bestimmten Entität gegenüber der Laufzeit auszudrücken.
Spatial Entity-Handle aus ID erstellen
Die Funktion xrCreateSpatialEntityFromIdEXT ist so definiert:
XrResult xrCreateSpatialEntityFromIdEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialEntityFromIdCreateInfoEXT* createInfo,
XrSpatialEntityEXT* spatialEntity);
Parameterbeschreibungen
spatialContextist ein XrSpatialContextEXT, das zuvor mit xrCreateSpatialContextAsyncEXT erstellt wurde .createInfoist ein Zeiger auf die Struktur XrSpatialEntityFromIdCreateInfoEXT.spatialEntityist das zurückgegebene XrSpatialEntityEXT-Handle.
Die Anwendung kann xrCreateSpatialEntityFromIdEXT verwenden, um ein XrSpatialEntityEXT-Handle zu erstellen, das eine Referenz auf eine Entität ist, die in der Umgebung des Nutzers vorhanden ist.
Die Laufzeit muss XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT zurückgeben, wenn XrSpatialEntityFromIdCreateInfoEXT :: entityId keine gültige ID für spatialContext ist .
Gültige Nutzung (implizit)
- Die
XR_EXT_spatial_entity-Erweiterung muss aktiviert sein, bevor xrCreateSpatialEntityFromIdEXT aufgerufen wird. -
spatialContextmuss ein gültiger XrSpatialContextEXT-Handle sein. -
createInfomuss ein Zeiger auf eine gültige XrSpatialEntityFromIdCreateInfoEXT-Struktur sein. -
spatialEntitymuss ein Zeiger auf ein XrSpatialEntityEXT-Handle sein.
Rückgabecodes
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Die Struktur XrSpatialEntityFromIdCreateInfoEXT ist so definiert:
typedef struct XrSpatialEntityFromIdCreateInfoEXT {
XrStructureType type;
const void* next;
XrSpatialEntityIdEXT entityId;
} XrSpatialEntityFromIdCreateInfoEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht definiert.entityIdist dieXrSpatialEntityIdEXTder Entität, für die die Anwendung ein Handle erstellen möchte.
Gültige Nutzung (implizit)
- Die
XR_EXT_spatial_entity-Erweiterung muss aktiviert werden, bevor XrSpatialEntityFromIdCreateInfoEXT verwendet wird. -
typemussXR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.
Handle für räumliche Entität zerstören
Die Funktion xrDestroySpatialEntityEXT ist so definiert:
XrResult xrDestroySpatialEntityEXT(
XrSpatialEntityEXT spatialEntity);
Parameterbeschreibungen
spatialEntityist ein Handle für eine XrSpatialEntityEXT, die zuvor von einer Funktion wie xrCreateSpatialEntityFromIdEXT erstellt wurde .
Die Anwendung kann xrDestroySpatialEntityEXT verwenden, um das spatialEntity-Handle freizugeben, wenn sie nicht mehr an der durch dieses Handle referenzierten Entität interessiert ist.
Gültige Nutzung (implizit)
- Die
XR_EXT_spatial_entity-Erweiterung muss aktiviert werden, bevor xrDestroySpatialEntityEXT aufgerufen wird. -
spatialEntitymuss ein gültiges XrSpatialEntityEXT-Handle sein.
Threadsicherheit
- Der Zugriff auf
spatialEntityund alle untergeordneten Handles muss extern synchronisiert werden.
Rückgabecodes
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Räumlicher Snapshot
XR_DEFINE_HANDLE(XrSpatialSnapshotEXT)
Die Anwendung kann räumliche Snapshots erstellen, um räumliche Einheiten zu erkennen oder ihre Informationen zu bekannten räumlichen Einheiten zu aktualisieren. Der Handle XrSpatialSnapshotEXT stellt die unveränderlichen Daten für die erkannten oder aktualisierten räumlichen Einheiten und eine Teilmenge ihrer Komponenten dar, die von der Anwendung ausgewählt wurden. Der räumliche Snapshot stellt eine zusammenhängende Ansicht der Einheiten und ihrer Komponentendaten dar. Nachdem ein Snapshot erstellt wurde, müssen die Daten des Snapshots konstant bleiben, solange der Snapshot gültig ist.
Die Anwendung kann beliebig viele Snapshots erstellen, muss jedoch den für jeden neuen Snapshot zugewiesenen Speicherplatz berücksichtigen und die Snapshots muss löschen, sobald sie nicht mehr benötigt werden.
Erkennungssnapshot erstellen
Die Funktion xrCreateSpatialDiscoverySnapshotAsyncEXT ist so definiert:
XrResult xrCreateSpatialDiscoverySnapshotAsyncEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialDiscoverySnapshotCreateInfoEXT* createInfo,
XrFutureEXT* future);
Parameterbeschreibungen
spatialContextist ein XrSpatialContextEXT, das zuvor mit xrCreateSpatialContextAsyncEXT erstellt wurde .createInfoist ein Zeiger auf ein XrSpatialDiscoverySnapshotCreateInfoEXT .futureist ein Zeiger auf einXrFutureEXT.
Die Anwendung kann räumliche Einheiten erkennen, indem sie mit xrCreateSpatialDiscoverySnapshotAsyncEXT einen Discovery-Snapshot erstellt .
Diese Funktion startet einen asynchronen Vorgang und erstellt ein entsprechendes XrFutureEXT , das mit xrPollFutureEXT und zugehörigen Funktionen verwendet werden kann. Der Rückgabewert dieser Funktion gibt nur an, ob die Parameter akzeptabel waren, um den asynchronen Vorgang zu planen. Die entsprechende Completion-Funktion ist xrCreateSpatialDiscoverySnapshotCompleteEXT. Sie kann verwendet werden, wenn sich ein Future aus dieser Funktion im Status READY befindet und die Ausgaben von dieser Funktion in der Completion-Struktur XrCreateSpatialDiscoverySnapshotCompletionEXT enthalten sind.
Die Anwendung kann mehrere Anfragen zum Erstellen von Discovery-Snapshots senden, ohne auf den Abschluss der vorherigen Anfrage warten zu müssen. Die Laufzeit kann die Snapshot-Erstellung in beliebiger Reihenfolge verarbeiten und abschließen. Die Laufzeit kann die Erstellung des Discovery-Snapshots verzögern, um die Anwendung zu drosseln, wenn sie aufgrund von Energie-, Wärme- oder anderen Richtlinien des Geräts die Nutzung von Systemressourcen reduzieren muss.
Die Anwendung kann XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes verwenden, um die Liste der Entitäten und Komponenten zu filtern, deren Daten die Laufzeit in den Snapshot aufnehmen muss. Wenn die Anwendung eine gültige Liste von räumlichen Komponententypen in XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes bereitstellt, muss die Laufzeit nur räumliche Einheiten in den Snapshot aufnehmen, die mindestens eine der in XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes bereitgestellten Komponenten haben . Außerdem muss die Laufzeit nur Daten für diese Komponenten im Snapshot enthalten.
Die Laufzeit muss XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT zurückgeben, wenn einer der XrSpatialComponentTypeEXT in XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes nicht für die räumlichen Funktionen aktiviert ist, die beim Erstellen von spatialContext an XrSpatialContextCreateInfoEXT :: capabilityConfigs übergeben werden .
Wenn die Anwendung keine Liste der räumlichen Komponententypen in XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes bereitstellt, muss die Laufzeit alle räumlichen Einheiten im Snapshot mit der Gruppe von Komponenten einschließen, die in XrSpatialCapabilityConfigurationBaseHeaderEXT ::enabledComponents für die für spatialContext konfigurierten Funktionen aufgeführt sind . Die Laufzeit muss die Daten für alle aktivierten Komponenten der für spatialContext konfigurierten Funktionen enthalten .
Wenn XrEventDataReferenceSpaceChangePending vor Abschluss von future in die Warteschlange gestellt wird und XrEventDataReferenceSpaceChangePending :: poseValid „false“ ist, kann die Laufzeit entweder einen XrSpatialSnapshotEXT ohne Entitäten erstellen oder den XrSpatialEntityTrackingStateEXT der Entitäten, die in XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace nicht mehr lokalisiert werden können, in XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time auf XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT oder XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT festlegen . Die Laufzeit darf XrCreateSpatialContextCompletionEXT :: futureResult aufgrund von XrEventDataReferenceSpaceChangePending nicht auf einen Fehlercode setzen .
Gültige Nutzung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor xrCreateSpatialDiscoverySnapshotAsyncEXT aufgerufen wird. -
spatialContextmuss ein gültiger XrSpatialContextEXT-Handle sein. -
createInfomuss ein Zeiger auf eine gültige XrSpatialDiscoverySnapshotCreateInfoEXT-Struktur sein. -
futuremuss ein Zeiger auf einenXrFutureEXT-Wert sein.
Rückgabecodes
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXTXR_ERROR_VALIDATION_FAILURE
Die Struktur XrSpatialDiscoverySnapshotCreateInfoEXT ist so definiert:
typedef struct XrSpatialDiscoverySnapshotCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialDiscoverySnapshotCreateInfoEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht definiert.componentTypeCountist einuint32_t, das die Anzahl der Elemente imcomponentTypes-Array beschreibt.componentTypesist ein Array von XrSpatialComponentTypeEXT .
Die Struktur XrSpatialDiscoverySnapshotCreateInfoEXT beschreibt die Informationen zum Erstellen eines XrSpatialSnapshotEXT-Handles beim Ermitteln räumlicher Einheiten.
Gültige Nutzung (implizit)
- Die
XR_EXT_spatial_entity-Erweiterung muss aktiviert werden, bevor XrSpatialDiscoverySnapshotCreateInfoEXT verwendet wird. -
typemussXR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein . Siehe auch: XrSpatialBoundsBoxfANDROID , XrSpatialBoundsFrustumfANDROID , XrSpatialBoundsSpherefANDROID , XrSpatialDiscoveryPersistenceUuidFilterEXT , XrSpatialDiscoveryRoomBoundaryFilterANDROIDSYS , XrSpatialDiscoveryUniqueEntitiesFilterANDROID , XrSpatialFilterTrackingStateEXT , XrSpatialRaycastInfoANDROID - Wenn
componentTypeCountnicht0ist ,componentTypesmuss ein Zeiger auf ein Array voncomponentTypeCountgültigen XrSpatialComponentTypeEXT-Werten sein.
Die Funktion xrCreateSpatialDiscoverySnapshotCompleteEXT ist so definiert:
XrResult xrCreateSpatialDiscoverySnapshotCompleteEXT(
XrSpatialContextEXT spatialContext,
const XrCreateSpatialDiscoverySnapshotCompletionInfoEXT* createSnapshotCompletionInfo,
XrCreateSpatialDiscoverySnapshotCompletionEXT* completion);
Parameterbeschreibungen
spatialContextist der XrSpatialContextEXT, der zuvor an xrCreateSpatialDiscoverySnapshotAsyncEXT übergeben wurde ::spatialContext.createSnapshotCompletionInfoist ein Zeiger auf ein XrCreateSpatialDiscoverySnapshotCompletionInfoEXT, das Informationen zum Abschluss der Anfrage zum Erstellen eines Discovery-Snapshots enthält.completionist ein Zeiger auf eine XrCreateSpatialDiscoverySnapshotCompletionEXT .
xrCreateSpatialDiscoverySnapshotCompleteEXT schließt den asynchronen Vorgang ab, der von xrCreateSpatialDiscoverySnapshotAsyncEXT gestartet wurde . Die Laufzeit muss XR_ERROR_FUTURE_PENDING_EXT zurückgeben, wenn XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future nicht im Bereitschaftszustand ist. Die Laufzeit muss XR_ERROR_FUTURE_INVALID_EXT zurückgeben, wenn XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future bereits abgeschlossen oder abgebrochen wurde.
Gültige Nutzung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor xrCreateSpatialDiscoverySnapshotCompleteEXT aufgerufen wird. -
spatialContextmuss ein gültiger XrSpatialContextEXT-Handle sein. -
createSnapshotCompletionInfomuss ein Zeiger auf eine gültige XrCreateSpatialDiscoverySnapshotCompletionInfoEXT-Struktur sein. -
completionmuss ein Zeiger auf eine XrCreateSpatialDiscoverySnapshotCompletionEXT-Struktur sein.
Rückgabecodes
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_FUTURE_INVALID_EXTXR_ERROR_FUTURE_PENDING_EXTXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
Die Struktur XrCreateSpatialDiscoverySnapshotCompletionInfoEXT ist so definiert:
typedef struct XrCreateSpatialDiscoverySnapshotCompletionInfoEXT {
XrStructureType type;
const void* next;
XrSpace baseSpace;
XrTime time;
XrFutureEXT future;
} XrCreateSpatialDiscoverySnapshotCompletionInfoEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.baseSpaceist der XrSpace, in dem sich alle Standorte des Discovery-XrSpatialSnapshotEXT befinden.timeist dieXrTime, an der sich alle Standorte des Discovery-Objekts XrSpatialSnapshotEXT befinden.futureist derXrFutureEXT, der von xrCreateSpatialDiscoverySnapshotAsyncEXT empfangen wurde.
Die Standorte in den verschiedenen Komponentendaten, die im erstellten Snapshot enthalten sind, werden in baseSpace unter time dargestellt .
Gültige Nutzung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor XrCreateSpatialDiscoverySnapshotCompletionInfoEXT verwendet wird. -
typemussXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
baseSpacemuss ein gültiger XrSpace-Handle sein.
Die Struktur XrCreateSpatialDiscoverySnapshotCompletionEXT ist so definiert:
typedef struct XrCreateSpatialDiscoverySnapshotCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialSnapshotEXT snapshot;
} XrCreateSpatialDiscoverySnapshotCompletionEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.futureResultist das XrResult des Vorgangs zum Erstellen des räumlichen Erkennungssnapshots.snapshotist ein XrSpatialSnapshotEXT, mit dem die Komponentendaten der erkannten räumlichen Einheiten abgefragt werden können.
Zukünftige Rückgabecodes
futureResult-Werte:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHED
Gültige Nutzung (implizit)
- Die
XR_EXT_spatial_entity-Erweiterung muss aktiviert werden, bevor XrCreateSpatialDiscoverySnapshotCompletionEXT verwendet wird. -
typemussXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
futureResultmuss ein gültiger XrResult-Wert sein. - Wenn
snapshotnicht XR_NULL_HANDLE ist , musssnapshotein gültiger XrSpatialSnapshotEXT-Handle sein.
Ereignis für Discovery-Empfehlung
Die Struktur XrEventDataSpatialDiscoveryRecommendedEXT ist so definiert:
typedef struct XrEventDataSpatialDiscoveryRecommendedEXT {
XrStructureType type;
const void* next;
XrSpatialContextEXT spatialContext;
} XrEventDataSpatialDiscoveryRecommendedEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.spatialContextist der XrSpatialContextEXT, für den die Laufzeit die Erkennung empfiehlt.
Die Anwendung kann dieses Ereignis mit xrPollEvent abrufen . Die Anwendung kann übermäßige Aufrufe von xrCreateSpatialDiscoverySnapshotAsyncEXT vermeiden, um räumliche Einheiten zu erkennen, indem sie auf dieses Ereignis wartet. Wenn die Anwendung zwischen zwei XrEventDataSpatialDiscoveryRecommendedEXT-Ereignissen mehrere Discovery-Snapshots mit demselben XrSpatialDiscoverySnapshotCreateInfoEXT erstellt, können die resultierenden Snapshots dieselben Entitäten enthalten. Die Snapshot-Erstellung und Datenabfragen wären dann unnötig.
Wenn Sie warten, bis dieses Ereignis eintritt, um einen neuen Discovery-Snapshot zu erstellen, wird sichergestellt, dass die Anwendung das System nicht mit Discovery-Anfragen überlastet, für die die Laufzeit möglicherweise keine neuen Daten zurückgibt. Außerdem wird so das Risiko vermieden, dass die Systemressourcen überlastet werden und die Anwendung aufgrund von Energie- oder Temperaturrichtlinien des Geräts gedrosselt wird. Dies trägt auch dazu bei, dass Laufzeiten, die räumliche Einheiten spontan mit Live-Tracking erkennen, und Laufzeiten, die räumliche Einheiten auf Grundlage eines zuvor aufgezeichneten Zustands bereitstellen, gleichwertig sind. In diesem Fall kann die Laufzeit das Ereignis für die Empfehlung zur Erkennung nur einmal für jeden XrSpatialContextEXT in die Warteschlange stellen.
Die Laufzeit darf dieses Ereignis nicht in die Warteschlange stellen, um die Anwendung über Änderungen oder Anpassungen an den Komponentendaten vorhandener räumlicher Einheiten zu informieren. Die Anwendung kann die Funktion xrCreateSpatialUpdateSnapshotEXT verwenden, um Komponentendatenaktualisierungen für die räumlichen Entitäten zu verfolgen, die für sie von Interesse sind.
Eine Laufzeit kann ein Empfehlungsereignis für die Suche in die Warteschlange stellen, ohne darauf zu warten, dass die Anwendung zuerst xrCreateSpatialDiscoverySnapshotAsyncEXT aufruft . Eine Laufzeitumgebung kann die Entscheidung, das Ereignis für die Empfehlung zur Erkennung in die Warteschlange zu stellen, beispielsweise auf der Konfiguration von XrSpatialContextEXT, dem eigenen Verständnis der Umgebung des Nutzers (Erkennung neuer oder Verlust vorhandener Einheiten) oder auf dem Hinweis auf eine geeignete Häufigkeit von Erkennungsanfragen an die Anwendung stützen, um die Systemressourcen nicht zu überlasten. Die Laufzeit kann dieses Ereignis für einen XrSpatialContextEXT nie in die Warteschlange stellen, wenn während der gesamten Lebensdauer dieses XrSpatialContextEXT keine Objekte in der Umgebung des Nutzers gefunden werden .
Die Laufzeit darf dieses Ereignis für einen bestimmten spatialContext erst in die Warteschlange stellen, wenn die Anwendung die Erstellung mit xrCreateSpatialContextCompleteEXT abgeschlossen hat .
Nachdem die Anwendung xrDestroySpatialContextEXT aufgerufen hat , darf die Laufzeit keine weiteren Empfehlungsereignisse für diesen räumlichen Kontext in die Warteschlange stellen und keine solchen Ereignisse für diesen Kontext von xrPollEvent zurückgeben .
Gültige Nutzung (implizit)
- Die
XR_EXT_spatial_entity-Erweiterung muss aktiviert werden, bevor XrEventDataSpatialDiscoveryRecommendedEXT verwendet wird. -
typemussXR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.
Komponentendaten abfragen
Die Funktion xrQuerySpatialComponentDataEXT ist so definiert:
XrResult xrQuerySpatialComponentDataEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialComponentDataQueryConditionEXT* queryCondition,
XrSpatialComponentDataQueryResultEXT* queryResult);
Parameterbeschreibungen
snapshotist ein XrSpatialSnapshotEXT, das zuvor von xrCreateSpatialDiscoverySnapshotCompleteEXT oder xrCreateSpatialUpdateSnapshotEXT bereitgestellt wurde .queryConditionist ein Zeiger auf eine XrSpatialComponentDataQueryConditionEXT-Struktur.queryResultist ein Zeiger auf eine XrSpatialComponentDataQueryResultEXT-Struktur.
Die Anwendung kann xrQuerySpatialComponentDataEXT verwenden, um die Komponentendaten der Entitäten im Snapshot abzufragen, indem sie eine Listenstruktur an XrSpatialComponentDataQueryResultEXT :: next anhängt, die jedem XrSpatialComponentTypeEXT in XrSpatialComponentDataQueryConditionEXT :: componentTypes entspricht .
Wenn die Anwendung eine Listenstruktur an XrSpatialComponentDataQueryResultEXT :: next anhängt, die keiner der in XrSpatialComponentDataQueryConditionEXT :: componentTypes aufgeführten Komponenten entspricht, muss die Laufzeit XR_ERROR_VALIDATION_FAILURE zurückgeben .
Die Anwendung kann die Listenstrukturen anhängen, die nur einem Teil der in XrSpatialComponentDataQueryConditionEXT :: componentTypes aufgeführten Komponenten entsprechen . Die Anwendung kann die Listenstrukturen auch ganz weglassen, wenn sie nur die IDs und den Tracking-Status der räumlichen Einheiten wissen möchte, die queryCondition erfüllen . Die Laufzeit darf das Fehlen von Listenstrukturen in der XrSpatialComponentDataQueryResultEXT :: next-Kette nicht als Fehler behandeln.
Wenn XrEventDataReferenceSpaceChangePending in der Warteschlange steht und XrEventDataReferenceSpaceChangePending :: changeTime verstrichen ist, während die Anwendung Komponentendaten aus einem XrSpatialSnapshotEXT abfragt, kann die Anwendung die Ereignisdaten verwenden, um die Posen entsprechend anzupassen.
Die Laufzeit muss XrSpatialComponentDataQueryResultEXT :: entityIds nur mit Entitäten füllen, die alle in XrSpatialComponentDataQueryConditionEXT :: componentTypes angegebenen Komponenten haben . Wenn XrSpatialComponentDataQueryConditionEXT :: componentTypeCount gleich 0 ist, muss die Laufzeit queryResult mit allen Entitäten (und ihren Tracking-Status) im Snapshot füllen. Wenn XrSpatialComponentDataQueryConditionEXT :: next zusätzliche Abfragebedingungen hinzugefügt werden, muss die Laufzeit diese als „AND“ mit der Verfügbarkeit der Komponententypen behandeln. Das bedeutet, dass die Laufzeit XrSpatialComponentDataQueryResultEXT ::entityIds nur mit Entitäten füllen darf, die alle angegebenen Bedingungen erfüllen. Die Laufzeit muss die Komponentendaten in den Listenstrukturen in derselben Reihenfolge wie die Entitäten in XrSpatialComponentDataQueryResultEXT :: entityIds einfügen. Das bedeutet, dass die Komponentendaten an einem bestimmten Index im Listenstruktur-Array muss der Entität am selben Index entsprechen.
Wenn der Tracking-Status für eine Entität nicht XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT ist, darf die Laufzeit die Daten am Index, der dieser Entität im Array in den Listenstrukturen entspricht, die an XrSpatialComponentDataQueryResultEXT angehängt sind, nicht ändern .
Gültige Nutzung (implizit)
- Die
XR_EXT_spatial_entity-Erweiterung muss aktiviert sein, bevor xrQuerySpatialComponentDataEXT aufgerufen wird. -
snapshotmuss ein gültiger XrSpatialSnapshotEXT-Handle sein -
queryConditionmuss ein Zeiger auf eine gültige XrSpatialComponentDataQueryConditionEXT-Struktur sein. -
queryResultmuss ein Zeiger auf eine XrSpatialComponentDataQueryResultEXT-Struktur sein.
Rückgabecodes
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_VALIDATION_FAILURE
Die Anwendung erstellt beispielsweise einen XrSpatialSnapshotEXT, der 5 Entitäten enthält:
- Die Einheiten 1 und 2 haben die Komponenten
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTundXR_SPATIAL_COMPONENT_TYPE_PARENT_EXT. - Die Einheiten 3 und 4 haben die Komponenten
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTundXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT. - Entität 5 hat die Komponenten
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTundXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
1
1
2
2
3
3
4
4
5
5
Bounded2D
Bounded2D
Ja
Ja
Ja
Ja
Nein
Nein
Nein
Nein
Ja
Ja
Elternteil
Elternteil
Ja
Ja
Ja
Ja
Nein
Nein
Nein
Nein
Nein
Nein
Mesh3D
Mesh3D
Nein
Nein
Nein
Nein
Ja
Ja
Ja
Ja
Ja
Ja
Bounded3D
Bounded3D
Nein
Nein
Nein
Nein
Ja
Ja
Ja
Ja
Nein
Kein Text is not SVG - cannot display
Abbildung 20: Beispiel für einen Snapshot
xrQuerySpatialComponentDataEXT für den oben genannten Snapshot mit XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT in der Abfragebedingung führt dazu, dass die Entitäten 1, 2 und 5 an die Anwendung zurückgegeben werden und die Anwendung kann ein Array von XrSpatialBounded2DDataEXT als Teil der XrSpatialComponentBounded2DListEXT-Struktur an die nächste Kette von XrSpatialComponentDataQueryResultEXT anhängen, um die bounded2D-Daten abzurufen.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
1
1
2
2
5
5
Bounded2D
Bounded2D
Daten für entityId #1
Daten für…
Daten für entityId #2
Daten für…
Daten für entityId #5
Daten für…
entityIds
entityIds
Weiter
Weiter
XrSpatialComponent DataQueryResultEXT
XrSpatialComponent Dat...
Grenzwerte
Grenzwerte
XrSpatialComponent Bounded2DListEXT
XrSpatialComponent Bou... Text is not SVG - cannot display (Text ist kein SVG-Element – kann nicht angezeigt werden)
Abbildung 21: Beispiel für ein Abfrageergebnis
xrQuerySpatialComponentDataEXT für den oben genannten Snapshot mit den in der Abfragebedingung aufgeführten Komponenten XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT und XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT führt dazu, dass die Entitäten 3 und 4 an die Anwendung zurückgegeben werden und die Anwendung kann Arrays von XrBoxf und XrSpatialMeshDataEXT als Teil der Strukturen XrSpatialComponentBounded3DListEXT bzw. XrSpatialComponentMesh3DListEXT an die nächste Kette von XrSpatialComponentDataQueryResultEXT anhängen, um die Komponentendaten abzurufen.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
3
3
4
4
Bounded3D
Bounded3D
Daten für entityId 3
Daten für…
Daten für entityId #4
Daten für…
Mesh3D
Mesh3D
Daten für entityId 3
Daten für…
Daten für entityId #4
Daten für…
entityIds
entityIds
Weiter
Weiter
XrSpatialComponent DataQueryResultEXT
XrSpatialComponent Da...
Grenzwerte
Grenzwerte
Weiter
Weiter
XrSpatialComponent Bounded3DListEXT
XrSpatialComponent Bo...
XrSpatialComponent Mesh3DListEXT
XrSpatialComponent Me...
Mesh-Netzwerke
meshes Text is not SVG - cannot display (meshes Text ist kein SVG-Element – kann nicht angezeigt werden)
Abbildung 22: Beispiel für ein Abfrageergebnis
Die Struktur XrSpatialComponentDataQueryConditionEXT ist so definiert:
typedef struct XrSpatialComponentDataQueryConditionEXT {
XrStructureType type;
const void* next;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialComponentDataQueryConditionEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.componentTypeCountist einuint32_t, das die Anzahl der Elemente imcomponentTypes-Array beschreibt.componentTypesist ein Array von XrSpatialComponentTypeEXT, für die die Daten aus dem Snapshot abgerufen werden sollen.
Gültige Nutzung (implizit)
- Die
XR_EXT_spatial_entity-Erweiterung muss aktiviert werden, bevor XrSpatialComponentDataQueryConditionEXT verwendet wird. -
typemussXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein . Siehe auch: XrSpatialDiscoveryPersistenceUuidFilterEXT , XrSpatialFilterArchetypeEXT , XrSpatialFilterTrackingStateEXT - Wenn
componentTypeCountnicht0ist ,componentTypesmuss ein Zeiger auf ein Array voncomponentTypeCountgültigen XrSpatialComponentTypeEXT-Werten sein.
Die Struktur XrSpatialComponentDataQueryResultEXT ist so definiert:
typedef struct XrSpatialComponentDataQueryResultEXT {
XrStructureType type;
void* next;
uint32_t entityIdCapacityInput;
uint32_t entityIdCountOutput;
XrSpatialEntityIdEXT* entityIds;
uint32_t entityStateCapacityInput;
uint32_t entityStateCountOutput;
XrSpatialEntityTrackingStateEXT* entityStates;
} XrSpatialComponentDataQueryResultEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.entityIdCapacityInputist die Kapazität desentityIds-Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.entityIdCountOutputist die Anzahl derXrSpatialEntityIdEXTinentityIdsoder die erforderliche Kapazität , fallsentityIdCapacityInputnicht ausreicht.entityIdsist ein Array vonXrSpatialEntityIdEXT. KannNULLsein, wennentityIdCapacityInput= 0.entityStateCapacityInputist die Kapazität desentityStates-Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.entityStateCountOutputist die Anzahl der XrSpatialEntityTrackingStateEXT inentityStatesoder die erforderliche Kapazität , fallsentityStateCapacityInputnicht ausreicht. Dieser muss immer mitentityIdCountOutputübereinstimmen .entityStatesist ein Array von XrSpatialEntityTrackingStateEXT . KannNULLsein, wennentityStateCapacityInput= 0.- Eine detaillierte Beschreibung zum Abrufen der erforderlichen
entityIds-Größe finden Sie im Abschnitt Puffergrößenparameter.
Eine Anwendung kann die entityIds mit xrCreateSpatialEntityFromIdEXT verwenden, um XrSpatialEntityEXT-Handles für die Entitäten zu erstellen, für die sie regelmäßige Updates erhalten möchte. Die Anwendung kann diese XrSpatialEntityEXT-Handles dann mit xrCreateSpatialUpdateSnapshotEXT verwenden, um einen Aktualisierungs-Snapshot zu erstellen, der die neuesten bekannten Daten der Komponenten für die bereitgestellten Entitäten enthält.
Gültige Nutzung (implizit)
- Die
XR_EXT_spatial_entity-Erweiterung muss aktiviert werden, bevor XrSpatialComponentDataQueryResultEXT verwendet wird. -
typemussXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein . Siehe auch XrSpatialComponentAnchorListEXT , XrSpatialComponentAnnotationQuadListANDROID , XrSpatialComponentBounded2DListEXT , XrSpatialComponentBounded3DListEXT , XrSpatialComponentConfidenceListANDROIDSYS , XrSpatialComponentImage2DListEXT , XrSpatialComponentKeyboardSemanticLabelListEXT , XrSpatialComponentMarkerListEXT , XrSpatialComponentMaterialTypeListANDROIDSYS , XrSpatialComponentMesh2DListEXT , XrSpatialComponentMesh3DListEXT , XrSpatialComponentMesh3DNormalsListEXT , XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT , XrSpatialComponentMesh3DVertexSemanticLabelsListEXT , XrSpatialComponentMouseSemanticLabelListEXT , XrSpatialComponentObjectSemanticLabelListANDROID , XrSpatialComponentObjectSemanticLabelListEXT , XrSpatialComponentOccupancyGridListANDROIDX1 , XrSpatialComponentParentListEXT , XrSpatialComponentPersistenceListEXT , XrSpatialComponentPlaneAlignmentListEXT , XrSpatialComponentPlaneSemanticLabelListEXT , XrSpatialComponentPolygon2DListEXT , XrSpatialComponentRaycastResultListANDROID , XrSpatialComponentRoomEmptinessListANDROIDSYS , XrSpatialComponentRoomListANDROIDSYS , XrSpatialComponentStreetscapeGeometryMetadataListANDROIDX2 , XrSpatialComponentSubsumedByListANDROID - Wenn
entityIdCapacityInputnicht0ist ,entityIdsmuss ein Zeiger auf ein Array vonentityIdCapacityInputXrSpatialEntityIdEXT-Werten sein. - Wenn
entityStateCapacityInputnicht0ist ,entityStatesmuss ein Zeiger auf ein Array vonentityStateCapacityInputXrSpatialEntityTrackingStateEXT-Werten sein.
typedef enum XrSpatialEntityTrackingStateEXT {
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT = 1,
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT = 2,
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT = 3,
XR_SPATIAL_ENTITY_TRACKING_STATE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialEntityTrackingStateEXT;
Die möglichen Tracking-Status für räumliche Einheiten werden in XrSpatialEntityTrackingStateEXT aufgeführt:
Die Enums haben die folgenden Bedeutungen:
Enum-Beschreibung
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT
Die Laufzeit hat die Verfolgung dieses Elements beendet und wird sie nie wieder aufnehmen.
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT
Die Laufzeit hat die Erfassung dieses Elements pausiert, kann sie aber in Zukunft wieder aufnehmen.
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT
Die Laufzeit verfolgt diese Einheit derzeit und ihre Komponentendaten sind gültig.
Tracking
PAUSIERT
ANGEHALTEN
Abbildung 23: XrSpatialEntityTrackingStateEXT
- Die Laufzeit kann den Status der räumlichen Einheit von
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTinXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTändern, wenn die Erfassung dieser räumlichen Einheit unterbrochen wird, aber die Möglichkeit besteht, die Erfassung in Zukunft fortzusetzen. Einige Beispiele dafür, wann die Laufzeit dies möglicherweise tut, sind (aber nicht beschränkt auf): wenn die Anwendung den Eingabefokus verliert, wenn die angegebene räumliche Einheit zu weit vom Nutzer entfernt ist, um genau verfolgt zu werden, oder wenn zu viele Einheiten verfolgt werden und die Laufzeit die Kosten für die Verfolgung senken möchte. XrSpatialEntityTrackingStateEXT hilft der Anwendung, sich vor den unterschiedlichen Trackingrichtlinien der einzelnen Laufzeiten zu schützen. - Die Laufzeit kann den Status einer Entität von
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTinXR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXToderXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXTändern . - Die Laufzeit muss den Status der räumlichen Einheit von
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXToderXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTinXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXTändern, wenn die räumliche Einheit verloren geht und die Nachverfolgung nie wiederhergestellt oder fortgesetzt wird. Ein Beispiel für einen solchen Fall wäre, wenn das Gerät das Tracking verliert, die Tracking-Sitzung neu startet, sich aber nicht in seiner Umgebung neu lokalisieren kann und daher erkannte Entitäten dieser Tracking-Sitzung als neue Entitäten behandelt. - Sobald der Tracking-Status einer Entität auf
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXTfestgelegt ist , darf die Laufzeit ihn niemals in einen anderen Status ändern. - Wenn die Komponentendaten einer räumlichen Einheit mit xrQuerySpatialComponentDataEXT abgefragt werden, muss die Laufzeit gültige Daten in den Inhalten der von der Anwendung bereitgestellten Puffer in der nächsten Kette von XrSpatialComponentDataQueryResultEXT festlegen, wenn der Status der Einheit
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTist . Wenn der EntitätsstatusXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXToderXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTist , darf die Laufzeit den Inhalt der Puffer nicht ändern.
Idiom mit zwei Aufrufen für Komponentendaten
Die Struktur XrSpatialBufferEXT wird so definiert:
typedef struct XrSpatialBufferEXT {
XrSpatialBufferIdEXT bufferId;
XrSpatialBufferTypeEXT bufferType;
} XrSpatialBufferEXT;
Mitgliederbeschreibungen
bufferIddieXrSpatialBufferIdEXTder Pufferdaten.bufferTypeist der XrSpatialBufferTypeEXT, der den Datentyp inbufferIdangibt . Die Anwendung kannbufferTypeverwenden, um zu bestimmen, mit welcher Funktion die tatsächlichen Daten des Puffers abgerufen werden sollen.
Einige räumliche Komponenten haben Daten mit variabler Größe und erfordern daher die Verwendung des Two-Call-Idioms, um ihre Daten abzurufen. In solchen Fällen stellt die Datenstruktur der räumlichen Komponente für jeden Puffer mit variabler Größe, der in den Daten dieser Komponente benötigt wird, einen XrSpatialBufferEXT bereit.
Für dieselbe bufferId muss die Laufzeit dieselben Daten aus einer Komponentendatenabfrage für eine andere bereitstellen, auch von einem Snapshot zum nächsten. Eine andere bufferId zwischen den Aufrufen der Komponentendatenabfrage weist die Anwendung darauf hin, dass sich die Daten für diese Komponente möglicherweise geändert haben.
Gültige Nutzung (implizit)
- Die
XR_EXT_spatial_entity-Erweiterung muss aktiviert werden, bevor XrSpatialBufferEXT verwendet wird. -
bufferTypemuss ein gültiger XrSpatialBufferTypeEXT-Wert sein.
XR_DEFINE_ATOM(XrSpatialBufferIdEXT)
XrSpatialBufferIdEXT wird verwendet, um Daten beliebiger Größe für eine räumliche Komponente darzustellen.
Die Laufzeit muss das XrSpatialBufferIdEXT und seine Daten mindestens für den Lebenszyklus des XrSpatialSnapshotEXT, das es enthält, im Arbeitsspeicher behalten. Die Laufzeit kann die XrSpatialBufferIdEXT und ihre Daten länger als den Lebenszyklus von XrSpatialSnapshotEXT im Arbeitsspeicher behalten, um dieselbe ID als Teil von Snapshots zurückzugeben, die später von der Anwendung erstellt werden. Für dieselbe XrSpatialBufferIdEXT muss die Laufzeit immer dieselben Daten über die entsprechende xrGetSpatialBuffer*-Funktion zurückgeben.
typedef enum XrSpatialBufferTypeEXT {
XR_SPATIAL_BUFFER_TYPE_UNKNOWN_EXT = 0,
XR_SPATIAL_BUFFER_TYPE_STRING_EXT = 1,
XR_SPATIAL_BUFFER_TYPE_UINT8_EXT = 2,
XR_SPATIAL_BUFFER_TYPE_UINT16_EXT = 3,
XR_SPATIAL_BUFFER_TYPE_UINT32_EXT = 4,
XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT = 5,
XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT = 6,
XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT = 7,
XR_SPATIAL_BUFFER_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialBufferTypeEXT;
Die Enumeration XrSpatialBufferTypeEXT gibt die verschiedenen Datentypen des Puffers an, der durch XrSpatialBufferIdEXT dargestellt wird .
Beschreibungen der Aufzählungstypen
XR_SPATIAL_BUFFER_TYPE_STRING_EXT. DerXrSpatialBufferIdEXTkann an xrGetSpatialBufferStringEXT übergeben werden, um einen Stringpuffer abzurufen.XR_SPATIAL_BUFFER_TYPE_UINT8_EXT. DerXrSpatialBufferIdEXTcan kann an xrGetSpatialBufferUint8EXT übergeben werden, um einenuint8_t-Puffer abzurufen.XR_SPATIAL_BUFFER_TYPE_UINT16_EXT. DerXrSpatialBufferIdEXTkann an xrGetSpatialBufferUint16EXT übergeben werden, um einenuint16_t-Puffer abzurufen.XR_SPATIAL_BUFFER_TYPE_UINT32_EXT. DerXrSpatialBufferIdEXTkann an xrGetSpatialBufferUint32EXT übergeben werden, um einenuint32_t-Puffer abzurufen.XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT. DerXrSpatialBufferIdEXTkann an xrGetSpatialBufferFloatEXT übergeben werden, um einenfloat-Puffer abzurufen.XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT. DerXrSpatialBufferIdEXTkann an xrGetSpatialBufferVector2fEXT übergeben werden, um einen XrVector2f-Puffer abzurufen.XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT. DerXrSpatialBufferIdEXTkann an xrGetSpatialBufferVector3fEXT übergeben werden, um einen XrVector3f-Puffer abzurufen.
Die Funktion xrGetSpatialBufferStringEXT ist so definiert:
XrResult xrGetSpatialBufferStringEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
char* buffer);
Parameterbeschreibungen
snapshotist ein Handle für einen XrSpatialSnapshotEXT .infoenthält die Informationen zum abzufragenden Puffer.bufferCapacityInputist die Kapazität des Arrays oder 0, um die erforderliche Kapazität abzurufen.bufferCountOutputist die Anzahl der Zeichen oder die erforderliche Kapazität, fallsbufferCapacityInputnicht ausreicht.bufferist ein Array vonchar. KannNULLsein, wennbufferCapacityInput= 0.- Eine detaillierte Beschreibung zum Abrufen der erforderlichen
buffer-Größe finden Sie im Abschnitt Puffergrößenparameter.
Die Anwendung kann die Daten für einen von einer Komponente bereitgestellten XrSpatialBufferEXT abrufen, wobei XrSpatialBufferEXT :: bufferType XR_SPATIAL_BUFFER_TYPE_STRING_EXT ist, indem xrGetSpatialBufferStringEXT verwendet wird .
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE zurückgeben, wenn der XrSpatialBufferTypeEXT für XrSpatialBufferGetInfoEXT :: bufferId nicht XR_SPATIAL_BUFFER_TYPE_STRING_EXT ist .
Die Laufzeit muss XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT zurückgeben, wenn XrSpatialBufferGetInfoEXT :: bufferId nicht zu snapshot gehört .
buffer, das von der Laufzeitumgebung ausgefüllt wird, muss ein nullterminierter UTF-8-String sein.
Gültige Nutzung (implizit)
- Die
XR_EXT_spatial_entity-Erweiterung muss aktiviert sein, bevor xrGetSpatialBufferStringEXT aufgerufen wird. -
snapshotmuss ein gültiger XrSpatialSnapshotEXT-Handle sein -
infomuss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein. -
bufferCountOutputmuss ein Zeiger auf einenuint32_t-Wert sein. - Wenn
bufferCapacityInputnicht0ist ,buffermuss ein Zeiger auf ein Array vonbufferCapacityInput-Zeichenwerten sein.
Rückgabecodes
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Die Funktion xrGetSpatialBufferUint8EXT ist so definiert:
XrResult xrGetSpatialBufferUint8EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint8_t* buffer);
Parameterbeschreibungen
snapshotist ein Handle für einen XrSpatialSnapshotEXT .infoenthält die Informationen zum abzufragenden Puffer.bufferCapacityInputist die Kapazität des Arrays oder 0, um die erforderliche Kapazität abzurufen.bufferCountOutputist die Anzahl der Elemente imbuffer-Array oder die erforderliche Kapazität, fallsbufferCapacityInputnicht ausreicht.bufferist ein Array vonuint8_t. KannNULLsein, wennbufferCapacityInput= 0.- Eine detaillierte Beschreibung zum Abrufen der erforderlichen
buffer-Größe finden Sie im Abschnitt Puffergrößenparameter.
Die Anwendung kann die Daten für einen von einer Komponente bereitgestellten XrSpatialBufferEXT abrufen, wobei XrSpatialBufferEXT :: bufferType XR_SPATIAL_BUFFER_TYPE_UINT8_EXT ist, indem xrGetSpatialBufferUint8EXT verwendet wird .
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE zurückgeben, wenn der XrSpatialBufferTypeEXT für XrSpatialBufferGetInfoEXT :: bufferId nicht XR_SPATIAL_BUFFER_TYPE_UINT8_EXT ist .
Die Laufzeit muss XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT zurückgeben, wenn XrSpatialBufferGetInfoEXT :: bufferId nicht zu snapshot gehört .
Gültige Nutzung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert sein, bevor xrGetSpatialBufferUint8EXT aufgerufen wird. -
snapshotmuss ein gültiger XrSpatialSnapshotEXT-Handle sein -
infomuss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein. -
bufferCountOutputmuss ein Zeiger auf einenuint32_t-Wert sein. - Wenn
bufferCapacityInputnicht0ist ,buffermuss ein Zeiger auf ein Array vonbufferCapacityInputuint8_t-Werten sein.
Rückgabecodes
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Die Funktion xrGetSpatialBufferUint16EXT ist so definiert:
XrResult xrGetSpatialBufferUint16EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint16_t* buffer);
Parameterbeschreibungen
snapshotist ein Handle für einen XrSpatialSnapshotEXT .infoenthält die Informationen zum abzufragenden Puffer.bufferCapacityInputist die Kapazität des Arrays oder 0, um die erforderliche Kapazität abzurufen.bufferCountOutputist die Anzahl der Elemente imbuffer-Array oder die erforderliche Kapazität, fallsbufferCapacityInputnicht ausreicht.bufferist ein Array vonuint16_t. KannNULLsein, wennbufferCapacityInput= 0.- Eine detaillierte Beschreibung zum Abrufen der erforderlichen
buffer-Größe finden Sie im Abschnitt Puffergrößenparameter.
Die Anwendung kann die Daten für einen XrSpatialBufferEXT abrufen, der von einer Komponente bereitgestellt wird, wobei XrSpatialBufferEXT :: bufferType XR_SPATIAL_BUFFER_TYPE_UINT16_EXT ist, indem xrGetSpatialBufferUint16EXT verwendet wird .
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE zurückgeben, wenn der XrSpatialBufferTypeEXT für XrSpatialBufferGetInfoEXT :: bufferId nicht XR_SPATIAL_BUFFER_TYPE_UINT16_EXT ist .
Die Laufzeit muss XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT zurückgeben, wenn XrSpatialBufferGetInfoEXT :: bufferId nicht zu snapshot gehört .
Gültige Nutzung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert sein, bevor xrGetSpatialBufferUint16EXT aufgerufen wird. -
snapshotmuss ein gültiger XrSpatialSnapshotEXT-Handle sein -
infomuss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein. -
bufferCountOutputmuss ein Zeiger auf einenuint32_t-Wert sein. - Wenn
bufferCapacityInputnicht0ist ,buffermuss ein Zeiger auf ein Array vonbufferCapacityInputuint16_t-Werten sein.
Rückgabecodes
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Die Funktion xrGetSpatialBufferUint32EXT ist so definiert:
XrResult xrGetSpatialBufferUint32EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint32_t* buffer);
Parameterbeschreibungen
snapshotist ein Handle für einen XrSpatialSnapshotEXT .infoenthält die Informationen zum abzufragenden Puffer.bufferCapacityInputist die Kapazität des Arrays oder 0, um die erforderliche Kapazität abzurufen.bufferCountOutputist die Anzahl der Elemente imbuffer-Array oder die erforderliche Kapazität, fallsbufferCapacityInputnicht ausreicht.bufferist ein Array vonuint32_t. KannNULLsein, wennbufferCapacityInput= 0.- Eine detaillierte Beschreibung zum Abrufen der erforderlichen
buffer-Größe finden Sie im Abschnitt Puffergrößenparameter.
Die Anwendung kann die Daten für einen von einer Komponente bereitgestellten XrSpatialBufferEXT abrufen, wobei XrSpatialBufferEXT :: bufferType XR_SPATIAL_BUFFER_TYPE_UINT32_EXT ist, indem xrGetSpatialBufferUint32EXT verwendet wird .
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE zurückgeben, wenn der XrSpatialBufferTypeEXT für XrSpatialBufferGetInfoEXT :: bufferId nicht XR_SPATIAL_BUFFER_TYPE_UINT32_EXT ist .
Die Laufzeit muss XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT zurückgeben, wenn XrSpatialBufferGetInfoEXT :: bufferId nicht zu snapshot gehört .
Gültige Nutzung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert sein, bevor xrGetSpatialBufferUint32EXT aufgerufen wird. -
snapshotmuss ein gültiger XrSpatialSnapshotEXT-Handle sein -
infomuss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein. -
bufferCountOutputmuss ein Zeiger auf einenuint32_t-Wert sein. - Wenn
bufferCapacityInputnicht0ist ,buffermuss ein Zeiger auf ein Array vonbufferCapacityInputuint32_t-Werten sein.
Rückgabecodes
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Die Funktion xrGetSpatialBufferFloatEXT ist so definiert:
XrResult xrGetSpatialBufferFloatEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
float* buffer);
Parameterbeschreibungen
snapshotist ein Handle für einen XrSpatialSnapshotEXT .infoenthält die Informationen zum abzufragenden Puffer.bufferCapacityInputist die Kapazität des Arrays oder 0, um die erforderliche Kapazität abzurufen.bufferCountOutputist die Anzahl der Elemente imbuffer-Array oder die erforderliche Kapazität, fallsbufferCapacityInputnicht ausreicht.bufferist ein Array vonfloat. KannNULLsein, wennbufferCapacityInput= 0.- Eine detaillierte Beschreibung zum Abrufen der erforderlichen
buffer-Größe finden Sie im Abschnitt Puffergrößenparameter.
Die Anwendung kann die Daten für einen von einer Komponente bereitgestellten XrSpatialBufferEXT abrufen, wobei XrSpatialBufferEXT :: bufferType XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT ist, indem xrGetSpatialBufferFloatEXT verwendet wird .
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE zurückgeben, wenn der XrSpatialBufferTypeEXT für XrSpatialBufferGetInfoEXT :: bufferId nicht XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT ist .
Die Laufzeit muss XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT zurückgeben, wenn XrSpatialBufferGetInfoEXT :: bufferId nicht zu snapshot gehört .
Gültige Nutzung (implizit)
- Die
XR_EXT_spatial_entity-Erweiterung muss aktiviert sein, bevor xrGetSpatialBufferFloatEXT aufgerufen wird. -
snapshotmuss ein gültiger XrSpatialSnapshotEXT-Handle sein -
infomuss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein. -
bufferCountOutputmuss ein Zeiger auf einenuint32_t-Wert sein. - Wenn
bufferCapacityInputnicht0ist ,buffermuss ein Zeiger auf ein Array vonbufferCapacityInputfloat-Werten sein.
Rückgabecodes
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Die Funktion xrGetSpatialBufferVector2fEXT ist so definiert:
XrResult xrGetSpatialBufferVector2fEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
XrVector2f* buffer);
Parameterbeschreibungen
snapshotist ein Handle für einen XrSpatialSnapshotEXT .infoenthält die Informationen zum abzufragenden Puffer.bufferCapacityInputist die Kapazität des Arrays oder 0, um die erforderliche Kapazität abzurufen.bufferCountOutputist die Anzahl der Elemente imbuffer-Array oder die erforderliche Kapazität, fallsbufferCapacityInputnicht ausreicht.bufferist ein Array von XrVector2f . KannNULLsein, wennbufferCapacityInput= 0.- Eine detaillierte Beschreibung zum Abrufen der erforderlichen
buffer-Größe finden Sie im Abschnitt Puffergrößenparameter.
Die Anwendung kann die Daten für einen von einer Komponente bereitgestellten XrSpatialBufferEXT abrufen, wobei XrSpatialBufferEXT :: bufferType XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT ist, indem xrGetSpatialBufferVector2fEXT verwendet wird .
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE zurückgeben, wenn der XrSpatialBufferTypeEXT für XrSpatialBufferGetInfoEXT :: bufferId nicht XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT ist .
Die Laufzeit muss XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT zurückgeben, wenn XrSpatialBufferGetInfoEXT :: bufferId nicht zu snapshot gehört .
Gültige Nutzung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor xrGetSpatialBufferVector2fEXT aufgerufen wird. -
snapshotmuss ein gültiger XrSpatialSnapshotEXT-Handle sein -
infomuss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein. -
bufferCountOutputmuss ein Zeiger auf einenuint32_t-Wert sein. - Wenn
bufferCapacityInputnicht0ist ,buffermuss ein Zeiger auf ein Array vonbufferCapacityInputXrVector2f-Strukturen sein.
Rückgabecodes
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Die Funktion xrGetSpatialBufferVector3fEXT ist so definiert:
XrResult xrGetSpatialBufferVector3fEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
XrVector3f* buffer);
Parameterbeschreibungen
snapshotist ein Handle für einen XrSpatialSnapshotEXT .infoenthält die Informationen zum abzufragenden Puffer.bufferCapacityInputist die Kapazität des Arrays oder 0, um die erforderliche Kapazität abzurufen.bufferCountOutputist die Anzahl der Elemente imbuffer-Array oder die erforderliche Kapazität, fallsbufferCapacityInputnicht ausreicht.bufferist ein Array von XrVector3f . KannNULLsein, wennbufferCapacityInput= 0.- Eine detaillierte Beschreibung zum Abrufen der erforderlichen
buffer-Größe finden Sie im Abschnitt Puffergrößenparameter.
Die Anwendung kann die Daten für einen XrSpatialBufferEXT abrufen, der von einer Komponente bereitgestellt wird, wobei XrSpatialBufferEXT :: bufferType XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT ist, indem xrGetSpatialBufferVector3fEXT verwendet wird .
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE zurückgeben, wenn der XrSpatialBufferTypeEXT für XrSpatialBufferGetInfoEXT :: bufferId nicht XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT ist .
Die Laufzeit muss XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT zurückgeben, wenn XrSpatialBufferGetInfoEXT :: bufferId nicht zu snapshot gehört .
Gültige Nutzung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor xrGetSpatialBufferVector3fEXT aufgerufen wird. -
snapshotmuss ein gültiger XrSpatialSnapshotEXT-Handle sein -
infomuss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein. -
bufferCountOutputmuss ein Zeiger auf einenuint32_t-Wert sein. - : Wenn
bufferCapacityInputnicht0ist ,buffermuss ein Zeiger auf ein Array vonbufferCapacityInputXrVector3f-Strukturen sein.
Rückgabecodes
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Die Struktur XrSpatialBufferGetInfoEXT ist so definiert:
typedef struct XrSpatialBufferGetInfoEXT {
XrStructureType type;
const void* next;
XrSpatialBufferIdEXT bufferId;
} XrSpatialBufferGetInfoEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.bufferIdeinXrSpatialBufferIdEXTfür den Puffer, dessen Daten abgerufen werden sollen.
Gültige Nutzung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert sein, bevor XrSpatialBufferGetInfoEXT verwendet wird. -
typemussXR_TYPE_SPATIAL_BUFFER_GET_INFO_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.
#define XR_NULL_SPATIAL_BUFFER_ID_EXT 0
XR_NULL_SPATIAL_BUFFER_ID_EXT ist ein reservierter Wert, der eine ungültige XrSpatialBufferIdEXT darstellt . Sie dürfen nur dann an API-Funktionen übergeben und von diesen zurückgegeben werden, wenn dies ausdrücklich zulässig ist.
Update-Snapshot erstellen
Die Funktion xrCreateSpatialUpdateSnapshotEXT ist so definiert:
XrResult xrCreateSpatialUpdateSnapshotEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialUpdateSnapshotCreateInfoEXT* createInfo,
XrSpatialSnapshotEXT* snapshot);
Parameterbeschreibungen
spatialContextist ein XrSpatialContextEXT, das zuvor mit xrCreateSpatialContextAsyncEXT erstellt wurde .createInfoist ein Zeiger auf ein XrSpatialUpdateSnapshotCreateInfoEXT .snapshotist ein Zeiger auf das Ergebnis XrSpatialSnapshotEXT .
Die Anwendung kann xrCreateSpatialUpdateSnapshotEXT verwenden, um einen Snapshot zu erstellen und die neuesten Komponentendaten für bestimmte Entitäten abzurufen, die von der Laufzeit bekannt sind. Anwendungen können die XrSpatialEntityEXT-Handles und die Komponententypen angeben, die sie beim Erstellen des Snapshots benötigen.
Die Anwendung kann XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes verwenden, um die Liste der Komponenten zu filtern, deren Daten im Snapshot enthalten sein müssen. Wenn die Anwendung eine gültige Liste von räumlichen Komponententypen in XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes bereitstellt, muss die Laufzeit nur räumliche Einheiten in den Snapshot aufnehmen, die mindestens eine der in XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes bereitgestellten Komponenten haben . Außerdem muss die Laufzeit nur Daten für diese Komponenten im Snapshot enthalten.
Die Laufzeit muss XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT zurückgeben, wenn eine der XrSpatialComponentTypeEXT in XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes nicht für die räumlichen Funktionen aktiviert ist, die beim Erstellen von spatialContext an XrSpatialContextCreateInfoEXT :: capabilityConfigs übergeben werden .
Wenn die Anwendung keine Liste der räumlichen Komponententypen in XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes bereitstellt, muss die Laufzeit alle räumlichen Einheiten, die in XrSpatialUpdateSnapshotCreateInfoEXT :: entities aufgeführt sind, in den Snapshot aufnehmen und muss die Daten für alle aktivierten Komponenten der für spatialContext konfigurierten Funktionen enthalten .
Die Laufzeit darf keine räumlichen Einheiten enthalten, die nicht in XrSpatialUpdateSnapshotCreateInfoEXT :: entities in snapshot aufgeführt sind .
Die Anwendung kann beliebig viele Snapshots erstellen, muss jedoch den für jeden neuen Snapshot zugewiesenen Speicherplatz berücksichtigen und die Snapshots muss löschen, sobald sie nicht mehr benötigt werden.
Gültige Nutzung (implizit)
- Die
XR_EXT_spatial_entity-Erweiterung muss aktiviert sein, bevor xrCreateSpatialUpdateSnapshotEXT aufgerufen wird. -
spatialContextmuss ein gültiger XrSpatialContextEXT-Handle sein. -
createInfomuss ein Zeiger auf eine gültige XrSpatialUpdateSnapshotCreateInfoEXT-Struktur sein. -
snapshotmuss ein Zeiger auf ein XrSpatialSnapshotEXT-Handle sein.
Rückgabecodes
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
Die Struktur XrSpatialUpdateSnapshotCreateInfoEXT ist so definiert:
typedef struct XrSpatialUpdateSnapshotCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t entityCount;
const XrSpatialEntityEXT* entities;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
XrSpace baseSpace;
XrTime time;
} XrSpatialUpdateSnapshotCreateInfoEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht definiert.entityCountist einuint32_t, das die Anzahl der Elemente imentities-Array beschreibt.entitiesist ein Array von XrSpatialEntityEXT, für die die Laufzeit muss die Komponentendaten in den Snapshot aufnehmen.componentTypeCountist einuint32_t, das die Anzahl der Elemente imcomponentTypes-Array beschreibt.componentTypesist ein Array von XrSpatialComponentTypeEXT, für die die Laufzeit die Daten einbeziehen muss.baseSpaceist der XrSpace, relativ zu dem sich alle Positionen des Updates XrSpatialSnapshotEXT befinden.timeist dieXrTime, an der sich alle Standorte des Updates XrSpatialSnapshotEXT befinden.
Gültige Nutzung (implizit)
- Die
XR_EXT_spatial_entity-Erweiterung muss aktiviert werden, bevor XrSpatialUpdateSnapshotCreateInfoEXT verwendet wird. -
typemussXR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
entitiesmuss ein Zeiger auf ein Array vonentityCountgültigen XrSpatialEntityEXT-Handles sein. - Wenn
componentTypeCountnicht0ist ,componentTypesmuss ein Zeiger auf ein Array voncomponentTypeCountgültigen XrSpatialComponentTypeEXT-Werten sein. -
baseSpacemuss ein gültiger XrSpace-Handle sein. - Der Parameter
entityCountmuss größer als0sein. - Sowohl
baseSpaceals auch die Elemente vonentitiesmüssen in derselben XrSession erstellt, zugewiesen oder abgerufen worden sein.
Snapshot löschen
Die Funktion xrDestroySpatialSnapshotEXT ist so definiert:
XrResult xrDestroySpatialSnapshotEXT(
XrSpatialSnapshotEXT snapshot);
Parameterbeschreibungen
snapshotist ein XrSpatialSnapshotEXT, das zuvor von xrCreateSpatialDiscoverySnapshotCompleteEXT oder xrCreateSpatialUpdateSnapshotEXT bereitgestellt wurde .
Die Anwendung kann xrDestroySpatialSnapshotEXT aufrufen, um das Handle XrSpatialSnapshotEXT und die zugehörigen Ressourcen zu löschen.
Gültige Nutzung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor xrDestroySpatialSnapshotEXT aufgerufen wird. -
snapshotmuss ein gültiger XrSpatialSnapshotEXT-Handle sein
Threadsicherheit
- Der Zugriff auf
snapshotund alle untergeordneten Handles muss extern synchronisiert werden.
Rückgabecodes
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Allgemeine Komponenten
Begrenzte 2D-Ansicht
Komponentendaten
Die Struktur XrSpatialBounded2DDataEXT ist so definiert:
typedef struct XrSpatialBounded2DDataEXT {
XrPosef center;
XrExtent2Df extents;
} XrSpatialBounded2DDataEXT;
Mitgliederbeschreibungen
centerist ein XrPosef, der den geometrischen Mittelpunkt der begrenzten 2D-Komponente definiert.extentsist die Ausdehnung der begrenzten 2D-Komponente entlang der x-Achse (extents.width) und der y-Achse (extents.height), zentriert aufcenter.
Die extents des XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT beziehen sich auf die Größe der Einheit in der XY-Ebene des Koordinatensystems der Ebene. Eine Ebene mit der Position {0, 0, 0}, der Rotation {0, 0, 0, 1} (keine Rotation) und der Ausdehnung {1, 1} bezieht sich auf eine 1 Meter × 1 Meter große Ebene, die auf {0, 0, 0} zentriert ist und deren Normalenvektor der Vorderseite in Richtung der +Z-Richtung im Raum der Komponente zeigt.
X X Y Y Z Z Höhe Höhe Y Y Z Z X X Vertikale Ebene Vertikale Ebene Horizontale Ebene Horizontale Ebene Breite Breite Breite Breite Höhe Höhe
Abbildung 24: Koordinatensystem der Komponente „Bounded2D“
Hinweis
OpenXR verwendet eine XY-Ebene mit +Z als Ebenennormal, andere APIs verwenden möglicherweise eine XZ-Ebene mit +Y als Ebenennormal. Die XY-Ebene kann in eine XZ-Ebene umgewandelt werden, indem sie um -π/2 Radiant um die +X-Achse gedreht wird.
Gültige Nutzung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor XrSpatialBounded2DDataEXT verwendet wird.
Komponentenlistenstruktur zum Abfragen von Daten
Die Struktur XrSpatialComponentBounded2DListEXT ist so definiert:
typedef struct XrSpatialComponentBounded2DListEXT {
XrStructureType type;
void* next;
uint32_t boundCount;
XrSpatialBounded2DDataEXT* bounds;
} XrSpatialComponentBounded2DListEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht definiert.boundCountist einuint32_t, das die Anzahl der Elemente imbounds-Array beschreibt.boundsist ein Array von XrSpatialBounded2DDataEXT .
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE von xrQuerySpatialComponentDataEXT zurückgeben, wenn XrSpatialComponentBounded2DListEXT in der nächsten Kette von XrSpatialComponentDataQueryResultEXT :: next ist, aber XrSpatialComponentDataQueryConditionEXT ::componentTypeCount nicht null ist und XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT nicht in XrSpatialComponentDataQueryConditionEXT :: componentTypes enthalten ist .
Die Laufzeit muss XR_ERROR_SIZE_INSUFFICIENT von xrQuerySpatialComponentDataEXT zurückgeben, wenn boundCount kleiner als XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput ist .
Wenn xrQuerySpatialComponentDataEXT :: snapshot aus xrCreateSpatialDiscoverySnapshotCompleteEXT erstellt wurde , muss die Laufzeit XrSpatialBounded2DDataEXT :: center in XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace und XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time bereitstellen.
Wenn xrQuerySpatialComponentDataEXT :: snapshot aus xrCreateSpatialUpdateSnapshotEXT erstellt wurde , muss die Laufzeit XrSpatialBounded2DDataEXT :: center in XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace und XrSpatialUpdateSnapshotCreateInfoEXT :: time bereitstellen.
Gültige Nutzung (implizit)
- Die
XR_EXT_spatial_entity-Erweiterung muss aktiviert sein, bevor XrSpatialComponentBounded2DListEXT verwendet wird. -
typemussXR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
boundsmuss ein Zeiger auf ein Array vonboundCountXrSpatialBounded2DDataEXT-Strukturen sein. - Der Parameter
boundCountmuss größer als0sein.
Konfiguration
Wenn XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT in XrSpatialCapabilityComponentTypesEXT :: componentTypes für eine bestimmte Funktion aufgeführt ist, kann die Anwendung sie aktivieren, indem sie den Enum-Wert 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 .
Begrenztes 3D
Komponentendaten
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT verwendet XrBoxf für seine Daten.
Komponentenlistenstruktur zum Abfragen von Daten
Die Struktur XrSpatialComponentBounded3DListEXT ist so definiert:
typedef struct XrSpatialComponentBounded3DListEXT {
XrStructureType type;
void* next;
uint32_t boundCount;
XrBoxf* bounds;
} XrSpatialComponentBounded3DListEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht definiert.boundCountist einuint32_t, das die Anzahl der Elemente imbounds-Array beschreibt.boundsist ein Array von XrBoxf .
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE von xrQuerySpatialComponentDataEXT zurückgeben, wenn XrSpatialComponentBounded3DListEXT in der nächsten Kette von XrSpatialComponentDataQueryResultEXT :: next enthalten ist, aber XrSpatialComponentDataQueryConditionEXT ::componentTypeCount nicht null ist und XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT nicht in XrSpatialComponentDataQueryConditionEXT :: componentTypes enthalten ist .
Die Laufzeit muss XR_ERROR_SIZE_INSUFFICIENT von xrQuerySpatialComponentDataEXT zurückgeben, wenn boundCount kleiner als XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput ist .
Wenn xrQuerySpatialComponentDataEXT :: snapshot aus xrCreateSpatialDiscoverySnapshotCompleteEXT erstellt wurde , muss die Laufzeit XrBoxf :: center in XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace bei XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time bereitstellen .
Wenn xrQuerySpatialComponentDataEXT :: snapshot aus xrCreateSpatialUpdateSnapshotEXT erstellt wurde , muss die Laufzeit XrBoxf :: center in XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace bei XrSpatialUpdateSnapshotCreateInfoEXT :: time bereitstellen .
Gültige Nutzung (implizit)
- Die
XR_EXT_spatial_entity-Erweiterung muss aktiviert sein, bevor XrSpatialComponentBounded3DListEXT verwendet wird. -
typemussXR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
boundsmuss ein Zeiger auf ein Array vonboundCountXrBoxf-Strukturen sein. - Der Parameter
boundCountmuss größer als0sein.
Konfiguration
Wenn XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT in XrSpatialCapabilityComponentTypesEXT :: componentTypes für eine bestimmte Funktion aufgeführt ist, kann die Anwendung sie aktivieren, indem sie die Enumeration 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 .
Elternteil
Komponentendaten
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT verwendet XrSpatialEntityIdEXT für seine Daten.
Komponentenlistenstruktur zum Abfragen von Daten
Die Struktur XrSpatialComponentParentListEXT ist so definiert:
typedef struct XrSpatialComponentParentListEXT {
XrStructureType type;
void* next;
uint32_t parentCount;
XrSpatialEntityIdEXT* parents;
} XrSpatialComponentParentListEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht definiert.parentCountist einuint32_t, das die Anzahl der Elemente imparents-Array beschreibt.parentsist ein Array vonXrSpatialEntityIdEXT.
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE von xrQuerySpatialComponentDataEXT zurückgeben, wenn XrSpatialComponentParentListEXT in der nächsten Kette von XrSpatialComponentDataQueryResultEXT :: next enthalten ist, aber XrSpatialComponentDataQueryConditionEXT ::componentTypeCount nicht null ist und XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT nicht in XrSpatialComponentDataQueryConditionEXT :: componentTypes enthalten ist .
Die Laufzeit muss XR_ERROR_SIZE_INSUFFICIENT von xrQuerySpatialComponentDataEXT zurückgeben, wenn parentCount kleiner als XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput ist .
Gültige Nutzung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor XrSpatialComponentParentListEXT verwendet wird. -
typemussXR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
parentsmuss ein Zeiger auf ein Array vonparentCountXrSpatialEntityIdEXT-Werten sein. - Der Parameter
parentCountmuss größer als0sein.
Konfiguration
Wenn XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT in XrSpatialCapabilityComponentTypesEXT :: componentTypes für eine bestimmte Funktion aufgeführt ist, kann die Anwendung sie aktivieren, indem sie die Enumeration 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 .
Mesh 3D
Komponentendaten
Die Struktur XrSpatialMeshDataEXT ist so definiert:
typedef struct XrSpatialMeshDataEXT {
XrPosef origin;
XrSpatialBufferEXT vertexBuffer;
XrSpatialBufferEXT indexBuffer;
} XrSpatialMeshDataEXT;
Mitgliederbeschreibungen
originist ein XrPosef, der den Ursprung des Mesh definiert. Alle Eckpunkte des Mesh müssen relativ zu diesem Ursprung sein.vertexBufferist ein XrSpatialBufferEXT, der die ID für einen Puffer bereitstellt, der den Vertex-Puffer der Entität darstellt, zu der diese Komponente gehört. Die Position der Eckpunkte muss relativ zuoriginsein .indexBufferist ein XrSpatialBufferEXT, der die ID für einen Puffer mit einem Array von Dreiecksindizes bereitstellt. Diese geben die Indizes der Mesh-Vertices invertexBufferan. Die Dreiecksindizes müssen in der Reihenfolge gegen den Uhrzeigersinn zurückgegeben werden. Drei Indizes stehen für ein Dreieck.
Für den Komponententyp, der XrSpatialMeshDataEXT verwendet, muss der XrSpatialBufferTypeEXT von vertexBuffer und indexBuffer angegeben werden .
Gültige Nutzung (implizit)
- Die
XR_EXT_spatial_entity-Erweiterung muss aktiviert werden, bevor XrSpatialMeshDataEXT verwendet werden kann. -
vertexBuffermuss eine gültige XrSpatialBufferEXT-Struktur sein. -
indexBuffermuss eine gültige XrSpatialBufferEXT-Struktur sein.
Komponentenlistenstruktur zum Abfragen von Daten
Die Struktur XrSpatialComponentMesh3DListEXT ist so definiert:
typedef struct XrSpatialComponentMesh3DListEXT {
XrStructureType type;
void* next;
uint32_t meshCount;
XrSpatialMeshDataEXT* meshes;
} XrSpatialComponentMesh3DListEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.meshCountist einuint32_t, das die Anzahl der Elemente immeshes-Array beschreibt.meshesist ein Array von XrSpatialMeshDataEXT .
Die Anwendung kann die 3D-Mesh-Komponente der räumlichen Einheiten in einem XrSpatialSnapshotEXT abfragen, indem sie XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT in XrSpatialComponentDataQueryConditionEXT :: componentTypes hinzufügt und XrSpatialComponentMesh3DListEXT der Next-Pointer-Kette von XrSpatialComponentDataQueryResultEXT hinzufügt .
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE von xrQuerySpatialComponentDataEXT zurückgeben, wenn XrSpatialComponentMesh3DListEXT in der nächsten Kette von XrSpatialComponentDataQueryResultEXT :: next enthalten ist, aber XrSpatialComponentDataQueryConditionEXT ::componentTypeCount nicht null ist und XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT nicht in XrSpatialComponentDataQueryConditionEXT :: componentTypes enthalten ist .
Die Laufzeit muss XR_ERROR_SIZE_INSUFFICIENT von xrQuerySpatialComponentDataEXT zurückgeben, wenn meshCount kleiner als XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput ist .
Für die XrSpatialMeshDataEXT, die von der Laufzeit im meshes-Array ausgefüllt wird, muss XrSpatialBufferEXT :: bufferType für XrSpatialMeshDataEXT :: vertexBuffer XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT und XrSpatialBufferEXT :: bufferType für XrSpatialMeshDataEXT :: indexBuffer XR_SPATIAL_BUFFER_TYPE_UINT32_EXT sein .
Gültige Nutzung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor XrSpatialComponentMesh3DListEXT verwendet wird. -
typemussXR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
meshesmuss ein Zeiger auf ein Array vonmeshCountXrSpatialMeshDataEXT-Strukturen sein. - Der Parameter
meshCountmuss größer als0sein.
Konfiguration
Wenn XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT in XrSpatialCapabilityComponentTypesEXT :: componentTypes für eine bestimmte Funktion aufgeführt ist, kann die Anwendung sie aktivieren, indem sie die Enumeration in die XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents-Liste der XrSpatialCapabilityConfigurationBaseHeaderEXT-abgeleiteten Struktur der Funktion aufnimmt, die diese Komponente unterstützt.
Für diese Komponente ist keine spezielle Konfiguration erforderlich, um in die nächste Kette von XrSpatialCapabilityConfigurationBaseHeaderEXT aufgenommen zu werden .
Filter für Tracking-Status
Die Struktur XrSpatialFilterTrackingStateEXT ist so definiert:
typedef struct XrSpatialFilterTrackingStateEXT {
XrStructureType type;
const void* next;
XrSpatialEntityTrackingStateEXT trackingState;
} XrSpatialFilterTrackingStateEXT;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.trackingStateist der XrSpatialEntityTrackingStateEXT, für den die Anwendung den Filter anwenden möchte.
Die Anwendung kann XrSpatialFilterTrackingStateEXT in der nächsten Kette von XrSpatialDiscoverySnapshotCreateInfoEXT verwenden, um die Suche auf Entitäten zu beschränken, deren Tracking-Status trackingState ist .
Die Anwendung kann XrSpatialFilterTrackingStateEXT in der nächsten Kette von XrSpatialComponentDataQueryConditionEXT verwenden, um die Komponentendatenabfrage aus einem Snapshot nur auf Entitäten zu beschränken, deren Tracking-Status trackingState ist .
Gültige Nutzung (implizit)
- Die Erweiterung
XR_EXT_spatial_entitymuss aktiviert werden, bevor XrSpatialFilterTrackingStateEXT verwendet wird. -
typemussXR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXTsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. -
trackingStatemuss ein gültiger XrSpatialEntityTrackingStateEXT-Wert sein
Beispielcode
App-Nutzung
Anwendungen verwenden die Erweiterung für räumliche Entitäten in der Regel nach folgendem Muster:
- Eine Anwendung listet zuerst die räumlichen Funktionen des Systems mit xrEnumerateSpatialCapabilitiesEXT auf . Anschließend wird das zurückgegebene Array von XrSpatialCapabilityEXT untersucht und die für jede dieser Funktionen unterstützten Komponenten und Features werden mithilfe von xrEnumerateSpatialCapabilityComponentTypesEXT bzw. xrEnumerateSpatialCapabilityFeaturesEXT aufgelistet. So erhält die Anwendung ein vollständiges Bild der Komponenten, die sie aktivieren kann, und der Konfigurationen, die die Funktion akzeptiert.
- Die Anwendung erstellt dann ein oder mehrere XrSpatialContextEXT-Handles mit spezifischen Konfigurationen für räumliche Funktionen. Die Konfigurationen aktivieren und konfigurieren eine bestimmte Funktion im räumlichen Kontext und aktivieren und konfigurieren Komponenten für diese Funktionen.
- Für jeden XrSpatialContextEXT wartet die Anwendung darauf, XrEventDataSpatialDiscoveryRecommendedEXT-Ereignisse für diesen XrSpatialContextEXT zu empfangen, bevor xrCreateSpatialDiscoverySnapshotAsyncEXT verwendet wird, um räumliche Einheiten zu ermitteln. Sobald dieser asynchrone Vorgang abgeschlossen ist, erhält die Anwendung ein XrSpatialSnapshotEXT-Handle.
- Die Anwendung fragt die in diesem XrSpatialSnapshotEXT enthaltenen Entitäten und Komponentendaten mit xrQuerySpatialComponentDataEXT ab . Die Anwendung liest die neuesten Komponentendaten der abgefragten Entitäten aus Strukturen, die an die nächste Kette von XrSpatialComponentDataQueryResultEXT angehängt sind, wenn der Entitätsstatus
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTist . - Wenn die Anwendung bestimmte Entitäten als interessant identifiziert und im Laufe der Zeit Updates für diese Entitäten erhalten möchte, erstellt sie XrSpatialEntityEXT-Handles für diese Entitäten mit xrCreateSpatialEntityFromIdEXT . Die Anwendung ruft Updates für solche interessanten Objekte mit xrCreateSpatialUpdateSnapshotEXT ab und verwendet dieselbe xrQuerySpatialComponentDataEXT-Funktion für den neu erstellten XrSpatialSnapshotEXT, um die neuesten Komponentendaten für diese Objekte abzurufen.
Räumliche Einheiten ermitteln und Komponentendaten abfragen
Im folgenden Beispielcode wird gezeigt, wie räumliche Einheiten für die Funktion „Foo“ ermittelt und die zugehörigen Komponentendaten abgefragt werden.
/****************************/
/* Capability definition */
/****************************/
// Foo capability has the following components -
// - XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT
#define XR_SPATIAL_CAPABILITY_FOO ((XrSpatialCapabilityEXT)1000740000U)
#define XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_FOO_EXT ((XrStructureType)1000740000U)
// Derives from XrSpatialCapabilityConfigurationBaseHeaderEXT
typedef struct XrSpatialCapabilityConfigurationFooEXT {
XrStructureType type;
const void* XR_MAY_ALIAS next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationFooEXT;
/******************************/
/* End capability definition */
/******************************/
auto waitUntilReady = [](XrFutureEXT future) {
XrFuturePollInfoEXT pollInfo{XR_TYPE_FUTURE_POLL_INFO_EXT};
XrFuturePollResultEXT pollResult{XR_TYPE_FUTURE_POLL_RESULT_EXT};
pollInfo.future = future;
do {
// sleep(1);
CHK_XR(xrPollFutureEXT(instance, &pollInfo, &pollResult));
} while (pollResult.state != XR_FUTURE_STATE_READY_EXT);
};
// Create a spatial spatial context
XrSpatialContextEXT spatialContext{};
{
const std::array<XrSpatialComponentTypeEXT, 1> enabledComponents = {
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT,
};
// Configure Foo capability for the spatial context
XrSpatialCapabilityConfigurationFooEXT fooConfig{XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_FOO_EXT};
fooConfig.capability = XR_SPATIAL_CAPABILITY_FOO;
fooConfig.enabledComponentCount = enabledComponents.size();
fooConfig.enabledComponents = enabledComponents.data();
std::vector<XrSpatialCapabilityConfigurationBaseHeaderEXT*> capabilityConfigs;
capabilityConfigs.push_back(reinterpret_cast<XrSpatialCapabilityConfigurationBaseHeaderEXT*>(&fooConfig));
XrSpatialContextCreateInfoEXT spatialContextCreateInfo{XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT};
spatialContextCreateInfo.capabilityConfigCount = capabilityConfigs.size();
spatialContextCreateInfo.capabilityConfigs = capabilityConfigs.data();
XrFutureEXT createContextFuture;
CHK_XR(xrCreateSpatialContextAsyncEXT(session, &spatialContextCreateInfo, &createContextFuture));
waitUntilReady(createContextFuture);
XrCreateSpatialContextCompletionEXT completion{XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT};
CHK_XR(xrCreateSpatialContextCompleteEXT(session, createContextFuture, &completion));
if (completion.futureResult != XR_SUCCESS) {
return;
}
spatialContext = completion.spatialContext;
}
auto discoverSpatialEntities = [&](XrSpatialContextEXT spatialContext, XrTime time) {
// We want to look for entities that have the following components.
std::array<XrSpatialComponentTypeEXT, 1> snapshotComponents {XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT};
XrSpatialDiscoverySnapshotCreateInfoEXT snapshotCreateInfo{XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT};
snapshotCreateInfo.componentTypeCount = snapshotComponents.size();
snapshotCreateInfo.componentTypes = snapshotComponents.data();
XrFutureEXT future = XR_NULL_FUTURE_EXT;
CHK_XR(xrCreateSpatialDiscoverySnapshotAsyncEXT(spatialContext, &snapshotCreateInfo, &future));
waitUntilReady(future);
XrCreateSpatialDiscoverySnapshotCompletionInfoEXT completionInfo{XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT};
completionInfo.baseSpace = localSpace;
completionInfo.time = time;
completionInfo.future = future;
XrCreateSpatialDiscoverySnapshotCompletionEXT completion{XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT};
CHK_XR(xrCreateSpatialDiscoverySnapshotCompleteEXT(spatialContext, &completionInfo, &completion));
if (completion.futureResult == XR_SUCCESS) {
// Query for the bounded2d component data
XrSpatialComponentTypeEXT componentToQuery = XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT;
XrSpatialComponentDataQueryConditionEXT queryCond{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT};
queryCond.componentTypes = &componentToQuery;
XrSpatialComponentDataQueryResultEXT queryResult{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT};
queryResult.entityIdCapacityInput = 0;
queryResult.entityIds = nullptr;
queryResult.entityStateCapacityInput = 0;
queryResult.entityStates = nullptr;
CHK_XR(xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond, &queryResult));
std::vector<XrSpatialEntityIdEXT> entityIds(queryResult.entityIdCountOutput);
std::vector<XrSpatialEntityTrackingStateEXT> entityStates(queryResult.entityStateCountOutput);
queryResult.entityIdCapacityInput = entityIds.size();
queryResult.entityIds = entityIds.data();
queryResult.entityStateCapacityInput = entityStates.size();
queryResult.entityStates = entityStates.data();
std::vector<XrSpatialBounded2DDataEXT> bounded2d(queryResult.entityIdCountOutput);
XrSpatialComponentBounded2DListEXT boundsList{XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT};
boundsList.boundCount = bounded2d.size();
boundsList.bounds = bounded2d.data();
queryResult.next = &boundsList;
CHK_XR(xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond, &queryResult));
for (int32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
if (entityStates[i] == XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT) {
// 2D extents for entity entityIds[i] is bounded2d[i].extents.
}
}
CHK_XR(xrDestroySpatialSnapshotEXT(completion.snapshot));
}
};
while (1) {
// ...
// For every frame in frame loop
// ...
XrFrameState frameState; // previously returned from xrWaitFrame
const XrTime time = frameState.predictedDisplayTime;
// Poll for the XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT event
XrEventDataBuffer event = {XR_TYPE_EVENT_DATA_BUFFER};
XrResult result = xrPollEvent(instance, &event);
if (result == XR_SUCCESS) {
switch (event.type) {
case XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT: {
const XrEventDataSpatialDiscoveryRecommendedEXT& eventdata =
*reinterpret_cast<XrEventDataSpatialDiscoveryRecommendedEXT*>(&event);
// Discover spatial entities for the context that we received the "discovery
// recommended" event for.
discoverSpatialEntities(eventdata.spatialContext, time);
break;
}
}
}
// ...
// Finish frame loop
// ...
}
CHK_XR(xrDestroySpatialContextEXT(spatialContext));
Pufferdaten abfragen
Im folgenden Beispielcode wird gezeigt, wie Sie die Daten einer Komponente abrufen, die einen XrSpatialBufferEXT bereitstellt .
/****************************/
/* Component definition */
/****************************/
// Foo component that provides an XrVector3f buffer
#define XR_SPATIAL_COMPONENT_TYPE_FOO_EXT ((XrSpatialComponentTypeEXT)1000740000U)
#define XR_TYPE_SPATIAL_COMPONENT_FOO_LIST_EXT ((XrStructureType)1000740000U)
// XrSpatialComponentFooListEXT extends XrSpatialComponentDataQueryResultEXT
typedef struct XrSpatialComponentFooListEXT {
XrStructureType type;
void* XR_MAY_ALIAS next;
uint32_t fooCount;
XrSpatialBufferEXT* foo;
} XrSpatialComponentFooListEXT;
/******************************/
/* End Component definition */
/******************************/
// Query for the foo component data
XrSpatialComponentTypeEXT componentToQuery = XR_SPATIAL_COMPONENT_TYPE_FOO_EXT;
XrSpatialComponentDataQueryConditionEXT queryCond{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT};
queryCond.componentTypeCount = 1;
queryCond.componentTypes = &componentToQuery;
XrSpatialComponentDataQueryResultEXT queryResult{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT};
CHK_XR(xrQuerySpatialComponentDataEXT(snapshot, &queryCond, &queryResult));
std::vector<XrSpatialEntityIdEXT> entityIds(queryResult.entityIdCountOutput);
queryResult.entityIdCapacityInput = entityIds.size();
queryResult.entityIds = entityIds.data();
std::vector<XrSpatialBufferEXT> fooBuffers(queryResult.entityIdCountOutput);
XrSpatialComponentFooListEXT fooList{XR_TYPE_SPATIAL_COMPONENT_FOO_LIST_EXT};
fooList.fooCount = fooBuffers.size();
fooList.foo = fooBuffers.data();
queryResult.next = &fooList;
CHK_XR(xrQuerySpatialComponentDataEXT(snapshot, &queryCond, &queryResult));
for (int32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
// foo component data for entity entityIds[i]
if (fooBuffers[i].bufferType == XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT) {
XrSpatialBufferGetInfoEXT getInfo{XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT};
getInfo.bufferId = fooBuffers[i].bufferId;
uint32_t bufferCountOutput;
CHK_XR(xrGetSpatialBufferVector3fEXT(snapshot, &getInfo, 0, &bufferCountOutput, nullptr));
std::vector<XrVector3f> vertexBuffer(bufferCountOutput);
CHK_XR(xrGetSpatialBufferVector3fEXT(snapshot, &getInfo, bufferCountOutput, &bufferCountOutput, vertexBuffer.data()));
// XrVertex3f buffer for entity entityIds[i] is now available in vertexBuffer vector.
}
}
Richtlinien für Erweiterungen
Wenn eine Erweiterung einen neuen XrSpatialComponentTypeEXT definiert, der zusätzliche Daten zu einer räumlichen Einheit bereitstellt,
- Die Erweiterung muss auch eine Listenstruktur für diese Komponente definieren, die es der Anwendung ermöglicht, ein Array an die Laufzeit zu übergeben, um es mit den Daten für jede der räumlichen Einheiten zu füllen, die xrQuerySpatialComponentDataEXT ::
queryConditionerfüllen . Beispiele für solche Listenstrukturen sind XrSpatialComponentParentListEXT und XrSpatialComponentBounded2DListEXT . Wenn die Komponentendaten eine variable Größe haben und die Anwendung das Two-Call-Idiom verwenden muss, um sie abzufragen, sollten die Komponentendaten für jede variable Größe in der Listenstruktur einen XrSpatialBufferEXT bereitstellen und muss für jeden Puffer der XrSpatialBufferTypeEXT angegeben werden. Die Anwendung kann dann die Pufferdaten mit Funktionen abfragen, die in Two-call idiom for component data definiert sind . Ein Beispiel für eine solche Struktur ist XrSpatialMeshDataEXT, die in XrSpatialComponentMesh3DListEXT enthalten ist . - Die Erweiterung kann auch Strukturen bereitstellen, die die Anwendung an XrSpatialComponentDataQueryConditionEXT ::
nextverkettet, um zusätzliche Filter für die Abfrage der Daten dieser Komponente bereitzustellen.
- Die Erweiterung muss auch eine Listenstruktur für diese Komponente definieren, die es der Anwendung ermöglicht, ein Array an die Laufzeit zu übergeben, um es mit den Daten für jede der räumlichen Einheiten zu füllen, die xrQuerySpatialComponentDataEXT ::
Erweiterungen können Strukturen definieren, die XrSpatialDiscoverySnapshotCreateInfoEXT erweitern, um zusätzliche Filter für die Erkennung bereitzustellen. Die Filter zum Erstellen des Snapshots dürfen die Konfiguration des räumlichen Kontexts nicht beeinflussen. Sie sollen stattdessen der Laufzeit Hinweise darauf geben, welche Einheiten und Daten in den Snapshot aufgenommen werden sollen, wie sie durch die aktuelle Konfiguration des räumlichen Kontexts (und damit die aktuelle Konfiguration der zugrunde liegenden Dienste) erfasst werden.
Wenn in einer Erweiterung eine neue XrSpatialCapabilityEXT definiert wird ,
- Außerdem sollte die Liste der XrSpatialComponentTypeEXT angegeben werden, die die Runtimes für Entitäten für diese Funktion bereitstellen müssen.
- Es muss auch Strukturen bereitstellen, die von XrSpatialCapabilityConfigurationBaseHeaderEXT abgeleitet sind und die Konfiguration dieser Funktion ermöglichen.
Wenn eine Erweiterung ein neues XrSpatialCapabilityFeatureEXT definiert, muss sie auch eine entsprechende Konfigurationsstruktur definieren, die mit dem nächsten Zeiger von XrSpatialCapabilityConfigurationBaseHeaderEXT verkettet werden kann, die die Anwendung verwenden kann, um die Funktion beim Erstellen eines XrSpatialContextEXT zu aktivieren .
Eine Erweiterung, die eine neue XrSpatialCapabilityEXT definiert, sollte dieser Vorlage für die Spezifikation folgen:
- Übersicht
- Laufzeitunterstützung
- Konfiguration
- Garantierte Komponenten
- Beispiel-Code
Eine Erweiterung, die einen neuen XrSpatialComponentTypeEXT definiert, sollte dieser Vorlage für die Spezifikation folgen:
- Komponentendaten
- Komponentenlistenstruktur zum Abfragen von Daten
- Konfiguration
Wenn Sie eine API schreiben, die der Anwendung einen
XrSpatialBufferIdEXTbereitstellt, muss dieser mit einem XrSpatialBufferTypeEXT einhergehen, um die Anwendung darüber zu informieren, welcher Datentyp der Puffer hat. Die Anwendung kann eine geeignetexrGetSpatialBuffer*-Funktion verwenden, um den tatsächlichen Inhalt des Puffers abzurufen.
Richtlinien für semantische Labels und Erweiterungen
Diese Erweiterung definiert zwar keine Komponente zum Übermitteln der semantischen Labelinformationen einer Rechtspersönlichkeit, legt aber die Designregeln und Richtlinien für alle Erweiterungen fest, die eine solche Komponente definieren. Im folgenden Text schränken „ sollte “ und „ muss “ die Autoren solcher Funktionen ein und nicht eine Laufzeitimplementierung oder eine Anwendung, die die API verwendet.
- Wenn eine Erweiterung semantische Labels für eine XrSpatialCapabilityEXT definiert, sollte sie dies tun, indem sie einen neuen XrSpatialComponentTypeEXT sowie eine neue Aufzählung mit einer Reihe von Labels (ein „semantisches Labelset“) als Daten für diese Komponente definiert.
- Eine Aufzählung, die eine semantische Labelgruppe darstellt, muss einen Wert haben, der angibt, dass die Entität keiner der Labels dieser Gruppe zugeordnet ist. Der Name dieses Enumerationswerts muss „UNCATEGORIZED“ enthalten, z.B.
XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT. Dieser Wert gibt Anwendungen an, dass die Laufzeit diese Entität erkennt, sie aber auch in anderen semantischen Label-Sets kategorisiert wird. - Die Aufzählung dieses neu definierten XrSpatialComponentTypeEXT in xrEnumerateSpatialCapabilityComponentTypesEXT impliziert, dass die Laufzeit die semantische Labelgruppe (und damit die in der Gruppe definierten Labels) unterstützt, die diesem Komponententyp entspricht.
- Anwendungen geben an, dass sie Entitäten mit Labels aus diesem semantischen Label-Set erkennen möchten, indem sie den entsprechenden XrSpatialComponentTypeEXT in das XrSpatialCapabilityConfigurationBaseHeaderEXT ::
enabledComponents-Array der Konfigurationsstruktur für die Funktion aufnehmen, für die der Komponententyp aufgezählt wird. - Es ist möglich, dass eine einzelne räumliche Einheit mehrere Komponenten hat, die jeweils ein Label aus ihrem eigenen semantischen Labelset bereitstellen. Sehen Sie sich das folgende Beispiel mit einigen hypothetischen semantischen Labelsets an –
XrSpatialObjectSemanticLabel, die Werte wie „chair“, „sofa“, „table“ usw. haben können.XrSpatialSofaBrand, das Werte wie IKEA, Wayfair usw. haben kann, undXrSpatialIkeaSofa, das bestimmte IKEA-Modellnamen von Sofas haben kann. In diesem Szenario hat dieselbe Sofa-Einheit alle drei Komponenten (Labels aus allen drei semantischen Label-Sets), die jeweils eine unterschiedliche Granularität der Informationen zur Einheit liefern. - Wenn in einer Erweiterung ein neuer XrSpatialComponentTypeEXT definiert wird, der zusätzlich zum Label
UNCATEGORIZEDeine neue semantische Labelgruppe mit mehreren Labels bereitstellt, sollte in der Erweiterung ein XrSpatialCapabilityFeatureEXT definiert werden. Dadurch können Anwendungen nur eine Teilmenge der Labels aktivieren, die in der semantischen Labelgruppe definiert sind, die diesem Komponententyp entspricht. Diese Teilmenge, die in der nächsten Kette der Funktionskonfiguration bereitgestellt wird, dient als Hinweis für Runtimes, um ihre Tracking-Pipelines zu optimieren und nur die bereitgestellte Teilmenge zu erfassen. Ein Beispiel für eine solche Feature-Struktur finden Sie unten . - Mit Erweiterungen dürfen keine Labels zur vorhandenen Aufzählung semantischer Labels hinzugefügt werden. Stattdessen muss eine neue Aufzählung definiert werden, die neben den neu hinzugefügten Aufzählungselementen auch entsprechende Aufzählungselemente mit identischer Semantik und Werten enthält, die denen aus der anderen Gruppe entsprechen. In der Spezifikation des neu definierten Bedingungssatzes von semantischen Labels muss auch die Zuordnung zwischen dem alten und dem neuen Bedingungssatz festgelegt werden. Beispiel
Beispiel für die Definition einer räumlichen Funktion für eine Teilmenge semantischer Labels
// New example semantic label set.
typedef enum XrSpatialExampleSemanticLabelEXT {
// ... label values
} XrSpatialExampleSemanticLabelEXT;
/*
typedef enum XrSpatialCapabilityFeatureEXT {
// .. existing values
// new spatial feature value
XR_SPATIAL_CAPABILITY_FEATURE_EXAMPLE_SEMANTIC_LABEL_SUBSET_EXT
// .. existing values
} XrSpatialCapabilityFeatureEXT;
*/
// New spatial feaure configuration structure
typedef struct XrSpatialFeatureExampleSemanticLabelSubsetEXT {
XrStructureType type;
const void* XR_MAY_ALIAS next;
uint32_t semanticLabelCount;
const XrSpatialExampleSemanticLabelEXT* semanticLabels;
} XrSpatialFeatureExampleSemanticLabelSubsetEXT;
Beispiel für eine räumliche semantische Label-Erweiterung
typedef enum XrSpatialExamplePlaneSemanticLabelExtensionEXT {
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_UNCATEGORIZED_EXT = 1,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_FLOOR_EXT = 2,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_WALL_EXT = 3,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_CEILING_EXT = 4,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_TABLE_EXT = 5,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_DOOR_EXT = 6,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_WINDOW_EXT = 7,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialExamplePlaneSemanticLabelExtensionEXT;
Im obigen Beispiel definiert eine Erweiterung die Enumeration XrSpatialExamplePlaneSemanticLabelExtensionEXT, um die vorhandene XrSpatialPlaneSemanticLabelEXT mit Werten für Türen und Fenster zu erweitern. Die Spezifikation für die neue Aufzählung muss Text für das folgende Formular enthalten:
For all non-UNCATEGORIZED label enumerants in elink:XrSpatialPlaneSemanticLabelEXT,
the runtime must: return that enumerant if and only if it returns the corresponding
label enumerant from elink:XrSpatialExamplePlaneSemanticLabelExtensionEXT with the same value
i.e.
the ename:XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT value for that entity must:
correspond with the ename:XR_SPATIAL_COMPONENT_TYPE_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_EXT values
according to the following table -
[width="100%",options="header"]
|====
| XrSpatialExamplePlaneSemanticLabelExtensionEXT | XrSpatialPlaneSemanticLabelEXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_FLOOR_EXT | XR_SPATIAL_PLANE_SEMANTIC_LABEL_FLOOR_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_WALL_EXT | XR_SPATIAL_PLANE_SEMANTIC_LABEL_WALL_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_CEILING_EXT | XR_SPATIAL_PLANE_SEMANTIC_LABEL_CEILING_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_TABLE_EXT | XR_SPATIAL_PLANE_SEMANTIC_LABEL_TABLE_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_DOOR_EXT | XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_WINDOW_EXT | XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT
|====
Neue Makros
Neue Basistypen
XrSpatialBufferIdEXTXrSpatialEntityIdEXT
Neue Objekttypen
Neue Befehle
- xrCreateSpatialContextAsyncEXT
- xrCreateSpatialContextCompleteEXT
- xrCreateSpatialDiscoverySnapshotAsyncEXT
- xrCreateSpatialDiscoverySnapshotCompleteEXT
- xrCreateSpatialEntityFromIdEXT
- xrCreateSpatialUpdateSnapshotEXT
- xrDestroySpatialContextEXT
- xrDestroySpatialEntityEXT
- xrDestroySpatialSnapshotEXT
- xrEnumerateSpatialCapabilitiesEXT
- xrEnumerateSpatialCapabilityComponentTypesEXT
- xrEnumerateSpatialCapabilityFeaturesEXT
- xrGetSpatialBufferFloatEXT
- xrGetSpatialBufferStringEXT
- xrGetSpatialBufferUint16EXT
- xrGetSpatialBufferUint32EXT
- xrGetSpatialBufferUint8EXT
- xrGetSpatialBufferVector2fEXT
- xrGetSpatialBufferVector3fEXT
- xrQuerySpatialComponentDataEXT
Neue Strukturen
- XrCreateSpatialContextCompletionEXT
- XrCreateSpatialDiscoverySnapshotCompletionEXT
- XrCreateSpatialDiscoverySnapshotCompletionInfoEXT
- XrEventDataSpatialDiscoveryRecommendedEXT
- XrSpatialBounded2DDataEXT
- XrSpatialBufferEXT
- XrSpatialBufferGetInfoEXT
- XrSpatialCapabilityComponentTypesEXT
- XrSpatialCapabilityConfigurationBaseHeaderEXT
- XrSpatialComponentDataQueryConditionEXT
- XrSpatialComponentDataQueryResultEXT
- XrSpatialContextCreateInfoEXT
- XrSpatialDiscoverySnapshotCreateInfoEXT
- XrSpatialEntityFromIdCreateInfoEXT
- XrSpatialMeshDataEXT
- XrSpatialUpdateSnapshotCreateInfoEXT
XrSpatialComponentDataQueryResultEXT erweitern :
Erweitern von XrSpatialDiscoverySnapshotCreateInfoEXT , XrSpatialComponentDataQueryConditionEXT :
Neue Enums
- XrSpatialBufferTypeEXT
- XrSpatialCapabilityEXT
- XrSpatialCapabilityFeatureEXT
- XrSpatialComponentTypeEXT
- XrSpatialEntityTrackingStateEXT
Neue Enum-Konstanten
XR_EXT_SPATIAL_ENTITY_EXTENSION_NAMEXR_EXT_spatial_entity_SPEC_VERSIONXrObjectType erweitern :
XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXTXR_OBJECT_TYPE_SPATIAL_ENTITY_EXTXR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT
XrResult erweitern :
XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXTXR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXTXR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT
XrStructureType erweitern :
XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXTXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXTXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXTXR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXTXR_TYPE_SPATIAL_BUFFER_GET_INFO_EXTXR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXTXR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXTXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXTXR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXTXR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXTXR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXTXR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXTXR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXTXR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT
Probleme
Wird eine einzelne Entität immer nur aus einer einzigen Funktion abgeleitet?
- Geklärt
- Antwort: Nein. Das liegt ganz bei der Laufzeit, die auf ihren eigenen Trackingfunktionen basiert und bestimmt, wie eine erkannte Einheit dargestellt werden soll. Die Spezifikation schreibt keine bestimmte Darstellung räumlicher Einheiten vor, mit Ausnahme der garantierten Komponenten einer bestimmten Funktion, um eine Mindestanforderung festzulegen. Eine Laufzeitumgebung kann in der Lage sein, von separaten Funktionen erkannte Einheiten zusammenzuführen und als eine einzelne Einheit mit den garantierten Komponenten aller Funktionen darzustellen, die zur Identifizierung beigetragen haben. Ein Beispiel hierfür ist, dass Tabellen sowohl durch die Funktion zum Erfassen von Ebenen als auch durch die Funktion zum Erfassen von Objekten erkannt werden können. Dabei wird die
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT-Komponente der Entität durch das Erfassen von Ebenen undXR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTdurch das Erfassen von Objekten bereitgestellt. In einer bestimmten Laufzeit kann die Tabelle als zwei separate Einheiten mit jeweils eigenen garantierten Komponenten bereitgestellt werden, während in bestimmten Laufzeiten nur eine Einheit zur Darstellung der Tabelle bereitgestellt wird, wobei sowohlXR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTals auchXR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTin derselben Einheit enthalten sind. Wichtig ist, dass eine bestimmte räumliche Einheit höchstens eine Komponente eines bestimmten Komponententyps haben kann . Wenn die von den verschiedenen Funktionen erstellten Komponentendaten für eine bestimmte Einheit in Konflikt stehen, muss die Laufzeit sie als zwei separate Einheiten darstellen.
Versionsverlauf
Version 1, 12.04.2024 (Nihav Jain, Google)
- Erste Beschreibung der Erweiterung