Name String
XR_ANDROID_scene_meshing
Erweiterungstyp Instanzerweiterung
Registrierte Erweiterungsnummer 464
Revision 3
Abhängigkeiten von Erweiterungen und Versionen OpenXR 1.0
Datum der letzten Änderung 2025-05-15
IP-Status Es sind keine bekannten Ansprüche in Bezug auf geistiges Eigentum vorhanden.
Mitwirkende Spencer Quin, Google Jared Finder, Google Antonio Fontan, Google Cairn Overturf, Google Nihav Jain, Google Salar Khan, Google Sebastian Klose, Google Jürgen Sturm, Google Vinny DaSilva, Google Ricardo Campbell, Google
Übersicht
Diese Erweiterung soll Mesh-Daten für die Meshes bereitstellen, die die physischen Objekte in Ihrer Umgebung ungefähr darstellen. Sie kann verwendet werden, um Ihre Szene in einer immersiven Anwendung zu visualisieren und virtuellen Objekten die Interaktion mit physischen Objekten zu ermöglichen, z. B. durch Kollisionen.
Daten zum Erstellen von 3D-Modellen von Szenen können vertrauliche personenbezogene Daten sein und sind eng mit dem Schutz der Privatsphäre und der Integrität von Personen verbunden. Es wird dringend empfohlen, dass Anwendungen, die Daten zum Erstellen von 3D-Modellen von Szenen speichern oder übertragen, den Nutzer immer um eine aktive und spezifische Zustimmung bitten.
Berechtigungen
Android-Anwendungen müssen die Berechtigung android.permission.SCENE_UNDERSTANDING_FINE
in ihrem Manifest aufführen.
Die Berechtigung android.permission.SCENE_UNDERSTANDING_FINE
gilt als sensible Berechtigung, da die Laufzeit damit die Nutzerumgebung analysieren kann.
Die Anwendung muss die Berechtigung zur Laufzeit anfordern, um diese Funktionen zu verwenden:
- xrCreateSceneMeshingTrackerANDROID
- xrDestroySceneMeshingTrackerANDROID
- xrCreateSceneMeshSnapshotANDROID
- xrDestroySceneMeshSnapshotANDROID
- xrGetAllSubmeshStatesANDROID
- xrGetSubmeshDataANDROID
(Schutzebene: gefährlich)
Systemfunktionen prüfen
Eine Anwendung kann prüfen, ob das System in der Lage ist, Szenen zu erstellen, indem sie eine XrSystemSceneMeshingPropertiesANDROID-Struktur an die XrSystemProperties anhängt, wenn xrGetSystemProperties aufgerufen wird.
XrSystemSceneMeshingPropertiesANDROID
typedef struct XrSystemSceneMeshingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsSceneMeshing;
} XrSystemSceneMeshingPropertiesANDROID;
Mitgliederbeschreibungen
type
ist der XrStructureType dieser Struktur.next
istNULL
oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.supportsSceneMeshing
ist ein XrBool32, der angibt, ob das System das Erstellen von Szenen-Meshes unterstützt.
Wenn supportsSceneMeshing
den Wert XR_FALSE
hat, wird das Zusammenfügen von Szenen vom System nicht unterstützt.
Die Anwendung sollte die Funktion zum Erstellen von Szenen-Meshes vermeiden, wenn supportsSceneMeshing
XR_FALSE
ist, da Aufrufe von xrCreateSceneMeshingTrackerANDROID fehlschlagen.
Wenn supportsSceneMeshing
gleich XR_TRUE
ist, unterstützt das System das Erstellen von Szenen-Meshes.
Gültige Nutzung (implizit)
- Die Erweiterung
XR_ANDROID_scene_meshing
muss aktiviert sein, bevor XrSystemSceneMeshingPropertiesANDROID verwendet werden kann. type
mussXR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID
sein.next
mussNULL
oder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.
XrSceneMeshSemanticLabelSetANDROID
Die Enumeration XrSceneMeshSemanticLabelSetANDROID beschreibt die semantischen Labelsätze für das Erstellen von Szenen-Meshes.
Jeder Wert in diesem Enum stellt ein anderes Enum dar, das die semantischen Labels enthält.
Der Wert XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID
steht beispielsweise für die Menge XrSceneMeshSemanticLabelANDROID.
typedef enum XrSceneMeshSemanticLabelSetANDROID {
XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID = 0,
XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID = 1,
XR_SCENE_MESH_SEMANTIC_LABEL_SET_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSceneMeshSemanticLabelSetANDROID;
xrEnumerateSupportedSemanticLabelSetsANDROID
Die Anwendung kann mit der Funktion xrEnumerateSupportedSemanticLabelSetsANDROID vom System unterstützte semantische Labelsätze abrufen.
XrResult xrEnumerateSupportedSemanticLabelSetsANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t supportedSemanticLabelSetsInputCapacity,
uint32_t* supportedSemanticLabelSetsOutputCount,
XrSceneMeshSemanticLabelSetANDROID* supportedSemanticLabelSets);
Parameterbeschreibungen
instance
ist eine von der Anwendung erstellte XrInstance.systemId
ist eine XrSystemId, die von xrGetSystem abgerufen wurde.supportedSemanticLabelSetsInputCapacity
ist die Länge vonsupportedSemanticLabelSets
.supportedSemanticLabelSetsOutputCount
ist die Anzahl der Elemente insupportedSemanticLabelSets
, die von der Laufzeit ab dem Beginn des Arrays geändert wurden.supportedSemanticLabelSets
ist ein Array von XrSceneMeshSemanticLabelSetANDROID, in das die unterstützten semantischen Labelsätze von der Laufzeit geschrieben werden.
Es wird erwartet, dass jedes System mindestens XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID
unterstützt, da dieser Enum-Wert kein semantisches Labelset darstellt und verwendet werden kann, wenn die Anwendung keine Vertex-Semantik benötigt.
Tracker-Handle für das Zusammenfügen von Szenen erstellen
XrSceneMeshingTrackerANDROID
XR_DEFINE_HANDLE(XrSceneMeshingTrackerANDROID)
Das Handle XrSceneMeshingTrackerANDROID stellt einen Tracker für das Erstellen von 3D-Modellen von Szenen und die Verwaltung der zugehörigen Ressourcen dar.
Mit diesem Handle kann ein Snapshot des Szenen-Mesh mit xrCreateSceneMeshSnapshotANDROID in dieser Erweiterung erstellt werden.
xrCreateSceneMeshingTrackerANDROID
Eine Anwendung kann ein XrSceneMeshingTrackerANDROID-Handle mit der Funktion xrCreateSceneMeshingTrackerANDROID erstellen.
XrResult xrCreateSceneMeshingTrackerANDROID(
XrSession session,
const XrSceneMeshingTrackerCreateInfoANDROID* createInfo,
XrSceneMeshingTrackerANDROID* tracker);
Parameterbeschreibungen
session
ist eine XrSession, in der der Tracker für das Erstellen von 3D-Modellen der Umgebung aktiv ist.createInfo
ist ein Zeiger auf eine XrSceneMeshingTrackerCreateInfoANDROID-Struktur, die zum Beschreiben des zu erstellenden Scene Meshing-Trackers verwendet wird.tracker
ist der zurückgegebene XrSceneMeshingTrackerANDROID-Handle.
Wenn das System kein Scene Meshing unterstützt, gibt xrCreateSceneMeshingTrackerANDROID den Wert XR_ERROR_FEATURE_UNSUPPORTED
zurück.
Die Anwendung kann die Systemunterstützung prüfen, indem sie xrGetSystemProperties mit der Struktur XrSystemSceneMeshingPropertiesANDROID aufruft.
Beim Erstellen eines Scene-Meshing-Trackers können in XrSceneMeshingTrackerCreateInfoANDROID::semanticLabelSet nur semantische Labelsets verwendet werden, die vom System unterstützt werden. Mit der Funktion xrEnumerateSupportedSemanticLabelSetsANDROID kann die Liste der unterstützten semantischen Labelsätze abgerufen werden.
Wenn die Anwendung eine nicht unterstützte semanticLabelSet
anfordert, gibt xrCreateSceneMeshingTrackerANDROID XR_ERROR_FEATURE_UNSUPPORTED
zurück.
Das Handle xrCreateSceneMeshingTrackerANDROID ist Inhaber aller Ressourcen für das Scene Meshing. Nachdem Sie die Funktion zum Erstellen von Szenen-Meshes verwendet haben, muss die Anwendung das Handle über die Funktion xrDestroySceneMeshingTrackerANDROID zerstören.
XrSceneMeshingTrackerCreateInfoANDROID
Die Struktur XrSceneMeshingTrackerCreateInfoANDROID beschreibt die Informationen zum Erstellen eines XrSceneMeshingTrackerANDROID-Handles.
typedef struct XrSceneMeshingTrackerCreateInfoANDROID {
XrStructureType type;
const void* next;
XrSceneMeshSemanticLabelSetANDROID semanticLabelSet;
XrBool32 enableNormals;
} XrSceneMeshingTrackerCreateInfoANDROID;
Mitgliederbeschreibungen
type
ist der XrStructureType dieser Struktur.next
istNULL
oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.semanticLabelSet
ist ein XrSceneMeshSemanticLabelSetANDROID, mit dem das semantische Labelset für die Szenenvernetzung angegeben wird. Wenn dieser Wert aufXR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID
gesetzt ist, wird das Pufferfeld XrSceneSubmeshDataANDROID::vertexSemantics von der Laufzeit ignoriert.enableNormals
ist ein XrBool32, mit dem angegeben wird, ob beim Abrufen der Szenen-Mesh-Daten Scheitelpunktnormalen für die Mesh-Scheitelpunkte im Szenen-Mesh-Puffer enthalten sein sollen.
xrDestroySceneMeshingTrackerANDROID
Die Funktion xrDestroySceneMeshingTrackerANDROID gibt tracker
und die zugrunde liegenden Ressourcen frei, wenn die Szenenvernetzung abgeschlossen ist.
XrResult xrDestroySceneMeshingTrackerANDROID(
XrSceneMeshingTrackerANDROID tracker);
Parameterbeschreibungen
tracker
ist ein XrSceneMeshingTrackerANDROID, der zuvor mit xrCreateSceneMeshingTrackerANDROID erstellt wurde.
Snapshot-Handle für Szenen-Mesh erstellen
XrSceneMeshSnapshotANDROID
XR_DEFINE_HANDLE(XrSceneMeshSnapshotANDROID)
Das Handle XrSceneMeshSnapshotANDROID stellt einen Snapshot des Szenen-Mesh dar. Es wird mit xrCreateSceneMeshSnapshotANDROID erstellt, das im Wesentlichen einen Snapshot der Daten des Szenen-Mesh zum Zeitpunkt des Funktionsaufrufs erstellt.
Mit diesem Handle können Submesh-Informationen und -Daten mit xrGetAllSubmeshStatesANDROID und xrGetSubmeshDataANDROID abgerufen werden.
XrSceneMeshSnapshotCreateInfoANDROID
Die Struktur XrSceneMeshSnapshotCreateInfoANDROID beschreibt die Informationen zum Erstellen eines XrSceneMeshSnapshotANDROID-Handles.
typedef struct XrSceneMeshSnapshotCreateInfoANDROID {
XrStructureType type;
const void* next;
XrSpace baseSpace;
XrTime time;
XrBoxf boundingBox;
} XrSceneMeshSnapshotCreateInfoANDROID;
Mitgliederbeschreibungen
type
ist der XrStructureType dieser Struktur.next
istNULL
oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.baseSpace
ist ein XrSpace, mit dem der Referenzraum beschrieben wird, in dem die Pose-Informationen der Szenen-Submeshes dargestellt werden sollen.time
ist die XrTime, die den Zeitpunkt beschreibt, zu dem das Szenen-Mesh verarbeitet oder angezeigt wird.boundingBox
ist ein XrBoxf, der den Begrenzungsrahmen beschreibt, in dem das Szenen-Mesh erfasst werden soll.
XrSceneMeshTrackingStateANDROID
Die Enumeration XrSceneMeshTrackingStateANDROID beschreibt den Tracking-Status für den Tracker für das Erstellen von Szenen-Meshes. Jeder Wert in diesem Enum stellt einen Status des Scene Meshing Tracker dar. Diese Enumeration ist in der Struktur XrSceneMeshSnapshotCreationResultANDROID enthalten, die von xrCreateSceneMeshSnapshotANDROID zurückgegeben wird.
typedef enum XrSceneMeshTrackingStateANDROID {
XR_SCENE_MESH_TRACKING_STATE_INITIALIZING_ANDROID = 0,
XR_SCENE_MESH_TRACKING_STATE_TRACKING_ANDROID = 1,
XR_SCENE_MESH_TRACKING_STATE_WAITING_ANDROID = 2,
XR_SCENE_MESH_TRACKING_STATE_ERROR_ANDROID = 3,
XR_SCENE_MESH_TRACKING_STATE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSceneMeshTrackingStateANDROID;
XrSceneMeshSnapshotCreationResultANDROID
Die Struktur XrSceneMeshSnapshotCreationResultANDROID speichert das Ergebnis der Erstellung eines Szenen-Mesh-Snapshots, das von xrCreateSceneMeshSnapshotANDROID zurückgegeben wird. Das Ergebnis enthält das Snapshot-Handle und den Tracking-Status des Scene Meshing Tracker zum Zeitpunkt der Snapshot-Erstellung.
typedef struct XrSceneMeshSnapshotCreationResultANDROID {
XrStructureType type;
void* next;
XrSceneMeshSnapshotANDROID snapshot;
XrSceneMeshTrackingStateANDROID trackingState;
} XrSceneMeshSnapshotCreationResultANDROID;
Mitgliederbeschreibungen
type
ist der XrStructureType dieser Struktur.next
istNULL
oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.snapshot
ist ein XrSceneMeshSnapshotANDROID-Handle, das von der Laufzeit erstellt wird.trackingState
ist ein XrSceneMeshTrackingStateANDROID, der den Status des Scene Meshing-Trackers zum Zeitpunkt der Snapshot-Erstellung beschreibt.
xrCreateSceneMeshSnapshotANDROID
Die Anwendung kann die Funktion xrCreateSceneMeshSnapshotANDROID verwenden, um einen Snapshot des Szenen-Mesh aus dem Tracker für das Szenen-Meshing zu erstellen. Diese Funktion gibt ein XrSceneMeshSnapshotANDROID-Handle zusammen mit XrSceneMeshTrackingStateANDROID zurück, das in einer XrSceneMeshSnapshotCreationResultANDROID-Struktur umschlossen ist. Der Handle ist technisch gesehen ein Snapshot der Szenen-Mesh-Daten zum Zeitpunkt der Erstellung. Mit diesem Handle kann die Mesh-Informationen und -Daten der Szene mit xrGetAllSubmeshStatesANDROID bzw. xrGetSubmeshDataANDROID abgefragt werden.
XrResult xrCreateSceneMeshSnapshotANDROID(
XrSceneMeshingTrackerANDROID tracker,
const XrSceneMeshSnapshotCreateInfoANDROID* createInfo,
XrSceneMeshSnapshotCreationResultANDROID* outSnapshotCreationResult);
Parameterbeschreibungen
tracker
ist ein XrSceneMeshingTrackerANDROID-Handle, das zuvor mit xrCreateSceneMeshingTrackerANDROID erstellt wurde.createInfo
ist ein Zeiger auf eine XrSceneMeshSnapshotCreateInfoANDROID-Struktur, die die zum Erstellen des Szenen-Mesh-Snapshots erforderlichen Informationen enthält.outSnapshotCreationResult
ist ein Zeiger auf ein XrSceneMeshSnapshotCreationResultANDROID-Objekt, das von der Laufzeit mit dem Ergebnis der Snapshot-Erstellung gefüllt wird.
Szenen-Mesh-Daten aus dem Szenen-Mesh-Snapshot abrufen
XrSceneSubmeshStateANDROID
XrSceneSubmeshStateANDROID beschreibt ein Submesh. Er enthält die grundlegenden Informationen zum Submesh (ID, Pose, Grenzen, Zeitpunkt der letzten Aktualisierung).
typedef struct XrSceneSubmeshStateANDROID {
XrStructureType type;
void* next;
XrUuid submeshId;
XrTime lastUpdatedTime;
XrPosef submeshPoseInBaseSpace;
XrExtent3Df bounds;
} XrSceneSubmeshStateANDROID;
Mitgliederbeschreibungen
type
ist der XrStructureType dieser Struktur.next
istNULL
oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.submeshId
ist eine XrUuid, die das Submesh identifiziert.lastUpdatedTime
ist ein XrTime, der den Zeitpunkt der letzten Aktualisierung des Submesh darstellt.submeshPoseInBaseSpace
ist ein XrPosef, das die Position des Submesh im Basisraum darstellt, der zum Erstellen des Szenenmesh-Snapshots verwendet wurde. Dies ist auch die Pose des Mittelpunkts des Begrenzungsrahmens des Submesh.bounds
ist ein XrExtent3Df, das die Abmessungen des umschließenden Rechtecks beschreibt, das das Submesh umschließt. Diese Grenzen befinden sich im Basisbereich, der zum Erstellen des Handles für das Szenen-Mesh verwendet wurde.
xrGetAllSubmeshStatesANDROID
Die Anwendung kann die Funktion xrGetAllSubmeshStatesANDROID verwenden, um den Status aller Submeshes im Szenen-Mesh abzurufen. Sie enthält grundlegende Informationen, damit die Anwendung Untermeshes auswählen kann, für die sie Daten benötigt. Diese Funktion kann in einem Idiom mit zwei Aufrufen verwendet werden.
XrResult xrGetAllSubmeshStatesANDROID(
XrSceneMeshSnapshotANDROID snapshot,
uint32_t submeshStateCapacityInput,
uint32_t* submeshStateCountOutput,
XrSceneSubmeshStateANDROID* submeshStates);
Parameterbeschreibungen
snapshot
ist ein XrSceneMeshSnapshotANDROID-Handle, das zuvor mit xrCreateSceneMeshSnapshotANDROID erstellt wurde.submeshStateCapacityInput
ist die Länge vonsubmeshStates
.submeshStateCountOutput
ist die Anzahl der Elemente insubmeshStates
, die von der Laufzeit ab dem Beginn des Arrays geändert werden.submeshStates
ist ein Array von XrSceneSubmeshStateANDROID-Strukturen, in die die Laufzeit den Status aller Submeshes im Szenen-Mesh ausgibt.
XrSceneSubmeshDataANDROID
XrSceneSubmeshDataANDROID enthält die Dreiecksdaten für ein Submesh sowie die Submesh-ID. Diese Struktur wird in xrGetSubmeshDataANDROID verwendet, um die Daten des Submesh abzurufen. Die Anwendung muss die Submesh-ID dieser Struktur und die Pufferzeiger auf zugewiesene Puffer festlegen, damit die zurückgegebenen Daten für das Submesh in die zugewiesenen Puffer eingefügt werden können. Die Anwendung kann xrGetSubmeshDataANDROID als 2-Aufruf-Idiom verwenden. Beim ersten Aufruf muss die Anwendung die Submesh-ID festlegen und die Größen der für die Submesh-Daten erforderlichen Puffer abrufen. Anschließend kann die Anwendung die Puffer zuweisen und die Daten beim zweiten Aufruf abrufen.
typedef struct XrSceneSubmeshDataANDROID {
XrStructureType type;
const void* next;
XrUuid submeshId;
uint32_t vertexCapacityInput;
uint32_t vertexCountOutput;
XrVector3f* vertexPositions;
XrVector3f* vertexNormals;
uint8_t* vertexSemantics;
uint32_t indexCapacityInput;
uint32_t indexCountOutput;
uint32_t* indices;
} XrSceneSubmeshDataANDROID;
Mitgliederbeschreibungen
type
ist der XrStructureType dieser Struktur.next
istNULL
oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.submeshId
ist eine XrUuid, die das Submesh identifiziert.vertexCapacityInput
ist die Länge vonvertexPositions
,vertexNormals
undvertexSemantics
.vertexCountOutput
ist die Anzahl der Elemente invertexPositions
,vertexNormals
undvertexSemantics
, die von der Laufzeit ab dem Anfang des Arrays geändert wurden.vertexPositions
ist ein Array von XrVector3f, in das die Laufzeit die Eckpunktpositionen des Submesh ausgibt.vertexNormals
ist ein Array von XrVector3f, in das die Laufzeit die Vertex-Normalen des Submesh ausgibt. Dieses Feld kannNULL
werden, wenn in der Anwendung ein Tracker ohne aktivierte Normals erstellt wurde.vertexSemantics
ist ein Array vonuint8_t
, in das die Laufzeit die Vertex-Semantik des Submesh ausgibt. Dieses Feld kann leer gelassen werden (NULL
), wenn die Anwendung einen Tracker mit dem semantischen LabelXR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID
erstellt hat.indexCapacityInput
ist die Länge vonindices
.indexCountOutput
ist die Anzahl der Elemente inindices
, die von der Laufzeit ab dem Beginn des Arrays geändert wurden.indices
ist ein Array vonuint32_t
, in das die Laufzeit die Indexe des Submesh ausgibt.
xrGetSubmeshDataANDROID
Die Anwendung kann die Funktion xrGetSubmeshDataANDROID verwenden, um die Daten für eine ausgewählte Liste von Submeshes abzurufen. Diese Funktion kann in einem Idiom mit zwei Aufrufen verwendet werden. Beim ersten Aufruf muss die Anwendung eine gültige Submesh-ID festlegen (d. h. abrufbar von xrGetAllSubmeshStatesANDROID mit demselben Szenen-Mesh-Snapshot) und eine Kapazität von null für jedes Element in der ausgewählten Liste von Submeshes festlegen, um die Größen der für die Submesh-Daten erforderlichen Puffer zu erhalten. Beim zweiten Aufruf muss die Anwendung die Pufferzeiger für jedes Element in der ausgewählten Liste der Unternetze auf einen zugewiesenen Puffer festlegen, zusammen mit der Kapazität der Puffer, um die Daten der Unternetze abzurufen.
XrResult xrGetSubmeshDataANDROID(
XrSceneMeshSnapshotANDROID snapshot,
uint32_t submeshDataCount,
XrSceneSubmeshDataANDROID* inoutSubmeshData);
Parameterbeschreibungen
snapshot
ist ein XrSceneMeshSnapshotANDROID-Handle, das zuvor mit xrCreateSceneMeshSnapshotANDROID erstellt wurde.submeshDataCount
ist die Länge voninoutSubmeshData
.inoutSubmeshData
ist ein Array von XrSceneSubmeshDataANDROID, in dem jedes Element von der Laufzeit anhand der Submesh-ID mit den Mesh-Daten gefüllt wird.
XrSceneMeshSemanticLabelANDROID
Die Enumeration XrSceneMeshSemanticLabelANDROID ist der Standardsatz semantischer Labels, die verwendet werden können, um Mesh-Vertices zu kennzeichnen und zu beschreiben, auf welcher physischen Umgebungsoberfläche sich der Mesh-Vertex befindet.
Diese Enum-Gruppe wird durch den Wert XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID
in XrSceneMeshSemanticLabelSetANDROID dargestellt.
typedef enum XrSceneMeshSemanticLabelANDROID {
XR_SCENE_MESH_SEMANTIC_LABEL_OTHER_ANDROID = 0,
XR_SCENE_MESH_SEMANTIC_LABEL_FLOOR_ANDROID = 1,
XR_SCENE_MESH_SEMANTIC_LABEL_CEILING_ANDROID = 2,
XR_SCENE_MESH_SEMANTIC_LABEL_WALL_ANDROID = 3,
XR_SCENE_MESH_SEMANTIC_LABEL_TABLE_ANDROID = 4,
XR_SCENE_MESH_SEMANTIC_LABEL_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSceneMeshSemanticLabelANDROID;
Snapshot eines Szenen-Mesh löschen
xrDestroySceneMeshSnapshotANDROID
Die Anwendung kann die Funktion xrDestroySceneMeshSnapshotANDROID verwenden, um einen Snapshot des Szenen-Mesh zu löschen. Sobald das Handle zerstört wurde, kann die Anwendung es nicht mehr verwenden, um die Informationen oder Daten des Submesh abzurufen. Das Handle wird automatisch zerstört, wenn der Tracker zerstört wird, da das Tracker-Handle das übergeordnete Element des Handles für den Snapshot des Szenen-Mesh ist.
XrResult xrDestroySceneMeshSnapshotANDROID(
XrSceneMeshSnapshotANDROID snapshot);
Parameterbeschreibungen
snapshot
ist ein XrSceneMeshSnapshotANDROID-Handle, das zuvor mit xrCreateSceneMeshSnapshotANDROID erstellt wurde und von dieser Funktion zerstört wird.
Beispielcode für die Szenenvernetzung
Das folgende Beispiel zeigt, wie Sie auf Szenen-Mesh-Daten für das Rendern zugreifen.
XrInstance instance; // Created at app startup
XrSystemId systemId; // Received from xrGetSystem() at app startup
XrSession session; // Created at app startup
XrSpace appPlaySpace; // Created at app startup
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateSceneMeshingTrackerANDROID xrCreateSceneMeshingTrackerANDROID;
PFN_xrDestroySceneMeshingTrackerANDROID xrDestroySceneMeshingTrackerANDROID;
PFN_xrEnumerateSupportedSemanticLabelSetsANDROID xrEnumerateSupportedSemanticLabelSetsANDROID;
PFN_xrCreateSceneMeshSnapshotANDROID xrCreateSceneMeshSnapshotANDROID;
PFN_xrDestroySceneMeshSnapshotANDROID xrDestroySceneMeshSnapshotANDROID;
PFN_xrGetAllSubmeshStatesANDROID xrGetAllSubmeshStatesANDROID;
PFN_xrGetSubmeshDataANDROID xrGetSubmeshDataANDROID;
// Inspect system capability
XrSystemSceneMeshingPropertiesANDROID sceneMeshingProps = {
.type = XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID,
};
XrSystemProperties sysProps = {
.type = XR_TYPE_SYSTEM_PROPERTIES,
.next = &sceneMeshingProps
};
CHK_XR(xrGetSystemProperties(instance, systemId, &sysProps));
if (!sceneMeshingProps.supportsSceneMeshing) {
// scene meshing is not supported.
return;
}
uint32_t supportedsemanticLabelSetsCount = 0;
xrEnumerateSupportedSemanticLabelSetsANDROID(
instance, systemId, 0, &supportedsemanticLabelSetsCount, nullptr);
std::vector<XrSceneMeshSemanticLabelSetANDROID> supportedSemanticLabelSets(
supportedsemanticLabelSetsCount);
xrEnumerateSupportedSemanticLabelSetsANDROID(
instance, systemId, supportedsemanticLabelSetsCount,
&supportedsemanticLabelSetsCount, supportedSemanticLabelSets.data());
XrSceneMeshSemanticLabelSetANDROID semanticLabelSet = XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID;
// Check if system supports XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID
if (std::find(supportedSemanticLabelSets.begin(), supportedSemanticLabelSets.end(),
XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID) !=
supportedSemanticLabelSets.end()) {
semanticLabelSet = XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID;
}
XrSceneMeshingTrackerCreateInfoANDROID trackerCreateInfo = {
.type = XR_TYPE_SCENE_MESHING_TRACKER_CREATE_INFO_ANDROID,
.semanticLabelSet = semanticLabelSet,
.enableNormals = XR_TRUE
};
XrSceneMeshingTrackerANDROID tracker = XR_NULL_HANDLE;
CHK_XR(xrCreateSceneMeshingTrackerANDROID(session, &trackerCreateInfo, &tracker));
XrSceneMeshSnapshotCreationResultANDROID snapshotResult = {
.type = XR_TYPE_SCENE_MESH_SNAPSHOT_CREATION_RESULT_ANDROID,
.snapshot = XR_NULL_HANDLE
};
XrSceneMeshSnapshotANDROID& snapshot = snapshotResult.snapshot;
XrSceneMeshSnapshotCreateInfoANDROID createInfo = {
.type = XR_TYPE_SCENE_MESH_SNAPSHOT_CREATE_INFO_ANDROID
};
// app update loop
while (true) {
// ...
// For every frame in frame loop
// ...
XrFrameState frameState; // previously returned from xrWaitFrame
const XrTime time = frameState.predictedDisplayTime;
XrBoxf box; // populated with the bounding box of the camera frustum
// ...
createInfo.baseSpace = appPlaySpace;
createInfo.time = time;
createInfo.boundingBox = box;
// Grab the scene mesh snapshot. This way the app can: know all of the submesh infos,
// choose the appropriate submeshes for which to get data, allocate the necessary
// buffer for those submeshes, and then get the data.
CHK_XR(xrCreateSceneMeshSnapshotANDROID(tracker, &createInfo, &snapshotResult));
// check the tracking state
if (snapshotResult.trackingState == XR_SCENE_MESH_TRACKING_STATE_ERROR_ANDROID) {
// unrecoverable error. Exit the app.
if (snapshot != XR_NULL_HANDLE) {
CHK_XR(xrDestroySceneMeshSnapshotANDROID(snapshot));
snapshot = XR_NULL_HANDLE;
}
break;
} else if (snapshotResult.trackingState != XR_SCENE_MESH_TRACKING_STATE_TRACKING_ANDROID) {
// The tracker is not tracking. Try again later.
if (snapshot != XR_NULL_HANDLE) {
CHK_XR(xrDestroySceneMeshSnapshotANDROID(snapshot));
snapshot = XR_NULL_HANDLE;
}
continue;
}
// 2-call idiom for getting submesh states
std::vector<XrSceneSubmeshStateANDROID> states;
uint32_t submeshCount = 0;
CHK_XR(xrGetAllSubmeshStatesANDROID(snapshot, 0, &submeshCount, nullptr));
states.resize(submeshCount);
for (XrSceneSubmeshStateANDROID& state : states) {
state = {.type = XR_TYPE_SCENE_SUBMESH_STATE_ANDROID};
}
CHK_XR(xrGetAllSubmeshStatesANDROID(snapshot, submeshCount, &submeshCount, states.data()));
// To store the poses for the selected submeshes
std::vector<XrPosef> submeshesPoses;
submeshesPoses.reserve(submeshCount);
std::vector<XrSceneSubmeshDataANDROID> submeshes;
submeshes.reserve(submeshCount);
// Iterate the states and determine which submeshes the app wants data for
for (XrSceneSubmeshStateANDROID& state : states) {
// Modify this bool as necessary by looking at states. Maybe state.lastUpdatedTime
// is below a threshold or maybe the bounding box does not intersect with camera view
// frustum (The submesh will be culled).
bool needed;
if (needed) {
// Add the selected submesh to the submeshes list. Set the capacity
// zero for now since the size of the buffer will be determined later.
XrSceneSubmeshDataANDROID submesh = {
.type = XR_TYPE_SCENE_SUBMESH_DATA_ANDROID,
.submeshId = state.submeshId,
.vertexCapacityInput = 0,
.vertexCountOutput = 0,
.vertexPositions = nullptr,
.vertexNormals = nullptr,
.vertexSemantics = nullptr,
.indexCapacityInput = 0,
.indexCountOutput = 0,
.indices = nullptr,
};
submeshes.push_back(submesh);
submeshesPoses.push_back(state.submeshPoseInBaseSpace);
}
}
// Grab the data for the selected submeshes using the 2-call idiom.
CHK_XR(xrGetSubmeshDataANDROID(snapshot, submeshes.size(), submeshes.data()));
for (XrSceneSubmeshDataANDROID& submesh : submeshes) {
submesh.vertexCapacityInput = submesh.vertexCountOutput;
submesh.vertexCountOutput = 0;
submesh.vertexPositions = new XrVector3f[submesh.vertexCountOutput];
submesh.vertexNormals = new XrVector3f[submesh.vertexCountOutput];
submesh.vertexSemantics = new uint8_t[submesh.vertexCountOutput];
submesh.indexCapacityInput = submesh.indexCountOutput;
submesh.indexCountOutput = 0;
submesh.indices = new uint32_t[submesh.indexCountOutput];
}
CHK_XR(xrGetSubmeshDataANDROID(snapshot, submeshes.size(), submeshes.data()));
// Destroy the scene mesh snapshot since we have finally grabbed the submeshes data. In
// next iteration app can: create a new one to get latest mesh data
CHK_XR(xrDestroySceneMeshSnapshotANDROID(snapshot));
snapshot = XR_NULL_HANDLE;
// Iterate the submeshes and get the vertex positions, vertex normals and
// vertex semantics data for the selected submeshes
for (uint32_t i = 0; i < submeshes.size(); i++) {
XrSceneSubmeshDataANDROID& data = submeshes[i];
XrVector3f* vertexPositions = data.vertexPositions;
XrVector3f* vertexNormals = data.vertexNormals;
XrSceneMeshSemanticLabelANDROID* vertexSemantics =
reinterpret_cast<XrSceneMeshSemanticLabelANDROID*>(data.vertexSemantics);
XrPosef pose = submeshesPoses[i];
// *** Use the data as per needs ***
// Release the allocated memory for the data buffers when done using
delete [] data.vertexPositions;
delete [] data.vertexNormals;
delete [] data.vertexSemantics;
delete [] data.indices;
}
// ...
// Finish frame loop
// ...
}
CHK_XR(xrDestroySceneMeshingTrackerANDROID(tracker));
Neue Objekttypen
Neue Enum-Konstanten
Die Enumeration XrObjectType wird um Folgendes erweitert:
XR_OBJECT_TYPE_SCENE_MESHING_TRACKER_ANDROID
XR_OBJECT_TYPE_SCENE_MESH_SNAPSHOT_ANDROID
Die Enumeration XrStructureType wurde um Folgendes erweitert:
XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID
XR_TYPE_SCENE_MESHING_TRACKER_CREATE_INFO_ANDROID
XR_TYPE_SCENE_MESH_SNAPSHOT_CREATE_INFO_ANDROID
XR_TYPE_SCENE_MESH_SNAPSHOT_CREATION_RESULT_ANDROID
XR_TYPE_SCENE_SUBMESH_STATE_ANDROID
XR_TYPE_SCENE_SUBMESH_DATA_ANDROID
Neue Enums
Neue Strukturen
- XrSystemSceneMeshingPropertiesANDROID
- XrSceneMeshingTrackerCreateInfoANDROID
- XrSceneMeshSnapshotCreateInfoANDROID
- XrSceneMeshSnapshotCreationResultANDROID
- XrSceneSubmeshStateANDROID
- XrSceneSubmeshDataANDROID
Neue Funktionen
- xrCreateSceneMeshingTrackerANDROID
- xrDestroySceneMeshingTrackerANDROID
- xrEnumerateSupportedSemanticLabelSetsANDROID
- xrCreateSceneMeshSnapshotANDROID
- xrDestroySceneMeshSnapshotANDROID
- xrGetAllSubmeshStatesANDROID
- xrGetSubmeshDataANDROID
Probleme
Versionsverlauf
- Version 3, 15.05.2025 (Salar Khan) ** Erste Beschreibung der Erweiterung
OpenXR™ und das OpenXR-Logo sind Marken von The Khronos Group Inc. und sind in China, der Europäischen Union, Japan und dem Vereinigten Königreich als Marke eingetragen.