XR_EXT_spatial_entity

Name String

XR_EXT_spatial_entity

Erweiterungstyp

Instanzerweiterung

Registrierte Durchwahl

741

Revision

1

Ratification Status

Ratified

Erweiterungs- und Versionsabhängigkeiten

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

Mit dieser Erweiterung werden die Konzepte und Grundlagen für das Szenenverständnis und die räumliche Orientierung in OpenXR eingeführt. Dadurch werden mehrere verwandte, aber unterschiedliche Funktionsbereiche vereinheitlicht, die gemäß dieser Erweiterung auf weitgehend einheitliche Weise aufgezählt, konfiguriert und interagiert werden. Da in dieser Erweiterung keine konkreten Definitionen für diese Funktionsbereiche enthalten sind, ist der formale Spezifikationstext eher abstrakt. Die in diesem Text zur Erweiterungsspezifikation enthaltenen Beispiele beziehen sich zu Veranschaulichungszwecken manchmal auf Funktionen, die in einer künftigen oder hypothetischen zugehörigen Erweiterung definiert sind, ohne diese zusätzlichen Funktionen von vornherein einzuschränken oder zu spezifizieren.

Die wichtigsten Teile dieser Erweiterung sind:

  • Räumliche Entitäten : Die Funktionalität konzentriert sich auf Entitäten , die für sich genommen nur sehr wenige Funktionen bieten.
  • Räumliche Komponenten : Mit diesen Entitäten sind Komponenten verknüpft, die Daten und Verhaltensweisen bereitstellen.
  • Räumliche Komponententypen : Jede räumliche Komponente hat einen bestimmten Komponententyp und jede Entität hat höchstens eine Komponente eines bestimmten Komponententyps .
  • Räumlicher Kontext : Alle Interaktionen mit räumlichen Entitäten finden nach einer Initialisierungs- und Konfigurationsphase in einem Kontext statt.
  • Räumliche Funktionen : Die Bearbeitung räumlicher Entitäten wird weitgehend durch Funktionen ermöglicht. Eine Funktion ist eine Funktionseinheit, z. B. (ohne Einschränkung) anwendungsdefinierte Anker, Ebenenerkennung oder Bild-Tracking. Jede Funktion wird in der Regel in einer separaten Erweiterung definiert (wie üblich bei der Instanzerstellung aktiviert) und bei der Erstellung für einen bestimmten Kontext aktiviert.
  • Jede Funktion ist mit einer Reihe von Komponententypen verknüpft, 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 sind („garantiert“). Dieselbe Erweiterung oder andere Erweiterungen können optionale Komponententypen angeben, die von einigen potenziellen Implementierungen bereitgestellt werden. Eine beliebige Anzahl von Funktionen kann Entitäten mit Komponenten eines bestimmten Komponententyps bereitstellen, die unabhängig von der Funktion, die sie erzeugt hat, einheitlich verwendet werden können.
  • Räumliche Funktionen : Einige Funktionen müssen konfiguriert werden und werden daher durch Funktionsmerkmale parametrisiert.

Diese Erweiterung bietet einen Mechanismus zum Auflisten der Komponenten, die von jeder auf dem aktuellen System unterstützten Funktion bereitgestellt werden, sowohl der obligatorischen als auch aller optionalen Komponenten .

Da für einige Implementierungen möglicherweise unterschiedliche Grade der Parametrisierung für Fähigkeiten erforderlich sind, bietet diese Erweiterung einen Mechanismus zum Aufzählen der unterstützten Fähigkeitsfunktionen, die mit einer bestimmten Fähigkeit im aktuellen System verknüpft sind.

Diese Erweiterung definiert auch mehrere gängige Komponenten, die voraussichtlich in einer Vielzahl von Funktionen verwendet werden.

Räumliche Entität

Räumliche Entitäten sind Entitäten, die in einem Raum existieren und verschiedene zugehörige Daten haben, die in Komponenten organisiert sind. Sie können Folgendes sein:

  • Physisch (z.B. ebene Oberflächen wie Wände und Böden, Objekte wie Stühle und Bücherregale usw.)
  • Virtuell (z.B. Inhalte, die von einer anderen App oder einem anderen Nutzer platziert und geteilt werden)
  • Von der App definiert (z. B. wenn eine App einen Bereich als „Wohnzimmer“ oder „Küche“ oder einen Punkt als Standort für den Fernseher markiert)

Dinge, die über das Aktionssystem verfügbar gemacht werden, wie Controller oder Blickrichtung, sind nicht als räumliche Entitäten gedacht.

Räumliche Entitäten in OpenXR werden als Entitäts-Komponenten-System modelliert. Jede räumliche Entität hat eine Reihe von Komponenten, die jeweils eindeutige Daten und Verhaltensweisen für diese Entität bereitstellen.

Räumliche Entitäten werden entweder durch ein XrSpatialEntityIdEXT-Atom oder ein XrSpatialEntityEXT-Handle dargestellt. Weitere Informationen dazu findest du im Abschnitt Darstellungen räumlicher Entitäten.

Räumliche Komponententypen

Eine räumliche Entität hat eine oder mehrere Komponenten, die Daten oder Verhaltensweisen für diese Entität bereitstellen. Unter Allgemeine Komponenten finden Sie einige allgemeine Komponenten, die durch diese 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_GEOMETRY_POINT_ANDROID = 1000803000,
    XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_SCOPES_ANDROIDX1 = 1000808000,
    XR_SPATIAL_COMPONENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialComponentTypeEXT;

Die Aufzählung XrSpatialComponentTypeEXT gibt die verschiedenen Arten von Komponenten an, 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 dokumentiert.

Die Enumeranten haben die folgenden Werte:

Enum-Beschreibung

XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT

Komponente, die die 2D-Grenzen für eine räumliche Entität bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentBounded2DListEXT; die entsprechende Datenstruktur ist XrSpatialBounded2DDataEXT.

XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT

Komponente, die die 3D-Grenzen für eine räumliche Entität bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentBounded3DListEXT, die entsprechende Datenstruktur 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 Entität bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentMesh3DListEXT. Die entsprechende Datenstruktur ist XrSpatialMeshDataEXT.

XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT

Komponente, die die Enum für die Ebenenausrichtung für eine räumliche Entität bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentPlaneAlignmentListEXT. Die entsprechende Datenstruktur ist XrSpatialPlaneAlignmentEXT (durch die Erweiterung XR_EXT_spatial_plane_tracking hinzugefügt).

XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT

Komponente, die ein 2D-Mesh für eine räumliche Entität bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentMesh2DListEXT. Die entsprechende Datenstruktur ist XrSpatialMeshDataEXT (durch die Erweiterung XR_EXT_spatial_plane_tracking hinzugefügt).

XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT

Komponente, die ein 2D-Begrenzungspolygon für eine räumliche Entität bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentPolygon2DListEXT. Die entsprechende Datenstruktur ist XrSpatialPolygon2DDataEXT (durch die Erweiterung XR_EXT_spatial_plane_tracking hinzugefügt).

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 (durch die Erweiterung XR_EXT_spatial_plane_tracking hinzugefügt).

XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT

Eine Komponente, die den Markertyp, die ID und den Standort beschreibt. Die entsprechende Listenstruktur ist XrSpatialComponentMarkerListEXT. Die entsprechende Datenstruktur ist XrSpatialMarkerDataEXT (durch die Erweiterung XR_EXT_spatial_marker_tracking hinzugefügt).

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 Erweiterung XR_EXT_spatial_object_tracking).

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 Erweiterung XR_EXT_spatial_object_tracking).

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 (durch die Erweiterung XR_EXT_spatial_anchor hinzugefügt).

XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT

Komponente, die die persistente UUID für eine räumliche Entität bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentPersistenceListEXT. Die entsprechende Datenstruktur ist XrSpatialPersistenceDataEXT (durch die Erweiterung XR_EXT_spatial_persistence hinzugefügt).

XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT

Eine Komponente, die den planaren Bildtyp beschreibt. Die entsprechende Listenstruktur ist XrSpatialComponentImage2DListEXT, die entsprechende Datenstruktur 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 eines räumlichen Elements bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentMesh3DNormalsListEXT. Die entsprechende Datenstruktur ist XrSpatialBufferEXT (durch die Erweiterung XR_EXT_spatial_mesh_tracking hinzugefügt).

XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT

Komponente, die die semantischen Labels pro Eckpunkt für das 3D-Mesh eines räumlichen Elements bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentMesh3DVertexSemanticLabelsListEXT. Die entsprechende Datenstruktur ist XrSpatialBufferEXT. Die Daten im Zwischenspeicher werden XrSpatialMeshSemanticLabelEXT zugeordnet (durch die Erweiterung XR_EXT_spatial_mesh_tracking hinzugefügt).

XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT

Komponente, die die semantischen Labels pro Dreiecksfläche für das 3D-Mesh eines räumlichen Elements bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT. Die entsprechende Datenstruktur ist XrSpatialBufferEXT. Die Daten im Zwischenspeicher werden XrSpatialMeshSemanticLabelEXT zugeordnet (hinzugefügt durch die Erweiterung XR_EXT_spatial_mesh_tracking).

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 Erweiterung XR_ANDROID_spatial_object_tracking)

XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID

