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 untersuchen 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
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.supportsSceneMeshingist 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_meshingmuss aktiviert sein, bevor XrSystemSceneMeshingPropertiesANDROID verwendet werden kann. typemussXR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROIDsein.nextmussNULLoder 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
instanceist eine von der Anwendung erstellte XrInstance.systemIdist eine XrSystemId, die von xrGetSystem abgerufen wurde.supportedSemanticLabelSetsInputCapacityist die Länge vonsupportedSemanticLabelSets.supportedSemanticLabelSetsOutputCountist die Anzahl der Elemente insupportedSemanticLabelSets, die von der Laufzeit ab dem Beginn des Arrays geändert wurden.supportedSemanticLabelSetsist 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
sessionist eine XrSession, in der der Tracker für das Erstellen von 3D-Modellen der Umgebung aktiv ist.createInfoist ein Zeiger auf eine XrSceneMeshingTrackerCreateInfoANDROID-Struktur, die zum Beschreiben des zu erstellenden Scene Meshing-Trackers verwendet wird.trackerist 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. Wenn Sie mit dem Erstellen von Szenen-Meshes fertig sind, 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
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.semanticLabelSetist ein XrSceneMeshSemanticLabelSetANDROID, das verwendet wird, um die semantische Labelgruppe für die Szenenvernetzung anzugeben. Wenn dieser Wert aufXR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROIDgesetzt ist, wird das Pufferfeld XrSceneSubmeshDataANDROID::vertexSemantics von der Laufzeit ignoriert.enableNormalsist 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
trackerist 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
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.baseSpaceist ein XrSpace, mit dem der Referenzraum beschrieben wird, in dem die Pose-Informationen der Szenen-Submeshes dargestellt werden sollen.timeist die XrTime, die den Zeitpunkt beschreibt, zu dem das Szenen-Mesh verarbeitet oder angezeigt wird.boundingBoxist 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
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.snapshotist ein XrSceneMeshSnapshotANDROID-Handle, das von der Laufzeit erstellt wird.trackingStateist 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
trackerist ein XrSceneMeshingTrackerANDROID-Handle, das zuvor mit xrCreateSceneMeshingTrackerANDROID erstellt wurde.createInfoist ein Zeiger auf eine XrSceneMeshSnapshotCreateInfoANDROID-Struktur, die die zum Erstellen des Szenen-Mesh-Snapshots erforderlichen Informationen enthält.outSnapshotCreationResultist 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
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.submeshIdist eine XrUuid, die das Submesh identifiziert.lastUpdatedTimeist ein XrTime, der den Zeitpunkt der letzten Aktualisierung des Submesh darstellt.submeshPoseInBaseSpaceist 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.boundsist 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
snapshotist ein XrSceneMeshSnapshotANDROID-Handle, das zuvor mit xrCreateSceneMeshSnapshotANDROID erstellt wurde.submeshStateCapacityInputist die Länge vonsubmeshStates.submeshStateCountOutputist die Anzahl der Elemente insubmeshStates, die von der Laufzeit ab dem Beginn des Arrays geändert werden.submeshStatesist 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
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind weder in OpenXR noch in dieser Erweiterung definiert.submeshIdist eine XrUuid, die das Submesh identifiziert.vertexCapacityInputist die Länge vonvertexPositions,vertexNormalsundvertexSemantics.vertexCountOutputist die Anzahl der Elemente invertexPositions,vertexNormalsundvertexSemantics, die von der Laufzeit ab dem Anfang des Arrays geändert wurden.vertexPositionsist ein Array von XrVector3f, in das die Laufzeit die Eckpunktpositionen des Submesh ausgibt.vertexNormalsist ein Array von XrVector3f, in das die Laufzeit die Vertex-Normalen des Submesh ausgibt. Dieses Feld kannNULLwerden, wenn in der Anwendung ein Tracker ohne aktivierte Normals erstellt wurde.vertexSemanticsist 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_ANDROIDerstellt hat.indexCapacityInputist die Länge vonindices.indexCountOutputist die Anzahl der Elemente inindices, die von der Laufzeit ab dem Beginn des Arrays geändert wurden.indicesist 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
snapshotist ein XrSceneMeshSnapshotANDROID-Handle, das zuvor mit xrCreateSceneMeshSnapshotANDROID erstellt wurde.submeshDataCountist die Länge voninoutSubmeshData.inoutSubmeshDataist 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
snapshotist 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_ANDROIDXR_OBJECT_TYPE_SCENE_MESH_SNAPSHOT_ANDROID
Die Enumeration XrStructureType wurde um Folgendes erweitert:
XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROIDXR_TYPE_SCENE_MESHING_TRACKER_CREATE_INFO_ANDROIDXR_TYPE_SCENE_MESH_SNAPSHOT_CREATE_INFO_ANDROIDXR_TYPE_SCENE_MESH_SNAPSHOT_CREATION_RESULT_ANDROIDXR_TYPE_SCENE_SUBMESH_STATE_ANDROIDXR_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.