XR_ANDROID_spatial_anchor_space
Name String
XR_ANDROID_spatial_anchor_space
Erweiterungstyp
Instanzerweiterung
Registrierte Durchwahl
796
Revision
1
Ratification Status
Nicht ratifiziert
Erweiterungs- und Versionsabhängigkeiten
XR_EXT_spatial_anchor
Datum der letzten Änderung
2025-09-15
IP-Status
Keine bekannten Ansprüche auf geistiges Eigentum.
Mitwirkende
YuSheng Chang, Google
Kyle Chen, Google
Levana Chen, Google
Nihav Jain, Google
Spencer Quin, Google
Übersicht
Mit der in der Erweiterung XR_EXT_spatial_anchor definierten Funktion xrCreateSpatialAnchorEXT können Anwendungen räumliche Anker mit einem XrSpatialEntityEXT-Handle erstellen, um sie darzustellen. Im Gegensatz dazu wird mit dieser Erweiterung ein räumlicher Anker erstellt, der durch ein XrSpace-Handle dargestellt wird. Dies ist in folgenden Fällen nützlich:
- Verwenden Sie xrLocateSpaces, um die Position des Ankers abzurufen.
- Andere Bereiche relativ zum Anker finden.
- Exportieren Sie den Anker mit
XR_ANDROID_anchor_sharing_export. - Die Anwendung hat Anker platziert und benötigt jetzt nur noch die Position der Anker (um virtuelle Inhalte daran anzuhängen). Andere Komponenten anderer Entitäten, die über den XrSpatialContextEXT gefunden wurden, der zum Erstellen des Ankers verwendet wurde, sind nicht mehr relevant. Dadurch kann die Anwendung den räumlichen Kontext löschen.
Mit dieser Erweiterung erstellte Anker können nicht mit der Erweiterung XR_ANDROID_device_anchor_persistence beibehalten werden. Die Anwendung muss stattdessen XR_EXT_spatial_persistence_operations verwenden. Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE von xrPersistAnchorANDROID zurückgeben, wenn XrPersistedAnchorSpaceInfoANDROID :: anchor mit xrCreateSpatialAnchorSpaceANDROID oder xrCreateSpatialAnchorSpaceFromIdANDROID erstellt wird.
XrSpace für einen räumlichen Anker erstellen
Räumlichen Anker und Raum erstellen
Die Funktion xrCreateSpatialAnchorSpaceANDROID ist so definiert:
XrResult xrCreateSpatialAnchorSpaceANDROID(
XrSession session,
XrSpatialContextEXT spatialContext,
const XrSpatialAnchorCreateInfoEXT* createInfo,
XrSpatialEntityIdEXT* anchorEntityId,
XrSpace* anchorSpace);
Parameterbeschreibungen
sessionist ein Handle für eine XrSession, die zuvor mit xrCreateSession erstellt wurde.spatialContextist ein XrSpatialContextEXT, der zuvor mit xrCreateSpatialContextAsyncEXT erstellt wurde.createInfoist ein Zeiger auf ein XrSpatialAnchorCreateInfoEXT .anchorEntityIdist ein Zeiger auf einXrSpatialEntityIdEXT.anchorSpaceist ein Zeiger auf einen XrSpace .
Die Funktion xrCreateSpatialAnchorSpaceANDROID erstellt einen Anker, der ein XrSpatialEntityIdEXT- und ein XrSpace-Handle ausgibt. Für xrCreateSpatialAnchorSpaceANDROID gelten dieselben Validierungsanforderungen wie für xrCreateSpatialAnchorEXT .
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE zurückgeben, wenn der an xrCreateSpatialAnchorSpaceANDROID übergebene XrSpatialContextEXT nicht mit XR_SPATIAL_CAPABILITY_ANCHOR_EXT konfiguriert wurde.
In Bezug auf die Auffindbarkeit des erstellten Ankers durch xrCreateSpatialAnchorSpaceANDROID gilt der letzte Absatz der xrCreateSpatialAnchorEXT-Spezifikation.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_spatial_anchor_spacemuss aktiviert sein, bevor xrCreateSpatialAnchorSpaceANDROID aufgerufen wird. -
sessionmuss ein gültiges XrSession-Handle sein -
spatialContextmuss ein gültiges XrSpatialContextEXT-Handle sein -
createInfomuss ein Zeiger auf eine gültige XrSpatialAnchorCreateInfoEXT-Struktur sein. -
anchorEntityIdmuss ein Zeiger auf einenXrSpatialEntityIdEXT-Wert sein -
anchorSpacemuss ein Zeiger auf ein XrSpace-Handle sein -
spatialContextmuss erstellt, zugewiesen oder vonsessionabgerufen worden sein.
Rückgabecodes
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_POSE_INVALIDXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_ANCHOR_ATTACHABLE_COMPONENT_NOT_FOUND_ANDROIDXR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
XrSpace aus einem vorhandenen räumlichen Anker erstellen
Die Funktion xrCreateSpatialAnchorSpaceFromIdANDROID ist so definiert:
XrResult xrCreateSpatialAnchorSpaceFromIdANDROID(
XrSession session,
XrSpatialContextEXT spatialContext,
const XrSpatialAnchorSpaceFromIdCreateInfoANDROID* createInfo,
XrSpace* anchorSpace);
Parameterbeschreibungen
sessionist ein Handle für eine XrSession, die zuvor mit xrCreateSession erstellt wurde.spatialContextist ein XrSpatialContextEXT, der zuvor mit xrCreateSpatialContextAsyncEXT erstellt wurde.createInfoist ein Zeiger auf ein XrSpatialAnchorSpaceFromIdCreateInfoANDROID .anchorSpaceist ein Zeiger auf einen XrSpace .
In Szenarien, in denen räumliche Ankerentitäten bereits vorhanden sind (z.B. aufgrund von Persistenz), können Anwendungen einen XrSpace aus diesen räumlichen Ankern erstellen, indem sie ihre räumlichen Entitäts-IDs angeben.
Die Funktion xrCreateSpatialAnchorSpaceFromIdANDROID erstellt ein XrSpace-Handle, indem im Feld XrSpatialAnchorSpaceFromIdCreateInfoANDROID ::entityId eine XrSpatialEntityIdEXT angegeben wird.
Die Laufzeit muss XR_ERROR_VALIDATION_FAILURE zurückgeben, wenn der an xrCreateSpatialAnchorSpaceFromIdANDROID übergebene XrSpatialContextEXT nicht mit XR_SPATIAL_CAPABILITY_ANCHOR_EXT konfiguriert wurde.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_spatial_anchor_spacemuss aktiviert sein, bevor xrCreateSpatialAnchorSpaceFromIdANDROID aufgerufen wird. -
sessionmuss ein gültiges XrSession-Handle sein -
spatialContextmuss ein gültiges XrSpatialContextEXT-Handle sein -
createInfomuss ein Zeiger auf eine gültige XrSpatialAnchorSpaceFromIdCreateInfoANDROID-Struktur sein. -
anchorSpacemuss ein Zeiger auf ein XrSpace-Handle sein -
spatialContextmuss erstellt, zugewiesen oder vonsessionabgerufen worden sein.
Rückgabecodes
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_ANCHOR_ENTITY_ID_INVALID_ANDROIDXR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Die Struktur XrSpatialAnchorSpaceFromIdCreateInfoANDROID ist so definiert:
typedef struct XrSpatialAnchorSpaceFromIdCreateInfoANDROID {
XrStructureType type;
const void* next;
XrSpatialEntityIdEXT anchorEntityId;
} XrSpatialAnchorSpaceFromIdCreateInfoANDROID;
Mitgliederbeschreibungen
typeist der XrStructureType dieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.anchorEntityIdist dieXrSpatialEntityIdEXTdes vorhandenen räumlichen Ankers, aus dem der XrSpace erstellt werden soll.
Die Laufzeit muss XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT zurückgeben, wenn XrSpatialAnchorSpaceFromIdCreateInfoANDROID ::entityId keine gültige ID für spatialContext ist.
Die Laufzeit muss XR_ERROR_SPATIAL_ANCHOR_ENTITY_ID_INVALID_ANDROID zurückgeben, wenn XrSpatialAnchorSpaceFromIdCreateInfoANDROID ::entityId keine gültige Entitäts-ID für einen Anker ist.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_spatial_anchor_spacemuss aktiviert sein, bevor XrSpatialAnchorSpaceFromIdCreateInfoANDROID verwendet werden kann. -
typemussXR_TYPE_SPATIAL_ANCHOR_SPACE_FROM_ID_CREATE_INFO_ANDROIDsein -
nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.
Lebenszyklus des Ankers
Das übergeordnete Element eines XrSpace-Handles ist eine XrSession . Das bedeutet, dass ein XrSpace-Handle, das den Anker darstellt, auch nach dem Löschen von xrCreateSpatialAnchorSpaceFromIdANDROID :: spatialContext oder xrCreateSpatialAnchorSpaceANDROID :: spatialContext gültig bleibt. Wenn ein XrSpace erstellt wird, um einen räumlichen Entitätsanker darzustellen, kann die Anwendung den mit XR_SPATIAL_CAPABILITY_ANCHOR_EXT konfigurierten XrSpatialContextEXT zerstören, während sie weiterhin die neueste Position des Ankers über seinen XrSpace mit xrLocateSpaces abruft. Das bedeutet, dass die Laufzeit den Anker weiterhin verfolgen muss, bis alle XrSpace-Handles, die ihn darstellen, zerstört wurden.
Beispielcode
Raumanker als XrSpace erstellen
Der folgende Beispielcode zeigt, wie Sie einen räumlichen Anker erstellen und als XrSpace zurückgeben.
XrSpatialEntityIdEXT spatialAnchorEntityId;
XrSpace spatialAnchorSpace {XR_NULL_HANDLE}; // XrSpace handle of anchor
// Spatial anchor create info
XrSpatialAnchorCreateInfoEXT createInfo{
.type = XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_EXT,
.baseSpace = localSpace,
.time = predictedDisplayTime,
.pose = {{0, 0, 0, 1}, {1, 1, 1}},
};
// Create spatial anchor using the new API
CHK_XR(xrCreateSpatialAnchorSpaceANDROID(session, spatialContext, &createInfo, &spatialAnchorEntityId, &spatialAnchorSpace));
// ...
XrSpace aus Ankerentitäts-ID erstellen
Im folgenden Beispielcode wird gezeigt, wie Sie einen XrSpace aus einer vorhandenen Ankerentitäts-ID erstellen.
XrSpace anchorSpace = XR_NULL_HANDLE;
// Spatial anchor from XrSpace create info
XrSpatialAnchorSpaceFromIdCreateInfoANDROID createInfoFromId{
.type = XR_TYPE_SPATIAL_ANCHOR_SPACE_FROM_ID_CREATE_INFO_ANDROID,
.anchorEntityId = spatialAnchorEntityId,
};
// Create XrSpace handle from spatial anchor ID
CHK_XR(xrCreateSpatialAnchorSpaceFromIdANDROID(session, spatialContext, &createInfoFromId, &anchorSpace));
// ...
Neue Befehle
Neue Gebäude
Neue Enum-Konstanten
XR_ANDROID_SPATIAL_ANCHOR_SPACE_EXTENSION_NAMEXR_ANDROID_spatial_anchor_space_SPEC_VERSIONErweiterung von XrResult :
XR_ERROR_SPATIAL_ANCHOR_ENTITY_ID_INVALID_ANDROID
Erweiterung von XrStructureType :
XR_TYPE_SPATIAL_ANCHOR_SPACE_FROM_ID_CREATE_INFO_ANDROID
Probleme
Versionsverlauf
Version 1, 15.09.2025 (YuSheng Chang, Kyle Chen)
- Erste Beschreibung der Erweiterung.