Komponente, die die Position eines Raycast-Treffers auf einer Entität angibt. Die entsprechende Listenstruktur ist XrSpatialComponentRaycastResultListANDROID. Die entsprechende Datenstruktur ist XrSpatialRaycastResultDataANDROID (durch die Erweiterung XR_ANDROID_spatial_discovery_raycast 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 enthält. Die entsprechende Listenstruktur ist XrSpatialComponentSubsumedByListANDROID. Die entsprechende Datenstruktur ist XrSpatialEntityIdEXT (durch die Erweiterung XR_ANDROID_spatial_component_subsumed_by hinzugefügt).

XR_SPATIAL_COMPONENT_TYPE_ROOM_ANDROIDSYS

Komponente, die die Abmessungen und den Raumtyp eines Shoebox-Modells bereitstellt; die entsprechende Listenstruktur ist XrSpatialComponentRoomListANDROIDSYS; die entsprechende Datenstruktur ist XrSpatialRoomDataANDROIDSYS (durch die XR_ANDROIDSYS_spatial_room_tracking-Erweiterung hinzugefügt)

XR_SPATIAL_COMPONENT_TYPE_MATERIAL_TYPE_ANDROIDSYS

Komponente, die den Materialtyp einer Grenzfläche bereitstellt; die entsprechende Listenstruktur ist XrSpatialComponentMaterialTypeListANDROIDSYS; die entsprechende Datenstruktur ist XrSpatialMaterialTypeANDROIDSYS (hinzugefügt durch die Erweiterung XR_ANDROIDSYS_spatial_room_tracking)

XR_SPATIAL_COMPONENT_TYPE_CONFIDENCE_ANDROIDSYS

Komponente, die die Konfidenz eines trackbaren Objekts 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 (durch die Erweiterung XR_ANDROIDSYS_spatial_room_tracking hinzugefügt)

XR_SPATIAL_COMPONENT_TYPE_OCCUPANCY_GRID_ANDROIDX1

Komponente, die Informationen zum Belegungsraster der angehängten Entität bereitstellt. Die entsprechende Listenstruktur ist XrSpatialComponentOccupancyGridListANDROIDX1. Die entsprechende Datenstruktur ist XrSpatialOccupancyGridDataANDROIDX1 (hinzugefügt durch die Erweiterung XR_ANDROIDX1_spatial_occupancy_grid).

XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID

Eine Komponente, die eine Quad-Annotation beschreibt. Die entsprechende Listenstruktur ist XrSpatialComponentAnnotationQuadListANDROID. Die entsprechende Datenstruktur ist XrSpatialAnnotationQuadDataANDROID (durch die Erweiterung XR_ANDROID_spatial_annotation_tracking 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 (durch die Erweiterung XR_ANDROIDX2_geospatial_streetscape hinzugefügt)

XR_SPATIAL_COMPONENT_TYPE_GEOMETRY_POINT_ANDROID

Komponente, die eine Entität als Geometriepunkt identifiziert. Für diesen Komponententyp gibt es keine entsprechende Liste oder Datenstruktur. Das Vorhandensein dieser Komponente zeigt lediglich an, dass eine Entität an einen Anker angehängt werden kann. (Hinzugefügt durch die Erweiterung „XR_ANDROID_spatial_geometry_point“)

XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_SCOPES_ANDROIDX1

Eine Komponente, die die Persistenzbereiche beschreibt, in denen die Entität beibehalten wird. Wenn die Laufzeit XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT unterstützt, muss sie auch diese Komponente unterstützen. Die entsprechende Datenstruktur ist XrSpatialBufferEXT . Die entsprechende Listenstruktur ist XrSpatialComponentPersistenceScopeDataListANDROIDX1 . (Hinzugefügt durch die Erweiterung „XR_ANDROIDX1_spatial_anchor_cloud_sharing“)

Räumliche Funktionen und Einrichtung

Räumliche Funktionen definieren die Fähigkeiten einer Laufzeit, Entitäten zu erkennen, die einen garantierten Satz von Komponenten enthalten. Anwendungen aktivieren die Komponenten einer räumlichen Funktion, wenn der XrSpatialContextEXT erstellt wird. Die Laufzeit muss dann nur die aktivierten Komponenten für erkannte Entitäten 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 Aufzählung XrSpatialCapabilityEXT gibt die verschiedenen Arten von Funktionen an, die die Laufzeit möglicherweise unterstützt.

Die Enumeranten haben die folgenden Werte:

Enum-Beschreibung

XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT

Flugzeug-Tracking (durch die Erweiterung „XR_EXT_spatial_plane_tracking“ hinzugefügt)

XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT

Funktion zum Erkennen und Verfolgen von QR-Codes. (Hinzugefügt durch die Erweiterung „XR_EXT_spatial_marker_tracking“)

XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT

Funktion zum Erkennen und Verfolgen von Micro-QR-Codes. (Hinzugefügt durch die Erweiterung „XR_EXT_spatial_marker_tracking“)

XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT

Fähigkeit, Aruco-Marker zu erkennen und zu verfolgen. (Hinzugefügt durch die Erweiterung „XR_EXT_spatial_marker_tracking“)

XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT

Fähigkeit, AprilTags zu erkennen und zu verfolgen. (Hinzugefügt durch die Erweiterung „XR_EXT_spatial_marker_tracking“)

XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT

Objekt-Tracking (durch die XR_EXT_spatial_object_tracking-Erweiterung hinzugefügt)

XR_SPATIAL_CAPABILITY_ANCHOR_EXT

Möglichkeit, räumliche Anker zu erstellen (durch die XR_EXT_spatial_anchor-Erweiterung hinzugefügt)

XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT

Fähigkeit, planare Referenzbilder zu erkennen und zu verfolgen. (Hinzugefügt durch die Erweiterung „XR_EXT_spatial_image_tracking“)

XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT

Möglichkeit, das Mesh-Netzwerk einer Umgebung zu verfolgen. (Hinzugefügt durch die Erweiterung „XR_EXT_spatial_mesh_tracking“)

XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID

Objekt-Tracking (durch die XR_ANDROID_spatial_object_tracking-Erweiterung hinzugefügt)

XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID

Raycast gegen Tiefenpuffer (durch die XR_ANDROID_spatial_discovery_raycast-Erweiterung hinzugefügt)

XR_SPATIAL_CAPABILITY_ROOM_TRACKING_ANDROIDSYS

Möglichkeit, einen Raum zu verfolgen (durch die Erweiterung „XR_ANDROIDSYS_spatial_room_tracking“ hinzugefügt)

XR_SPATIAL_CAPABILITY_ROOM_BOUNDARY_TRACKING_ANDROIDSYS

Fähigkeit, eine Raumgrenze zu verfolgen (hinzugefügt durch die Erweiterung XR_ANDROIDSYS_spatial_room_tracking)

XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID

Anmerkungs-Tracking (von der Erweiterung „XR_ANDROID_spatial_annotation_tracking“ hinzugefügt)

XR_SPATIAL_CAPABILITY_STREETSCAPE_GEOMETRY_ANDROIDX2

Streetscape Geometry (durch die XR_ANDROIDX2_geospatial_streetscape-Erweiterung hinzugefügt)

Die Funktion xrEnumerateSpatialCapabilitiesEXT ist so definiert:

XrResult xrEnumerateSpatialCapabilitiesEXT(
    XrInstance                                  instance,
    XrSystemId                                  systemId,
    uint32_t                                    capabilityCapacityInput,
    uint32_t*                                   capabilityCountOutput,
    XrSpatialCapabilityEXT*                     capabilities);

Parameterbeschreibungen

  • instance ist ein Handle für eine XrInstance .
  • systemId ist die XrSystemId, deren räumliche Funktionen aufgezählt werden.
  • capabilityCapacityInput ist die Kapazität des capabilities-Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.
  • capabilityCountOutput ist die Anzahl der Funktionen oder die erforderliche Kapazität, falls capabilityCapacityInput nicht ausreicht.
  • capabilities ist ein Array von XrSpatialCapabilityEXT . Er kann NULL sein, wenn capabilityCapacityInput 0 ist.
  • Eine detaillierte Beschreibung zum Abrufen der erforderlichen capabilities-Größe finden Sie im Abschnitt Parameter für die Puffergröße.

Die Anwendung kann die Liste der räumlichen Funktionen, die von einem bestimmten XrSystemId unterstützt werden, mit xrEnumerateSpatialCapabilitiesEXT auflisten.

Die Laufzeit darf die räumlichen Funktionen, deren Erweiterung nicht für instance aktiviert ist, nicht aufzählen.

Gültige Verwendung (implizit)

  • Die Erweiterung XR_EXT_spatial_entity muss aktiviert werden, bevor xrEnumerateSpatialCapabilitiesEXT aufgerufen wird.
  • instance muss ein gültiges XrInstance-Handle sein
  • capabilityCountOutput muss ein Zeiger auf einen uint32_t-Wert sein
  • Wenn capabilityCapacityInput nicht 0 ist, muss capabilities ein Zeiger auf ein Array von capabilityCapacityInput XrSpatialCapabilityEXT-Werten sein

Rückgabecodes

Erfolg

  • XR_SUCCESS

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SYSTEM_INVALID
  • XR_ERROR_VALIDATION_FAILURE

Die Funktion xrEnumerateSpatialCapabilityComponentTypesEXT ist so definiert:

XrResult xrEnumerateSpatialCapabilityComponentTypesEXT(
    XrInstance                                  instance,
    XrSystemId                                  systemId,
    XrSpatialCapabilityEXT                      capability,
    XrSpatialCapabilityComponentTypesEXT*       capabilityComponents);

Parameterbeschreibungen

  • instance ist ein Handle für eine XrInstance .
  • systemId ist die XrSystemId, deren räumliche Fähigkeitskomponenten aufgezählt werden.
  • capability ist die XrSpatialCapabilityEXT, für die die Komponenten aufgezählt werden.
  • capabilityComponents ist ein Zeiger auf einen XrSpatialCapabilityComponentTypesEXT, eine Eingabe-/Ausgabestruktur, 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 System gemäß der Konfiguration bereitstellt.

Die Anwendung kann die in XrSpatialCapabilityComponentTypesEXT :: componentTypes aufgeführten Komponententypen verwenden, um alle Komponenten zu ermitteln, die die systemId für capability unterstützt. Sie kann diese Liste verwenden, um zu bestimmen, was eine gültige Konfiguration für capability ist, 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 nicht für instance aktiviert ist, nicht aufzählen.

Gültige Verwendung (implizit)

Rückgabecodes

Erfolg

  • XR_SUCCESS

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT
  • XR_ERROR_SYSTEM_INVALID
  • XR_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

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.
  • componentTypeCapacityInput ist die Kapazität des Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.
  • componentTypeCountOutput ist die Anzahl der Komponententypen oder die erforderliche Kapazität, falls componentTypeCapacityInput nicht ausreicht.
  • componentTypes ist ein Array von XrSpatialComponentTypeEXT . Er kann NULL sein, wenn componentTypeCapacityInput 0 ist.
  • Eine detaillierte Beschreibung zum Abrufen der erforderlichen componentTypes-Größe finden Sie im Abschnitt Parameter für die Puffergröße.

Gültige Verwendung (implizit)

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;

Einige Funktionen haben Parameter, die der Anwendung zur Verfügung gestellt werden, um zu konfigurieren, wie die Komponentendaten von der Laufzeit berechnet werden. Diese Dimensionen der Parametrisierung/Konfigurierbarkeit werden als Capability-Funktionen bezeichnet. Beispiel: Für eine Bild-Tracking-Funktion kann eine Laufzeit eine Funktion unterstützen, mit der die Anwendung angeben kann, ob die getrackten Bilder stationär sind oder nicht.

Wenn diese Informationen der Laufzeit über eine Konfigurationsstruktur bereitgestellt werden, darf sich die Gruppe der Komponententypen, die in den zugehörigen Entitäten vorhanden sind, z.B. im getrackten Bild, nicht ändern. Die Laufzeit kann jedoch beispielsweise die Tracking-Funktionen der Bild-Tracking-Funktion optimieren und so die Anwendung verbessern.

Solche Funktionen werden durch XrSpatialCapabilityFeatureEXT dargestellt und von der Anwendung mit xrEnumerateSpatialCapabilityFeaturesEXT aufgezählt.

Jedes Funktionsmerkmal hat eine entsprechende Konfigurationsstruktur, um es zu aktivieren. Solche Konfigurationsstrukturen müssen mit XrSpatialCapabilityConfigurationBaseHeaderEXT :: next der entsprechenden Funktion verkettet werden.

Die Enumeranten 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 Erweiterung XR_EXT_spatial_marker_tracking).

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 (hinzugefügt durch die Erweiterung XR_EXT_spatial_marker_tracking).

XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT

Spatial-Funktion, mit der Anwendungen eine Teilmenge von Labels aus XrSpatialObjectSemanticLabelEXT angeben können, die von der Laufzeit 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. Hierfür muss beim Erstellen des räumlichen Kontexts keine Konfigurationsstruktur angegeben werden. (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. Hierfür muss beim Erstellen des räumlichen Kontexts keine Konfigurationsstruktur angegeben werden. (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. Hierfür muss beim Erstellen des räumlichen Kontexts keine Konfigurationsstruktur einbezogen werden. (Hinzugefügt durch die Erweiterung „XR_ANDROID_spatial_discovery_bounds“)

XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXT

Die Laufzeit unterstützt die automatische Ableitung der physischen Größe erkannter und verfolgter Bilder. Die entsprechende Konfigurationsstruktur ist XrSpatialImageSizeEXT (hinzugefügt durch die Erweiterung XR_EXT_spatial_image_tracking).

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 Erweiterung XR_EXT_spatial_image_tracking).

XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT

Funktion zum Erstellen eines wasserdichten Mesh-Netzwerks 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

  • instance ist ein Handle für eine XrInstance .
  • systemId ist die XrSystemId, deren räumliche Funktionen aufgezählt werden.
  • capability ist die XrSpatialCapabilityEXT, für die die Funktionen aufgelistet werden.
  • capabilityFeatureCapacityInput ist die Kapazität des Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.
  • capabilityFeatureCountOutput ist die Anzahl der Features oder die erforderliche Kapazität, falls capabilityFeatureCapacityInput nicht ausreicht.
  • capabilityFeatures ist ein Array von XrSpatialCapabilityFeatureEXT . Er kann NULL sein, wenn capabilityFeatureCapacityInput 0 ist.
  • Eine detaillierte Beschreibung zum Abrufen der erforderlichen capabilityFeatures-Größe finden Sie im Abschnitt Parameter für die Puffergröße.

Die Anwendung ermittelt die von einem bestimmten System für eine XrSpatialCapabilityEXT unterstützten Funktionen mithilfe von xrEnumerateSpatialCapabilityFeaturesEXT .

Bei Funktionen, die Features verfügbar machen, wählt die Anwendung das oder die zu aktivierenden Features aus und stellt die entsprechende Konfigurationsstruktur in der nächsten Kette der Funktionskonfigurationsstrukturen in XrSpatialContextCreateInfoEXT :: capabilityConfigs bereit.

Wenn capability keine von xrEnumerateSpatialCapabilitiesEXT aufgeführte Funktion ist, muss die Laufzeit XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT zurückgeben.

Die Laufzeit darf nicht die Funktionen für räumliche Fähigkeiten aufzählen, deren Erweiterung nicht für instance aktiviert ist.

Gültige Verwendung (implizit)

Rückgabecodes

Erfolg

  • XR_SUCCESS

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT
  • XR_ERROR_SYSTEM_INVALID
  • XR_ERROR_VALIDATION_FAILURE

Räumlicher Kontext

Räumlichen Kontext erstellen

XR_DEFINE_HANDLE(XrSpatialContextEXT)

Das XrSpatialContextEXT-Handle stellt die Ressourcen zum Erkennen und Aktualisieren einer Reihe von räumlichen Entitäten in der Umgebung des Nutzers dar. Die Anwendung kann dieses Handle verwenden, um räumliche Entitäten mithilfe anderer Funktionen in dieser Erweiterung zu finden und zu aktualisieren.

Die Funktion xrCreateSpatialContextAsyncEXT ist so definiert:

XrResult xrCreateSpatialContextAsyncEXT(
    XrSession                                   session,
    const XrSpatialContextCreateInfoEXT*        createInfo,
    XrFutureEXT*                                future);

Parameterbeschreibungen

  • session ist eine XrSession, in der der räumliche Kontext aktiv ist.
  • createInfo ist die XrSpatialContextCreateInfoEXT, mit der die Parameter für den räumlichen Kontext angegeben werden.
  • future ist ein Zeiger auf ein XrFutureEXT .

Die Anwendung kann ein XrSpatialContextEXT-Handle so erstellen:

Die Laufzeit muss XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT zurückgeben, wenn XrSpatialContextCreateInfoEXT ::capabilityConfigCount 0 ist. Ein Handle für den räumlichen Kontext benötigt mindestens eine Funktion.

Die Laufzeit muss XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT zurückgeben, wenn eine Funktion im Array XrSpatialContextCreateInfoEXT :: capabilityConfigs nicht von xrEnumerateSpatialCapabilitiesEXT aufgezählt wird.

Die Laufzeit muss XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT zurückgeben, wenn ein XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponentCount in XrSpatialContextCreateInfoEXT :: capabilityConfigs 0 ist. Eine Funktionskonfiguration ist ohne eine Liste von 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 einem XrSpatialCapabilityFeatureEXT entspricht, das 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. Beispielsweise kann eine Laufzeit, die die Funktion zur Ebenenerkennung unterstützt, ihre Pipeline zur Ebenenerkennung nur dann starten, wenn die Anwendung ein Handle für den räumlichen Kontext erstellt, das die Funktion zur Ebenenerkennung enthält. Wenn die konfigurierten Funktionen eine lange Aufwärmzeit haben, können Aufrufe von xrCreateSpatialDiscoverySnapshotAsyncEXT möglicherweise zu einem leeren Snapshot führen. Die Anwendung kann auf XrEventDataSpatialDiscoveryRecommendedEXT warten, bevor sie xrCreateSpatialDiscoverySnapshotAsyncEXT verwendet, um sicherzustellen, dass die zugrunde liegenden Tracking-Dienste bereit sind.

Wenn eine Laufzeit ein Berechtigungssystem erzwingt, um den Zugriff der Anwendung 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 der Anwendung nicht gewährt 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 für die Planung des asynchronen Vorgangs akzeptabel waren. Die entsprechende Abschlussfunktion ist xrCreateSpatialContextCompleteEXT. Sie kann verwendet werden, wenn sich ein Future aus dieser Funktion im Status READY befindet. Die Ausgaben werden von dieser Funktion in der Abschlussstruktur XrCreateSpatialContextCompletionEXT ausgegeben.

Gültige Verwendung (implizit)

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_PERMISSION_INSUFFICIENT
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT
  • XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT
  • XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT
  • XR_ERROR_VALIDATION_FAILURE
  • XR_ERROR_TIME_INVALID (wenn XR_ANDROID_spatial_annotation_tracking aktiviert ist)

Die Struktur XrSpatialContextCreateInfoEXT ist so definiert:

typedef struct XrSpatialContextCreateInfoEXT {
    XrStructureType                                                type;
    const void*                                                    next;
    uint32_t                                                       capabilityConfigCount;
    const XrSpatialCapabilityConfigurationBaseHeaderEXT* const*    capabilityConfigs;
} XrSpatialContextCreateInfoEXT;

Mitgliederbeschreibungen

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.
  • capabilityConfigCount ist ein uint32_t, der die Anzahl der Elemente im Array capabilityConfigs beschreibt.
  • capabilityConfigs ist ein Zeiger auf ein Array von XrSpatialCapabilityConfigurationBaseHeaderEXT-Zeigern.

Die Struktur XrSpatialContextCreateInfoEXT beschreibt die Informationen zum Erstellen eines XrSpatialContextEXT-Handles.

Gültige Verwendung (implizit)

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. Stattdessen können ihre untergeordneten Strukturen mit XrSpatialContextCreateInfoEXT verwendet werden, um räumliche Funktionen zu konfigurieren.

Mitgliederbeschreibungen

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette.
  • capability ist ein XrSpatialCapabilityEXT .
  • enabledComponentCount ist ein uint32_t, der die Anzahl der Elemente im Array enabledComponents beschreibt.
  • enabledComponents ist ein Zeiger auf ein Array von 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 nicht für capability in xrEnumerateSpatialCapabilityComponentTypesEXT aufgeführt ist.

Gültige Verwendung (implizit)

Die Funktion xrCreateSpatialContextCompleteEXT ist so definiert:

XrResult xrCreateSpatialContextCompleteEXT(
    XrSession                                   session,
    XrFutureEXT                                 future,
    XrCreateSpatialContextCompletionEXT*        completion);

Parameterbeschreibungen

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 im Status „Bereit“ ist. Die Laufzeit muss XR_ERROR_FUTURE_INVALID_EXT zurückgeben, wenn future bereits abgeschlossen oder abgebrochen wurde.

Gültige Verwendung (implizit)

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_FUTURE_INVALID_EXT
  • XR_ERROR_FUTURE_PENDING_EXT
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_VALIDATION_FAILURE

Die Struktur XrCreateSpatialContextCompletionEXT ist so definiert:

typedef struct XrCreateSpatialContextCompletionEXT {
    XrStructureType        type;
    void*                  next;
    XrResult               futureResult;
    XrSpatialContextEXT    spatialContext;
} XrCreateSpatialContextCompletionEXT;

Mitgliederbeschreibungen

Zukünftige Rückgabecodes

futureResult-Werte:

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_LIMIT_REACHED
  • XR_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 gültig oder bis die Anwendung spatialContext mit xrDestroySpatialContextEXT zerstört, je nachdem, was zuerst eintritt.

Gültige Verwendung (implizit)

Räumlichen Kontext zerstören

Die Funktion xrDestroySpatialContextEXT ist so definiert:

XrResult xrDestroySpatialContextEXT(
    XrSpatialContextEXT                         spatialContext);

Parameterbeschreibungen

Die Anwendung kann die Funktion xrDestroySpatialContextEXT aufrufen, um das Handle spatialContext und die zugrunde liegenden Ressourcen freizugeben, wenn die Aufgaben zur Erkennung und Aktualisierung von räumlichen Entitäten abgeschlossen sind. Wenn es keinen anderen gültigen XrSpatialContextEXT gibt, 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 Verwendung (implizit)

Threadsicherheit

  • Der Zugriff auf spatialContext und alle untergeordneten Handles muss extern synchronisiert werden.

Rückgabecodes

Erfolg

  • XR_SUCCESS

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_RUNTIME_FAILURE

Darstellungen räumlicher Entitäten

ID des räumlichen Objekts

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 denselben XrSpatialEntityIdEXT nicht für verschiedene Entitäten innerhalb desselben XrSpatialContextEXT wiederverwenden. Außerdem darf die Laufzeit nicht dieselbe XrSpatialEntityIdEXT für mehrere XrSpatialContextEXT innerhalb derselben XrSession wiederverwenden, unabhängig davon, ob sie dieselbe Entität 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. Er darf 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ät

XR_DEFINE_HANDLE(XrSpatialEntityEXT)

Das Handle XrSpatialEntityEXT stellt eine räumliche Entität dar. Eine Anwendung kann ein solches Handle erstellen, um der Laufzeitumgebung ihr Interesse an einer bestimmten Entität mitzuteilen.

Handle für räumliche Entität aus ID erstellen

Die Funktion xrCreateSpatialEntityFromIdEXT ist so definiert:

XrResult xrCreateSpatialEntityFromIdEXT(
    XrSpatialContextEXT                         spatialContext,
    const XrSpatialEntityFromIdCreateInfoEXT*   createInfo,
    XrSpatialEntityEXT*                         spatialEntity);

Parameterbeschreibungen

Die Anwendung kann xrCreateSpatialEntityFromIdEXT verwenden, um ein XrSpatialEntityEXT-Handle zu erstellen, das auf eine Entität in der Umgebung des Nutzers verweist.

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 Verwendung (implizit)

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT
  • XR_ERROR_VALIDATION_FAILURE

Die Struktur XrSpatialEntityFromIdCreateInfoEXT ist so definiert:

typedef struct XrSpatialEntityFromIdCreateInfoEXT {
    XrStructureType         type;
    const void*             next;
    XrSpatialEntityIdEXT    entityId;
} XrSpatialEntityFromIdCreateInfoEXT;

Mitgliederbeschreibungen

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.
  • entityId ist der XrSpatialEntityIdEXT der Entität, für die die Anwendung ein Handle erstellen möchte.

Gültige Verwendung (implizit)

Handle für räumliche Entität löschen

Die Funktion xrDestroySpatialEntityEXT ist so definiert:

XrResult xrDestroySpatialEntityEXT(
    XrSpatialEntityEXT                          spatialEntity);

Parameterbeschreibungen

Die Anwendung kann xrDestroySpatialEntityEXT verwenden, um das Handle spatialEntity freizugeben, wenn sie nicht mehr an der Entität interessiert ist, auf die dieses Handle verweist.

Gültige Verwendung (implizit)

Threadsicherheit

  • Der Zugriff auf spatialEntity und alle untergeordneten Handles muss extern synchronisiert werden.

Rückgabecodes

Erfolg

  • XR_SUCCESS

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_RUNTIME_FAILURE

Spatial Snapshot

XR_DEFINE_HANDLE(XrSpatialSnapshotEXT)

Die Anwendung kann räumliche Snapshots erstellen, um räumliche Entitäten zu erkennen oder ihre Informationen zu bekannten räumlichen Entitäten zu aktualisieren. Das XrSpatialSnapshotEXT-Handle stellt die unveränderlichen Daten für die erkannten oder aktualisierten räumlichen Entitäten und eine Teilmenge ihrer Komponenten dar, die von der Anwendung ausgewählt wurden. Der räumliche Snapshot stellt eine kohärente Ansicht der Entitäten und ihrer Komponentendaten dar. Nachdem ein Snapshot erstellt wurde, müssen die Daten des Snapshots unverändert bleiben, solange der Snapshot gültig ist.

Die Anwendung kann beliebig viele Snapshots erstellen, muss jedoch den für jeden neuen Snapshot zugewiesenen Arbeitsspeicher berücksichtigen und die Snapshots löschen, sobald sie nicht mehr benötigt werden.

Erkennungs-Snapshot erstellen

Die Funktion xrCreateSpatialDiscoverySnapshotAsyncEXT ist so definiert:

XrResult xrCreateSpatialDiscoverySnapshotAsyncEXT(
    XrSpatialContextEXT                         spatialContext,
    const XrSpatialDiscoverySnapshotCreateInfoEXT* createInfo,
    XrFutureEXT*                                future);

Parameterbeschreibungen

Die Anwendung kann räumliche Entitäten erkennen, indem sie mit xrCreateSpatialDiscoverySnapshotAsyncEXT einen Erkennungs-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 für die Planung des asynchronen Vorgangs akzeptabel waren. Die entsprechende Vervollständigungsfunktion ist xrCreateSpatialDiscoverySnapshotCompleteEXT. Sie kann verwendet werden, wenn sich ein Future aus dieser Funktion im Status READY befindet. Die Ausgaben werden von dieser Funktion in der Vervollständigungsstruktur XrCreateSpatialDiscoverySnapshotCompletionEXT ausgegeben.

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 die Nutzung von Systemressourcen aufgrund von Energie-, Wärme- oder anderen Richtlinien des Geräts reduziert werden muss.

Die Anwendung kann XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes verwenden, um die Liste der Entitäten und Komponenten zu filtern, deren Daten die Laufzeit muss in den Snapshot aufnehmen. Wenn die Anwendung eine gültige Liste von räumlichen Komponententypen in XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes bereitstellt, darf die Laufzeit nur räumliche Entitäten in den Snapshot aufnehmen, die mindestens eine der in XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes bereitgestellten Komponenten enthalten. Außerdem darf die Laufzeit nur Daten für die Komponenten im Snapshot enthalten.

Die Laufzeit muss XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT zurückgeben, wenn einer der XrSpatialComponentTypeEXT-Werte in XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes nicht für die räumlichen Funktionen aktiviert ist, die beim Erstellen von spatialContext an XrSpatialContextCreateInfoEXT :: capabilityConfigs übergeben wurden.

Wenn die Anwendung keine Liste von räumlichen Komponententypen in XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes bereitstellt, muss die Laufzeit alle räumlichen Entitäten in den Snapshot aufnehmen, die die in XrSpatialCapabilityConfigurationBaseHeaderEXT ::enabledComponents aufgeführten Komponenten für die für spatialContext konfigurierten Funktionen enthalten. Die Laufzeit muss die Daten für alle aktivierten Komponenten der für spatialContext konfigurierten Funktionen enthalten.

Wenn XrEventDataReferenceSpaceChangePending vor dem Abschluss von future in die Warteschlange gestellt wird und XrEventDataReferenceSpaceChangePending :: poseValid „false“ ist, kann die Laufzeit entweder ein XrSpatialSnapshotEXT ohne Entitäten erstellen oder den XrSpatialEntityTrackingStateEXT der Entitäten, die nicht mehr auffindbar sind, in XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace bei XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time auf XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT oder XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT setzen. Die Laufzeit darf XrCreateSpatialContextCompletionEXT :: futureResult aufgrund von XrEventDataReferenceSpaceChangePending nicht auf einen Fehlercode setzen.

Gültige Verwendung (implizit)

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT
  • XR_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

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.
  • componentTypeCount ist ein uint32_t, der die Anzahl der Elemente im Array componentTypes beschreibt.
  • componentTypes ist ein Array von XrSpatialComponentTypeEXT .

Die Struktur XrSpatialDiscoverySnapshotCreateInfoEXT beschreibt die Informationen, die zum Erstellen eines XrSpatialSnapshotEXT-Handles beim Erkennen von räumlichen Entitäten erforderlich sind.

Gültige Verwendung (implizit)

Die Funktion xrCreateSpatialDiscoverySnapshotCompleteEXT ist so definiert:

XrResult xrCreateSpatialDiscoverySnapshotCompleteEXT(
    XrSpatialContextEXT                         spatialContext,
    const XrCreateSpatialDiscoverySnapshotCompletionInfoEXT* createSnapshotCompletionInfo,
    XrCreateSpatialDiscoverySnapshotCompletionEXT* completion);

Parameterbeschreibungen

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 Status „Bereit“ ist. Die Laufzeit muss XR_ERROR_FUTURE_INVALID_EXT zurückgeben, wenn XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future bereits abgeschlossen oder abgebrochen wurde.

Gültige Verwendung (implizit)

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_FUTURE_INVALID_EXT
  • XR_ERROR_FUTURE_PENDING_EXT
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_TIME_INVALID
  • XR_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

Die Standorte in den verschiedenen Komponentendaten, die im erstellten Snapshot enthalten sind, werden in baseSpace unter time dargestellt.

Gültige Verwendung (implizit)

Die Struktur XrCreateSpatialDiscoverySnapshotCompletionEXT ist so definiert:

typedef struct XrCreateSpatialDiscoverySnapshotCompletionEXT {
    XrStructureType         type;
    void*                   next;
    XrResult                futureResult;
    XrSpatialSnapshotEXT    snapshot;
} XrCreateSpatialDiscoverySnapshotCompletionEXT;

Mitgliederbeschreibungen

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette.
  • futureResult ist das XrResult des Vorgangs zum Erstellen des Snapshots für die räumliche Erkennung.
  • snapshot ist ein XrSpatialSnapshotEXT, der verwendet werden kann, um die Komponentendaten der erkannten räumlichen Entitäten abzufragen.

Zukünftige Rückgabecodes

futureResult-Werte:

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_LIMIT_REACHED

Gültige Verwendung (implizit)

Ereignis „Discovery-Empfehlung“

Die Struktur XrEventDataSpatialDiscoveryRecommendedEXT ist so definiert:

typedef struct XrEventDataSpatialDiscoveryRecommendedEXT {
    XrStructureType        type;
    const void*            next;
    XrSpatialContextEXT    spatialContext;
} XrEventDataSpatialDiscoveryRecommendedEXT;

Mitgliederbeschreibungen

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette.
  • spatialContext ist 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 zur Erkennung räumlicher Entitäten vermeiden, indem sie auf dieses Ereignis wartet. Wenn die Anwendung zwischen zwei XrEventDataSpatialDiscoveryRecommendedEXT-Ereignissen mehrere Discovery-Snapshots mit demselben XrSpatialDiscoverySnapshotCreateInfoEXT erstellt, enthalten die resultierenden Snapshots möglicherweise dieselben Entitäten. Die Erstellung der Snapshots und die Datenabfragen wären dann überflüssig.

Wenn Sie auf dieses Ereignis warten, um einen neuen Discovery-Snapshot zu erstellen, wird die Anwendung das System nicht mit Discovery-Anfragen überlasten, für die die Laufzeit möglicherweise keine neuen Daten zurückgibt. Außerdem wird so das Risiko einer übermäßigen Nutzung der Systemressourcen und einer Drosselung aufgrund von Energie- oder Temperaturrichtlinien des Geräts vermieden. Dies trägt auch dazu bei, dass Laufzeiten, die räumliche Entitäten spontan mit Live-Tracking erkennen, und Laufzeiten, die räumliche Entitäten aus einem zuvor aufgezeichneten Zustand bereitstellen, gleichgestellt werden. Bei Letzteren kann die Laufzeit das Empfehlungsereignis für die 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 Entitäten zu informieren. Die Anwendung kann xrCreateSpatialUpdateSnapshotEXT verwenden, um Aktualisierungen von Komponentendaten für die räumlichen Entitäten zu verfolgen, die für sie relevant sind.

Eine Laufzeit kann ein Ereignis für eine Erkennungsempfehlung in die Warteschlange stellen, ohne darauf zu warten, dass die Anwendung zuerst xrCreateSpatialDiscoverySnapshotAsyncEXT aufruft. Eine Laufzeit kann die Entscheidung, das Ereignis für die Erkennungsempfehlung in die Warteschlange zu stellen, beispielsweise auf der Konfiguration von XrSpatialContextEXT, ihrem eigenen Verständnis der Umgebung des Nutzers (Erkennung neuer Entitäten oder Verlust vorhandener Entitäten) oder auf der Angabe einer geeigneten Häufigkeit von Erkennungsanfragen an die Anwendung basieren, um die Systemressourcen nicht zu überlasten. Die Laufzeit kann dieses Ereignis für einen XrSpatialContextEXT nicht in die Warteschlange stellen, wenn während der Lebensdauer dieses XrSpatialContextEXT keine Entitäten 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 die Erkennung für diesen räumlichen Kontext in die Warteschlange stellen und keine solchen Ereignisse für diesen Kontext von xrPollEvent zurückgeben.

Gültige Verwendung (implizit)

Komponentendaten abfragen

Die Funktion xrQuerySpatialComponentDataEXT ist so definiert:

XrResult xrQuerySpatialComponentDataEXT(
    XrSpatialSnapshotEXT                        snapshot,
    const XrSpatialComponentDataQueryConditionEXT* queryCondition,
    XrSpatialComponentDataQueryResultEXT*       queryResult);

Parameterbeschreibungen

Die Anwendung kann xrQuerySpatialComponentDataEXT verwenden, um die Komponentendaten der Entitäten im Snapshot abzufragen. Dazu wird eine Listenstruktur an XrSpatialComponentDataQueryResultEXT :: next angehä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 einer Teilmenge der in XrSpatialComponentDataQueryConditionEXT :: componentTypes aufgeführten Komponenten entsprechen. Die Anwendung kann die Listenstrukturen vollständig weglassen, wenn sie nur die IDs und den Tracking-Status der räumlichen Entitäten wissen möchte, die die queryCondition erfüllen. Die Laufzeit darf das Fehlen von Listenstrukturen aus der XrSpatialComponentDataQueryResultEXT :: next-Kette nicht als Fehler behandeln.

Wenn XrEventDataReferenceSpaceChangePending in die Warteschlange gestellt wird und XrEventDataReferenceSpaceChangePending :: changeTime verstrichen ist, während die Anwendung Komponentendaten von einem XrSpatialSnapshotEXT abfragt, kann die Anwendung die Ereignisdaten verwenden, um die Positionen entsprechend anzupassen.

Die Laufzeit muss XrSpatialComponentDataQueryResultEXT :: entityIds nur mit Entitäten füllen, die alle in XrSpatialComponentDataQueryConditionEXT :: componentTypes angegebenen Komponenten enthalten. Wenn XrSpatialComponentDataQueryConditionEXT :: componentTypeCount den Wert 0 hat, muss die Laufzeit queryResult mit allen Entitäten (und ihren Tracking-Status) füllen, die sich im Snapshot befinden. Wenn XrSpatialComponentDataQueryConditionEXT :: next zusätzliche Abfragebedingungen hinzugefügt werden, muss die Laufzeit diese als „UND“ mit der Verfügbarkeit der Komponententypen behandeln. Das bedeutet, dass die Laufzeit XrSpatialComponentDataQueryResultEXT ::entityIds nur mit Entitäten füllen muss, die alle angegebenen Bedingungen erfüllen. Die Laufzeit muss die Komponentendaten in den Listenstrukturen in derselben Reihenfolge wie die Entitäten in XrSpatialComponentDataQueryResultEXT :: entityIds füllen. Das bedeutet, dass die Komponentendaten an einem bestimmten Index im Array der Listenstruktur der Entität am selben Index entsprechen müssen.

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 entspricht, im Array, das in den Listenstrukturen enthalten ist, die an XrSpatialComponentDataQueryResultEXT angehängt sind, nicht ändern.

Gültige Verwendung (implizit)

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_VALIDATION_FAILURE

Die Anwendung erstellt beispielsweise einen XrSpatialSnapshotEXT, der 5 Entitäten enthält, wobei:

  • Entität 1 und 2 haben die Komponenten XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT und XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT
  • Entität 3 und 4 haben die Komponenten XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT und XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT
  • Entität 5 hat die Komponenten XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT und XR_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

Nein Text is not SVG - cannot display

Abbildung 20: Beispiel-Snapshot

xrQuerySpatialComponentDataEXT für den obigen 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. 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 Entit...

Daten für entityId #2

Daten für Entit...

Daten für entityId #5

Daten für Entit...

entityIds

entityIds

Weiter

Weiter

XrSpatialComponent
DataQueryResultEXT

XrSpatialComponent
Dat...

bounds

bounds

XrSpatialComponent
Bounded2DListEXT

XrSpatialComponent
Bou... Text ist kein SVG – kann nicht angezeigt werden

Abbildung 21: Beispiel für ein Abfrageergebnis

xrQuerySpatialComponentDataEXT für den obigen 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. 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 Entit...

Daten für entityId #4

Daten für Entit...

Mesh3D

Mesh3D

Daten für entityId 3

Daten für Entit...

Daten für entityId #4

Daten für Entit...

entityIds

entityIds

Weiter

Weiter

XrSpatialComponent
DataQueryResultEXT

XrSpatialComponent
Da...

bounds

bounds

Weiter

Weiter

XrSpatialComponent
Bounded3DListEXT

XrSpatialComponent
Bo...

XrSpatialComponent
Mesh3DListEXT

XrSpatialComponent
Me...

Meshes

meshes Text is not SVG - cannot display

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

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette.
  • componentTypeCount ist ein uint32_t, der die Anzahl der Elemente im Array componentTypes beschreibt.
  • componentTypes ist ein Array von XrSpatialComponentTypeEXT, für die die Daten aus dem Snapshot abgerufen werden sollen.

Gültige Verwendung (implizit)

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

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette.
  • entityIdCapacityInput ist die Kapazität des entityIds-Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.
  • entityIdCountOutput ist die Anzahl der XrSpatialEntityIdEXT in entityIds oder die erforderliche Kapazität, falls entityIdCapacityInput nicht ausreicht.
  • entityIds ist ein Array von XrSpatialEntityIdEXT . Er kann NULL sein, wenn entityIdCapacityInput 0 ist.
  • entityStateCapacityInput ist die Kapazität des entityStates-Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.
  • entityStateCountOutput ist die Anzahl der XrSpatialEntityTrackingStateEXT in entityStates oder die erforderliche Kapazität, falls entityStateCapacityInput nicht ausreicht. Dieser Wert muss immer mit entityIdCountOutput übereinstimmen.
  • entityStates ist ein Array von XrSpatialEntityTrackingStateEXT . Er kann NULL sein, wenn entityStateCapacityInput 0 ist.
  • Eine detaillierte Beschreibung zum Abrufen der erforderlichen entityIds-Größe finden Sie im Abschnitt Parameter für die Puffergröße.

Eine Anwendung kann die entityIds mit xrCreateSpatialEntityFromIdEXT verwenden, um XrSpatialEntityEXT-Handles für die Entitäten zu erstellen, für die sie regelmäßig Updates erhalten möchte. Die Anwendung kann diese XrSpatialEntityEXT-Handles dann mit xrCreateSpatialUpdateSnapshotEXT verwenden, um einen Update-Snapshot zu erstellen, der die neuesten bekannten Daten der Komponenten für die bereitgestellten Entitäten enthält.

Gültige Verwendung (implizit)

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;

XrSpatialEntityTrackingStateEXT listet die möglichen Tracking-Status für räumliche Entitäten auf:

Die Enums haben die folgenden Bedeutungen:

Enum-Beschreibung

XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT

Die Laufzeit hat das Tracking dieser Entität beendet und wird es nicht wieder aufnehmen.

XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT

Die Laufzeit hat das Tracking dieser Entität pausiert, kann es aber in Zukunft wieder aufnehmen.

XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT

Die Laufzeit verfolgt diese Entität derzeit und die Komponentendaten sind gültig.

Tracking

PAUSIERT

ANGEHALTEN

Abbildung 23: XrSpatialEntityTrackingStateEXT

  • Die Laufzeit kann den Status des räumlichen Elements von XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT in XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT ändern, wenn das Tracking dieses räumlichen Elements ausgesetzt wird, aber in Zukunft wieder aufgenommen werden kann. Beispiele dafür, wann die Laufzeit dies möglicherweise tut, sind unter anderem, wenn die Anwendung den Eingabefokus verliert, wenn die angegebene räumliche Entität zu weit vom Nutzer entfernt ist, um genau verfolgt zu werden, oder wenn zu viele Entitäten verfolgt werden und die Laufzeit die Kosten für die Verfolgung reduzieren möchte. XrSpatialEntityTrackingStateEXT hilft der Anwendung, sich von den verschiedenen Tracking-Richtlinien der einzelnen Laufzeiten zu isolieren.
  • Die Laufzeit kann den Status einer Entität von XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT in XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT oder XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT ändern.
  • Die Laufzeit muss den Status des räumlichen Elements von XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT oder XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT in XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT ändern, wenn das räumliche Element verloren geht und das Tracking nicht wiederhergestellt oder fortgesetzt werden kann. 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_EXT festgelegt ist, darf die Laufzeit ihn nicht mehr in einen anderen Status ändern.
  • Wenn die Komponentendaten einer räumlichen Entität mit xrQuerySpatialComponentDataEXT abgefragt werden, muss die Laufzeit gültige Daten in den Inhalten der Puffer festlegen, die von der Anwendung in der nächsten Kette von XrSpatialComponentDataQueryResultEXT bereitgestellt werden, wenn der Entitätsstatus XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT ist. Wenn der Entitätsstatus XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT oder XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT ist, darf die Laufzeit den Inhalt der Puffer nicht ändern.

Zwei-Aufruf-Idiom für Komponentendaten

Die Struktur XrSpatialBufferEXT ist so definiert:

typedef struct XrSpatialBufferEXT {
    XrSpatialBufferIdEXT      bufferId;
    XrSpatialBufferTypeEXT    bufferType;
} XrSpatialBufferEXT;

Mitgliederbeschreibungen

  • bufferId die XrSpatialBufferIdEXT der Pufferdaten.
  • bufferType ist der XrSpatialBufferTypeEXT, der den Datentyp in bufferId angibt. Die Anwendung kann bufferType verwenden, um zu bestimmen, welche Funktion zum Abrufen der tatsächlichen Daten des Puffers verwendet werden soll.

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 einen XrSpatialBufferEXT für jeden Puffer mit variabler Größe bereit, der in den Daten dieser Komponente benötigt wird.

Für dieselbe bufferId muss die Laufzeit dieselben Daten von einer Komponentendatenabfrage zur anderen bereitstellen, auch von einem Snapshot zum anderen. Ein anderer bufferId zwischen Aufrufen von Komponentendatenabfragen zeigt der Anwendung an, dass sich die Daten für diese Komponente möglicherweise geändert haben.

Gültige Verwendung (implizit)

XR_DEFINE_ATOM(XrSpatialBufferIdEXT)

XrSpatialBufferIdEXT wird verwendet, um alle Arten von Daten mit variabler Größe für eine räumliche Komponente darzustellen.

Die Laufzeit muss die XrSpatialBufferIdEXT und ihre Daten mindestens für den Lebenszyklus des XrSpatialSnapshotEXT, der sie enthält, im Arbeitsspeicher behalten. Die Laufzeit kann die XrSpatialBufferIdEXT und ihre Daten länger als den Lebenszyklus des 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 Aufzählung XrSpatialBufferTypeEXT gibt die verschiedenen Datentypen des Puffers an, der durch XrSpatialBufferIdEXT dargestellt wird.

Beschreibungen der Enumeranten

  • XR_SPATIAL_BUFFER_TYPE_STRING_EXT . Der XrSpatialBufferIdEXT kann an xrGetSpatialBufferStringEXT übergeben werden, um einen Stringpuffer abzurufen.
  • XR_SPATIAL_BUFFER_TYPE_UINT8_EXT . Der XrSpatialBufferIdEXT kann an xrGetSpatialBufferUint8EXT übergeben werden, um einen uint8_t-Zwischenspeicher abzurufen.
  • XR_SPATIAL_BUFFER_TYPE_UINT16_EXT . Der XrSpatialBufferIdEXT kann an xrGetSpatialBufferUint16EXT übergeben werden, um einen uint16_t-Zwischenspeicher abzurufen.
  • XR_SPATIAL_BUFFER_TYPE_UINT32_EXT . Der XrSpatialBufferIdEXT kann an xrGetSpatialBufferUint32EXT übergeben werden, um einen uint32_t-Zwischenspeicher abzurufen.
  • XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT . Der XrSpatialBufferIdEXT kann an xrGetSpatialBufferFloatEXT übergeben werden, um einen float-Zwischenspeicher abzurufen.
  • XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT . XrSpatialBufferIdEXT kann an xrGetSpatialBufferVector2fEXT übergeben werden, um einen XrVector2f-Zwischenspeicher abzurufen.
  • XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT . XrSpatialBufferIdEXT kann an xrGetSpatialBufferVector3fEXT übergeben werden, um einen XrVector3f-Zwischenspeicher abzurufen.

Die Funktion xrGetSpatialBufferStringEXT ist so definiert:

XrResult xrGetSpatialBufferStringEXT(
    XrSpatialSnapshotEXT                        snapshot,
    const XrSpatialBufferGetInfoEXT*            info,
    uint32_t                                    bufferCapacityInput,
    uint32_t*                                   bufferCountOutput,
    char*                                       buffer);

Parameterbeschreibungen

  • snapshot ist ein Handle für ein XrSpatialSnapshotEXT .
  • info enthält die Informationen zum abzufragenden Puffer.
  • bufferCapacityInput ist die Kapazität des Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.
  • bufferCountOutput ist die Anzahl der Zeichen oder die erforderliche Kapazität, falls bufferCapacityInput nicht ausreicht.
  • buffer ist ein Array von char . Er kann NULL sein, wenn bufferCapacityInput 0 ist.
  • Eine detaillierte Beschreibung zum Abrufen der erforderlichen buffer-Größe finden Sie im Abschnitt Parameter für die Puffergröße.

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 Laufzeit ausgefüllt wird, muss ein nullterminierter UTF-8-String sein.

Gültige Verwendung (implizit)

  • Die Erweiterung XR_EXT_spatial_entity muss aktiviert sein, bevor xrGetSpatialBufferStringEXT aufgerufen wird.
  • snapshot muss ein gültiges XrSpatialSnapshotEXT-Handle sein
  • info muss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein.
  • bufferCountOutput muss ein Zeiger auf einen uint32_t-Wert sein
  • Wenn bufferCapacityInput nicht 0 ist, muss buffer ein Zeiger auf ein Array von bufferCapacityInput-Zeichenwerten sein.

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_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

  • snapshot ist ein Handle für ein XrSpatialSnapshotEXT .
  • info enthält die Informationen zum abzufragenden Puffer.
  • bufferCapacityInput ist die Kapazität des Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.
  • bufferCountOutput ist die Anzahl der Elemente im buffer-Array oder die erforderliche Kapazität, falls bufferCapacityInput nicht ausreicht.
  • buffer ist ein Array von uint8_t . Er kann NULL sein, wenn bufferCapacityInput 0 ist.
  • Eine detaillierte Beschreibung zum Abrufen der erforderlichen buffer-Größe finden Sie im Abschnitt Parameter für die Puffergröße.

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 Verwendung (implizit)

  • Die Erweiterung XR_EXT_spatial_entity muss aktiviert sein, bevor xrGetSpatialBufferUint8EXT aufgerufen wird.
  • snapshot muss ein gültiges XrSpatialSnapshotEXT-Handle sein
  • info muss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein.
  • bufferCountOutput muss ein Zeiger auf einen uint32_t-Wert sein
  • Wenn bufferCapacityInput nicht 0 ist, muss buffer ein Zeiger auf ein Array von bufferCapacityInput-uint8_t-Werten sein.

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_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

  • snapshot ist ein Handle für ein XrSpatialSnapshotEXT .
  • info enthält die Informationen zum abzufragenden Puffer.
  • bufferCapacityInput ist die Kapazität des Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.
  • bufferCountOutput ist die Anzahl der Elemente im buffer-Array oder die erforderliche Kapazität, falls bufferCapacityInput nicht ausreicht.
  • buffer ist ein Array von uint16_t . Er kann NULL sein, wenn bufferCapacityInput 0 ist.
  • Eine detaillierte Beschreibung zum Abrufen der erforderlichen buffer-Größe finden Sie im Abschnitt Parameter für die Puffergröße.

Die Anwendung kann die Daten für einen von einer Komponente bereitgestellten XrSpatialBufferEXT abrufen, 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 Verwendung (implizit)

  • Die Erweiterung XR_EXT_spatial_entity muss aktiviert sein, bevor xrGetSpatialBufferUint16EXT aufgerufen wird.
  • snapshot muss ein gültiges XrSpatialSnapshotEXT-Handle sein
  • info muss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein.
  • bufferCountOutput muss ein Zeiger auf einen uint32_t-Wert sein
  • Wenn bufferCapacityInput nicht 0 ist, muss buffer ein Zeiger auf ein Array von bufferCapacityInput-uint16_t-Werten sein.

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_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

  • snapshot ist ein Handle für ein XrSpatialSnapshotEXT .
  • info enthält die Informationen zum abzufragenden Puffer.
  • bufferCapacityInput ist die Kapazität des Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.
  • bufferCountOutput ist die Anzahl der Elemente im buffer-Array oder die erforderliche Kapazität, falls bufferCapacityInput nicht ausreicht.
  • buffer ist ein Array von uint32_t . Er kann NULL sein, wenn bufferCapacityInput 0 ist.
  • Eine detaillierte Beschreibung zum Abrufen der erforderlichen buffer-Größe finden Sie im Abschnitt Parameter für die Puffergröße.

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 Verwendung (implizit)

  • Die Erweiterung XR_EXT_spatial_entity muss aktiviert sein, bevor xrGetSpatialBufferUint32EXT aufgerufen wird.
  • snapshot muss ein gültiges XrSpatialSnapshotEXT-Handle sein
  • info muss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein.
  • bufferCountOutput muss ein Zeiger auf einen uint32_t-Wert sein
  • Wenn bufferCapacityInput nicht 0 ist, muss buffer ein Zeiger auf ein Array von bufferCapacityInput-uint32_t-Werten sein.

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_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

  • snapshot ist ein Handle für ein XrSpatialSnapshotEXT .
  • info enthält die Informationen zum abzufragenden Puffer.
  • bufferCapacityInput ist die Kapazität des Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.
  • bufferCountOutput ist die Anzahl der Elemente im buffer-Array oder die erforderliche Kapazität, falls bufferCapacityInput nicht ausreicht.
  • buffer ist ein Array von float . Er kann NULL sein, wenn bufferCapacityInput 0 ist.
  • Eine detaillierte Beschreibung zum Abrufen der erforderlichen buffer-Größe finden Sie im Abschnitt Parameter für die Puffergröße.

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 Verwendung (implizit)

  • Die Erweiterung XR_EXT_spatial_entity muss aktiviert sein, bevor xrGetSpatialBufferFloatEXT aufgerufen wird.
  • snapshot muss ein gültiges XrSpatialSnapshotEXT-Handle sein
  • info muss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein.
  • bufferCountOutput muss ein Zeiger auf einen uint32_t-Wert sein
  • Wenn bufferCapacityInput nicht 0 ist, muss buffer ein Zeiger auf ein Array von bufferCapacityInput-float-Werten sein.

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_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

  • snapshot ist ein Handle für ein XrSpatialSnapshotEXT .
  • info enthält die Informationen zum abzufragenden Puffer.
  • bufferCapacityInput ist die Kapazität des Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.
  • bufferCountOutput ist die Anzahl der Elemente im buffer-Array oder die erforderliche Kapazität, falls bufferCapacityInput nicht ausreicht.
  • buffer ist ein Array von XrVector2f . Er kann NULL sein, wenn bufferCapacityInput 0 ist.
  • Eine detaillierte Beschreibung zum Abrufen der erforderlichen buffer-Größe finden Sie im Abschnitt Parameter für die Puffergröße.

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 Verwendung (implizit)

  • Die Erweiterung XR_EXT_spatial_entity muss aktiviert sein, bevor xrGetSpatialBufferVector2fEXT aufgerufen wird.
  • snapshot muss ein gültiges XrSpatialSnapshotEXT-Handle sein
  • info muss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein.
  • bufferCountOutput muss ein Zeiger auf einen uint32_t-Wert sein
  • Wenn bufferCapacityInput nicht 0 ist, muss buffer ein Zeiger auf ein Array von bufferCapacityInput XrVector2f-Strukturen sein.

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_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

  • snapshot ist ein Handle für ein XrSpatialSnapshotEXT .
  • info enthält die Informationen zum abzufragenden Puffer.
  • bufferCapacityInput ist die Kapazität des Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.
  • bufferCountOutput ist die Anzahl der Elemente im buffer-Array oder die erforderliche Kapazität, falls bufferCapacityInput nicht ausreicht.
  • buffer ist ein Array von XrVector3f . Er kann NULL sein, wenn bufferCapacityInput 0 ist.
  • Eine detaillierte Beschreibung zum Abrufen der erforderlichen buffer-Größe finden Sie im Abschnitt Parameter für die Puffergröße.

Die Anwendung kann die Daten für einen von einer Komponente bereitgestellten XrSpatialBufferEXT abrufen, 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 Verwendung (implizit)

  • Die Erweiterung XR_EXT_spatial_entity muss aktiviert sein, bevor xrGetSpatialBufferVector3fEXT aufgerufen wird.
  • snapshot muss ein gültiges XrSpatialSnapshotEXT-Handle sein
  • info muss ein Zeiger auf eine gültige XrSpatialBufferGetInfoEXT-Struktur sein.
  • bufferCountOutput muss ein Zeiger auf einen uint32_t-Wert sein
  • Wenn bufferCapacityInput nicht 0 ist, muss buffer ein Zeiger auf ein Array von bufferCapacityInput XrVector3f-Strukturen sein.

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_ERROR_VALIDATION_FAILURE

Die Struktur XrSpatialBufferGetInfoEXT ist so definiert:

typedef struct XrSpatialBufferGetInfoEXT {
    XrStructureType         type;
    const void*             next;
    XrSpatialBufferIdEXT    bufferId;
} XrSpatialBufferGetInfoEXT;

Mitgliederbeschreibungen

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette.
  • bufferId ein XrSpatialBufferIdEXT für den Zwischenspeicher, dessen Daten abgerufen werden sollen.

Gültige Verwendung (implizit)

#define XR_NULL_SPATIAL_BUFFER_ID_EXT 0

XR_NULL_SPATIAL_BUFFER_ID_EXT ist ein reservierter Wert, der einen ungültigen XrSpatialBufferIdEXT darstellt. Er darf 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

Die Anwendung kann xrCreateSpatialUpdateSnapshotEXT verwenden, um einen Snapshot zu erstellen und die neuesten Komponentendaten für bestimmte Entitäten abzurufen, die der Laufzeit bekannt sind. Anwendungen können die XrSpatialEntityEXT-Handles und die Komponententypen angeben, die sie beim Erstellen des Snapshots interessieren.

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, darf die Laufzeit nur räumliche Entitäten in den Snapshot aufnehmen, die mindestens eine der in XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes bereitgestellten Komponenten haben. Außerdem darf 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 XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes nicht für die räumlichen Funktionen aktiviert ist, die beim Erstellen von spatialContext an XrSpatialContextCreateInfoEXT :: capabilityConfigs übergeben wurden.

Wenn die Anwendung keine Liste der räumlichen Komponententypen in XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes bereitstellt, muss die Laufzeit alle in XrSpatialUpdateSnapshotCreateInfoEXT :: entities aufgeführten räumlichen Entitäten in den Snapshot aufnehmen und die Daten für alle aktivierten Komponenten der für spatialContext konfigurierten Funktionen müssen enthalten sein.

Die Laufzeit darf keine räumlichen Entitäten 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 Arbeitsspeicher berücksichtigen und die Snapshots löschen, sobald sie nicht mehr benötigt werden.

Gültige Verwendung (implizit)

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT
  • XR_ERROR_TIME_INVALID
  • XR_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

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.
  • entityCount ist ein uint32_t, der die Anzahl der Elemente im Array entities beschreibt.
  • entities ist ein Array von XrSpatialEntityEXT, für die die Laufzeit die Komponentendaten in den Snapshot aufnehmen muss.
  • componentTypeCount ist ein uint32_t, der die Anzahl der Elemente im Array componentTypes beschreibt.
  • componentTypes ist ein Array von XrSpatialComponentTypeEXT, für die die Laufzeit die Daten in den Snapshot aufnehmen muss.
  • baseSpace ist der XrSpace, relativ zu dem sich alle Orte des Updates XrSpatialSnapshotEXT befinden.
  • time ist der XrTime, an dem sich alle Orte des Updates XrSpatialSnapshotEXT befinden.

Gültige Verwendung (implizit)

  • Die Erweiterung XR_EXT_spatial_entity muss aktiviert werden, bevor XrSpatialUpdateSnapshotCreateInfoEXT verwendet werden kann.
  • type muss XR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT sein
  • next muss NULL oder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.
  • entities muss ein Zeiger auf ein Array von entityCount gültigen XrSpatialEntityEXT-Handles sein.
  • Wenn componentTypeCount nicht 0 ist, muss componentTypes ein Zeiger auf ein Array mit componentTypeCount gültigen XrSpatialComponentTypeEXT-Werten sein.
  • baseSpace muss ein gültiger XrSpace-Alias sein
  • Der Parameter entityCount muss größer als 0 sein.
  • Sowohl baseSpace als auch die Elemente von entities müssen aus derselben XrSession erstellt, zugewiesen oder abgerufen worden sein.

Snapshot löschen

Die Funktion xrDestroySpatialSnapshotEXT ist so definiert:

XrResult xrDestroySpatialSnapshotEXT(
    XrSpatialSnapshotEXT                        snapshot);

Parameterbeschreibungen

Die Anwendung kann xrDestroySpatialSnapshotEXT aufrufen, um das XrSpatialSnapshotEXT-Handle und die damit verknüpften Ressourcen zu löschen.

Gültige Verwendung (implizit)

Threadsicherheit

  • Der Zugriff auf snapshot und alle untergeordneten Handles muss extern synchronisiert werden.

Rückgabecodes

Erfolg

  • XR_SUCCESS

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_RUNTIME_FAILURE

Allgemeine Komponenten

Begrenztes 2D

Komponentendaten

Die Struktur XrSpatialBounded2DDataEXT ist so definiert:

typedef struct XrSpatialBounded2DDataEXT {
    XrPosef        center;
    XrExtent2Df    extents;
} XrSpatialBounded2DDataEXT;

Mitgliederbeschreibungen

  • center ist ein XrPosef, der den geometrischen Mittelpunkt der begrenzten 2D-Komponente definiert.
  • extents ist die Ausdehnung der begrenzten 2D-Komponente entlang der x-Achse (extents.width) und der y-Achse (extents.height), zentriert auf center .

Die extents des XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT beziehen sich auf die Größe des Elements in der x-y-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 m x 1 m große Ebene, die bei {0, 0, 0} zentriert ist und deren Normalenvektor der Vorderseite in die +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: Bounded2D-Komponenten-Koordinatensystem

Hinweis

OpenXR verwendet eine X-Y-Ebene mit +Z als Normalenvektor, andere APIs können jedoch eine X-Z-Ebene mit +Y als Normalenvektor verwenden. Die X-Y-Ebene kann in eine X-Z-Ebene umgewandelt werden, indem sie um -π/2 Radiant um die +X-Achse gedreht wird.

Gültige Verwendung (implizit)

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

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.
  • boundCount ist ein uint32_t, der die Anzahl der Elemente im Array bounds beschreibt.
  • bounds ist ein Array von XrSpatialBounded2DDataEXT .

Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE von xrQuerySpatialComponentDataEXT zurückgeben, wenn sich XrSpatialComponentBounded2DListEXT in der nächsten Kette von XrSpatialComponentDataQueryResultEXT :: next befindet, 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 Verwendung (implizit)

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-Modell

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

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.
  • boundCount ist ein uint32_t, der die Anzahl der Elemente im Array bounds beschreibt.
  • bounds ist ein Array von XrBoxf .

Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE von xrQuerySpatialComponentDataEXT zurückgeben, wenn sich XrSpatialComponentBounded3DListEXT in der nächsten Kette von XrSpatialComponentDataQueryResultEXT :: next befindet, 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 Verwendung (implizit)

  • Die Erweiterung XR_EXT_spatial_entity muss aktiviert werden, bevor XrSpatialComponentBounded3DListEXT verwendet werden kann.
  • type muss XR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT sein
  • next muss NULL oder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.
  • bounds muss ein Zeiger auf ein Array von boundCount XrBoxf-Strukturen sein.
  • Der Parameter boundCount muss größer als 0 sein.
Konfiguration

Wenn XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT in XrSpatialCapabilityComponentTypesEXT :: componentTypes für eine Funktion aufgeführt ist, kann die Anwendung sie aktivieren, indem sie das Enum in die Liste XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents aufnimmt. Für diese Komponente ist keine spezielle Konfiguration erforderlich, um in die nächste Kette von XrSpatialCapabilityConfigurationBaseHeaderEXT aufgenommen zu werden.

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

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.
  • parentCount ist ein uint32_t, der die Anzahl der Elemente im Array parents beschreibt.
  • parents ist ein Array von XrSpatialEntityIdEXT .

Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE von xrQuerySpatialComponentDataEXT zurückgeben, wenn sich XrSpatialComponentParentListEXT in der nächsten Kette von XrSpatialComponentDataQueryResultEXT :: next befindet, 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 Verwendung (implizit)

  • Die Erweiterung XR_EXT_spatial_entity muss aktiviert sein, bevor XrSpatialComponentParentListEXT verwendet werden kann.
  • type muss XR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT sein
  • next muss NULL oder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.
  • parents muss ein Zeiger auf ein Array von parentCount XrSpatialEntityIdEXT-Werten sein.
  • Der Parameter parentCount muss größer als 0 sein.
Konfiguration

Wenn XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT in XrSpatialCapabilityComponentTypesEXT :: componentTypes für eine Funktion aufgeführt ist, kann die Anwendung sie aktivieren, indem sie das Enum in die Liste XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents aufnimmt. Für diese Komponente ist keine spezielle Konfiguration erforderlich, um in die nächste Kette von XrSpatialCapabilityConfigurationBaseHeaderEXT aufgenommen zu werden.

Mesh 3D

Komponentendaten

Die Struktur XrSpatialMeshDataEXT ist so definiert:

typedef struct XrSpatialMeshDataEXT {
    XrPosef               origin;
    XrSpatialBufferEXT    vertexBuffer;
    XrSpatialBufferEXT    indexBuffer;
} XrSpatialMeshDataEXT;

Mitgliederbeschreibungen

  • origin ist ein XrPosef, der den Ursprung des Mesh definiert. Alle Eckpunkte des Mesh-Netzwerks müssen relativ zu diesem Ursprung sein.
  • vertexBuffer ist ein XrSpatialBufferEXT, der die ID für einen Zwischenspeicher bereitstellt, der den Vertex-Zwischenspeicher der Entität darstellt, auf der sich diese Komponente befindet. Die Position der Eckpunkte muss relativ zu origin sein.
  • indexBuffer ist ein XrSpatialBufferEXT, der die ID für einen Zwischenspeicher bereitstellt, der ein Array von Dreiecksindexen darstellt, die die Indexe der Mesh-Scheitelpunkte in vertexBuffer angeben. Die Dreiecksindizes müssen gegen den Uhrzeigersinn zurückgegeben werden. Drei Indizes bezeichnen ein Dreieck.

Der Komponententyp, der XrSpatialMeshDataEXT verwendet, muss den XrSpatialBufferTypeEXT von vertexBuffer und indexBuffer angeben.

Gültige Verwendung (implizit)

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

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette.
  • meshCount ist ein uint32_t, der die Anzahl der Elemente im Array meshes beschreibt.
  • meshes ist ein Array von XrSpatialMeshDataEXT .

Die Anwendung kann die 3D-Mesh-Komponente der räumlichen Entitäten in einem XrSpatialSnapshotEXT abfragen, indem sie XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT in XrSpatialComponentDataQueryConditionEXT :: componentTypes hinzufügt und XrSpatialComponentMesh3DListEXT zur nächsten Zeigerkette 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 werden, muss XrSpatialBufferEXT :: bufferType für XrSpatialMeshDataEXT :: vertexBuffer XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT sein und XrSpatialBufferEXT :: bufferType für XrSpatialMeshDataEXT :: indexBuffer muss XR_SPATIAL_BUFFER_TYPE_UINT32_EXT sein.

Gültige Verwendung (implizit)

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 das Enum in die Liste XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents der von 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 den Tracking-Status

Die Struktur XrSpatialFilterTrackingStateEXT ist so definiert:

typedef struct XrSpatialFilterTrackingStateEXT {
    XrStructureType                    type;
    const void*                        next;
    XrSpatialEntityTrackingStateEXT    trackingState;
} XrSpatialFilterTrackingStateEXT;

Mitgliederbeschreibungen

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette.
  • trackingState ist der XrSpatialEntityTrackingStateEXT, auf den die Anwendung den Filter anwenden möchte.

Die Anwendung kann XrSpatialFilterTrackingStateEXT in der nächsten Kette von XrSpatialDiscoverySnapshotCreateInfoEXT verwenden, um die Erkennung 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 Verwendung (implizit)

Beispielcode

Anwendungsnutzung

Anwendungen verwenden die Erweiterung für räumliche Entitäten in der Regel nach dem folgenden Muster:

Räumliche Entitäten entdecken und Komponentendaten abfragen

Der folgende Beispielcode zeigt, wie Sie räumliche Entitäten für die Funktion „Foo“ ermitteln und die zugehörigen Komponentendaten abfragen.

/****************************/
/* 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

Der folgende Beispielcode zeigt, 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 Entität bereitstellt,

  • 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 verwendet werden, um der Laufzeit Hinweise darauf zu geben, welche Entitäten und Daten in den Snapshot aufgenommen werden sollen, wie es von der aktuellen Konfiguration des räumlichen Kontexts (und damit der aktuellen Konfiguration der zugrunde liegenden Dienste) erfasst wird.

  • Wenn eine Erweiterung eine neue XrSpatialCapabilityEXT definiert,

  • 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 Anwendung kann diese Struktur verwenden, 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 XrSpatialBufferIdEXT bereitstellt, muss sie von einem XrSpatialBufferTypeEXT begleitet werden, um die Anwendung über den Datentyp des Puffers zu informieren. Die Anwendung kann dann eine entsprechende xrGetSpatialBuffer*-Funktion verwenden, um den tatsächlichen Inhalt des Puffers abzurufen.

Richtlinien für das Design und die Erweiterung semantischer Labels

Diese Erweiterung definiert zwar keine Komponente zur Übermittlung der semantischen Labelinformationen einer Entität, 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, nicht jedoch 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 einen semantischen Labelsatz darstellt, muss einen Wert haben, der angibt, dass die Entität keinem der Labels dieses Satzes zugeordnet ist. Der Name dieses Enumeranten muss „UNCATEGORIZED“ enthalten, z.B. XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT . Dieser Wert gibt Anwendungen an, dass die Laufzeit diese Entität erkennt, es aber andere semantische Labelsets gibt, in denen diese Entität kategorisiert ist.
  • Die Aufzählung dieses neu definierten XrSpatialComponentTypeEXT in xrEnumerateSpatialCapabilityComponentTypesEXT bedeutet, dass die Laufzeit die semantischen Labels (und damit die im Set definierten Labels) unterstützt, die diesem Komponententyp entsprechen.
  • Anwendungen geben an, dass sie Entitäten mit Labels aus diesem semantischen Labelset erkennen möchten, indem sie den entsprechenden XrSpatialComponentTypeEXT in das Array XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents der Konfigurationsstruktur für die Funktion einfügen, für die der Komponententyp aufgezählt wird.
  • Es ist möglich, dass eine einzelne räumliche Entität mehrere Komponenten hat, die jeweils ein Label aus ihrem eigenen semantischen Labelset bereitstellen. Sehen wir uns das folgende Beispiel mit einigen hypothetischen semantischen Label-Sets an: XrSpatialObjectSemanticLabel, die Werte wie Stuhl, Sofa, Tisch usw. haben könnten. XrSpatialSofaBrand mit Werten wie IKEA, Wayfair usw. und XrSpatialIkeaSofa mit bestimmten IKEA-Modellnamen von Sofas. In diesem Szenario hat dieselbe Sofa-Entität alle drei Komponenten (Labels aus allen drei semantischen Label-Sets), die jeweils einen anderen Detaillierungsgrad der Informationen über die Entität liefern.
  • Wenn eine Erweiterung einen neuen XrSpatialComponentTypeEXT definiert, der einen neuen Satz semantischer Labels mit mehreren Labels zusätzlich zum Label UNCATEGORIZED bereitstellt, sollte die Erweiterung in Betracht ziehen, ein XrSpatialCapabilityFeatureEXT zu definieren, mit dem Anwendungen nur eine Teilmenge der Labels aktivieren können, die im Satz semantischer Labels für diesen Komponententyp definiert sind. Diese Teilmenge, die in der nächsten Kette der Funktionskonfiguration bereitgestellt wird, dient als Hinweis für Laufzeiten, ihre Tracking-Pipelines zu optimieren und nur die bereitgestellte Teilmenge zu verfolgen. Ein Beispiel für eine solche Feature-Struktur finden Sie unten .
  • Erweiterungen dürfen keine Labels zu vorhandenen semantischen Label-Set-Aufzählungen hinzufügen. Stattdessen müssen sie eine neue Aufzählung definieren, die neben den neu hinzugefügten Aufzählungswerten auch gleichwertige Aufzählungswerte mit identischer Semantik und Werten enthält, die denen aus dem anderen Satz entsprechen. Die Spezifikation des neu definierten Satzes semantischer Labels muss auch die Zuordnung zwischen dem alten und dem neuen Satz von Labels herstellen. Beispiel unten
Beispiel für die Definition eines räumlichen Merkmals 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 Erweiterung für räumliche semantische Labels
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;

Sehen wir uns das obige Beispiel an, in dem eine Erweiterung eine Aufzählung XrSpatialExamplePlaneSemanticLabelExtensionEXT definiert, um die vorhandene XrSpatialPlaneSemanticLabelEXT um Werte für Türen und Fenster zu erweitern. Die Spezifikation für die neue Aufzählung muss Text im folgenden Format 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 Gestellarten

  • XrSpatialBufferIdEXT
  • XrSpatialEntityIdEXT

Neue Objekttypen

Neue Befehle

Neue Gebäude

Neue Enums

Neue Enum-Konstanten

  • XR_EXT_SPATIAL_ENTITY_EXTENSION_NAME
  • XR_EXT_spatial_entity_SPEC_VERSION
  • Erweiterung von XrObjectType :

    • XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXT
    • XR_OBJECT_TYPE_SPATIAL_ENTITY_EXT
    • XR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT
  • Erweiterung von XrResult :

    • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
    • XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT
    • XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT
    • XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT
    • XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT
    • XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT
  • Erweiterung von XrStructureType :

    • XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT
    • XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT
    • XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT
    • XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT
    • XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT
    • XR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT
    • XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT
    • XR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT
    • XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT
    • XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT
    • XR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXT
    • XR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT
    • XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT
    • XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT
    • XR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXT
    • XR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXT
    • XR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT

Probleme

  • Leitet sich eine einzelne Entität immer nur von einer einzigen Fähigkeit ab?

    • Behoben
    • Antwort: Nein. Das hängt vollständig von der Laufzeit ab, basierend auf ihren eigenen Tracking-Funktionen und wie sie eine erkannte Entität darstellen möchte. Die Spezifikation schreibt keine bestimmte Darstellung von räumlichen Entitäten vor, mit Ausnahme der garantierten Komponenten einer bestimmten Funktion, um eine Mindesterwartung festzulegen. Eine Laufzeit kann Entitäten, die von separaten Funktionen erkannt wurden, zusammenführen und als einzelne Entität mit den garantierten Komponenten aller Funktionen darstellen, die zu ihrer Identifizierung beigetragen haben. Ein Beispiel hierfür wäre, dass Tische sowohl durch eine Funktion zur Ebenenerkennung als auch durch eine Funktion zur Objekterkennung erkannt werden können. Dabei stellt die Ebenenerkennung die Komponente XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT für die Entität und die Objekterkennung die Komponente XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT bereit. Eine bestimmte Laufzeit kann die Tabelle als zwei separate Entitäten bereitstellen, die jeweils einen eigenen Satz garantierter Komponenten haben. Bestimmte Laufzeiten können aber auch nur eine Entität zur Darstellung der Tabelle bereitstellen und sowohl XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT als auch XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT in derselben Entität enthalten. Wichtig ist hierbei, dass eine bestimmte räumliche Entität höchstens eine einzige Komponente eines bestimmten Komponententyps haben kann. Wenn die von den verschiedenen Funktionen erzeugten Komponentendaten für eine bestimmte Entität in Konflikt stehen, muss die Laufzeit sie daher als zwei separate Entitäten darstellen.

Versionsverlauf

  • Version 1, 12.04.2024 (Nihav Jain, Google)

    • Anfängliche Beschreibung der Erweiterung