Namensstring
XR_ANDROID_trackables
Erweiterungstyp
Instanzerweiterung
Registrierte Durchwahlnummer
456
Revision
1
Erweiterungs- und Versionsabhängigkeiten
Datum der letzten Änderung
2024-09-30
IP-Status
Es sind keine Ansprüche aufgrund von Urheberrechten bekannt.
Mitwirkende
Spencer Quin, Google
Nihav Jain, Google
John Pursey, Google
Jared Finder, Google
Levana Chen, Google
Kenny Vercaemer, Google
Übersicht
Mit dieser Erweiterung kann die App auf Tracker in der physischen Umgebung zugreifen und an einem Tracker befestigte Anker erstellen.
Mit dieser Erweiterung werden Flugzeuge definiert. Andere Erweiterungen können zusätzliche Arten hinzufügen, die erfasst werden können. Mit XR_ANDROID_trackables_object
werden beispielsweise Objekt-Trackables hinzugefügt und mit XR_ANDROID_depth_texture
werden Tiefenbuffer hinzugefügt, die ein Raytracing zu beliebigen Punkten in der Umgebung ermöglichen.
Ein Trackable ist ein Objekt, das in der physischen Umgebung erfasst wird (siehe XrTrackableTypeANDROID):
- eine Fläche (z.B. Wand, Boden, Decke, Tisch)
- ein Objekt (z.B. Tastatur, Maus, Laptop)
Einen trackbaren Tracker erstellen
Ein XrTrackableTrackerANDROID ist ein Handle, der die Ressourcen darstellt, die zum Erkennen und Aktualisieren von Trackern eines bestimmten XrTrackableTypeANDROID in der Umgebung erforderlich sind.
XR_DEFINE_HANDLE(XrTrackableTrackerANDROID)
Die Funktion xrCreateTrackableTrackerANDROID ist so definiert:
XrResult xrCreateTrackableTrackerANDROID(
XrSession session,
const XrTrackableTrackerCreateInfoANDROID* createInfo,
XrTrackableTrackerANDROID* trackableTracker);
Parameterbeschreibungen
session
ist die XrSession, die den Tracker erstellt.createInfo
ist ein Verweis auf eine XrTrackableTrackerCreateInfoANDROID-Struktur mit Parametern, die zum Erstellen des Trackers verwendet werden.trackableTracker
ist ein Verweis auf einen Handle, über den der erstellte XrTrackableTrackerANDROID zurückgegeben wird.
Die Anwendung kann die Funktion xrCreateTrackableTrackerANDROID verwenden, um einen trackbaren Tracker zu erstellen.
XR_ERROR_FEATURE_UNSUPPORTED
wird zurückgegeben, wenn das System keine Tracker des angegebenen Typs unterstützt.XR_ERROR_PERMISSION_INSUFFICIENT
wird zurückgegeben, wenn der anrufenden App die erforderlichen Berechtigungen nicht gewährt wurden.
Die Anwendung kann den zurückgegebenen Tracker-Handle in nachfolgenden API-Aufrufen verwenden. Der XrTrackableTrackerANDROID-Handle muss mit der Funktion xrDestroyTrackableTrackerANDROID freigegeben werden.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_trackables
muss aktiviert sein, bevor xrCreateTrackableTrackerANDROID aufgerufen wird. session
muss ein gültiger XrSession-Alias sein.createInfo
muss ein Verweis auf eine gültige XrTrackableTrackerCreateInfoANDROID-Struktur sein.trackableTracker
muss ein Zeiger auf einen XrTrackableTrackerANDROID-Handle sein.
Rückgabecodes
XR_SUCCESS
XR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_VALIDATION_FAILURE
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_HANDLE_INVALID
XR_ERROR_INSTANCE_LOST
XR_ERROR_SESSION_LOST
XR_ERROR_OUT_OF_MEMORY
XR_ERROR_LIMIT_REACHED
XR_ERROR_FEATURE_UNSUPPORTED
Die Struktur XrTrackableTrackerCreateInfoANDROID ist so definiert:
typedef struct XrTrackableTrackerCreateInfoANDROID {
XrStructureType type;
void* next;
XrTrackableTypeANDROID trackableType;
} XrTrackableTrackerCreateInfoANDROID;
Beschreibungen von Mitgliedern
type
ist der XrStructureType dieser Struktur.next
istNULL
oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht definiert.trackableType
ist der XrTrackableTypeANDROID, der vom Tracker erfasst wird.
Die Struktur XrTrackableTrackerCreateInfoANDROID bietet Erstellungsoptionen für den XrTrackableTrackerANDROID, wenn sie an xrCreateTrackableTrackerANDROID übergeben wird.
In Erweiterungen können Strukturen definiert werden, die an next
angehängt werden können, um eine zusätzliche Konfiguration für die trackbaren Tracker zu ermöglichen.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_trackables
muss aktiviert sein, bevor XrTrackableTrackerCreateInfoANDROID verwendet werden kann. type
mussXR_TYPE_TRACKABLE_TRACKER_CREATE_INFO_ANDROID
sein.next
mussNULL
oder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein. Siehe auch: XrTrackableObjectConfigurationANDROIDtrackableType
muss ein gültiger Wert für XrTrackableTypeANDROID sein
Die Aufzählung XrTrackableTypeANDROID ist so definiert:
typedef enum XrTrackableTypeANDROID {
XR_TRACKABLE_TYPE_NOT_VALID_ANDROID = 0,
XR_TRACKABLE_TYPE_PLANE_ANDROID = 1,
XR_TRACKABLE_TYPE_DEPTH_ANDROID = 1000463000,
XR_TRACKABLE_TYPE_OBJECT_ANDROID = 1000466000
} XrTrackableTypeANDROID;
Die Funktion xrDestroyTrackableTrackerANDROID ist so definiert:
XrResult xrDestroyTrackableTrackerANDROID(
XrTrackableTrackerANDROID trackableTracker);
Parameterbeschreibungen
trackableTracker
ist ein XrTrackableTrackerANDROID-Handle, der zuvor mit xrCreateTrackableTrackerANDROID erstellt wurde.
Die Funktion xrDestroyTrackableTrackerANDROID zerstört den Trackable-Tracker.
Wenn es keinen anderen gültigen XrTrackableTrackerANDROID gibt, der mit demselben XrTrackableTypeANDROID erstellt wurde, deaktiviert das System möglicherweise die für diesen Trackable-Typ erforderlichen Tracking-Dienste, um Systemressourcen zu sparen.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_trackables
muss aktiviert sein, bevor xrDestroyTrackableTrackerANDROID aufgerufen wird. trackableTracker
muss ein gültiger XrTrackableTrackerANDROID-Handle sein.
Threadsicherheit
- Der Zugriff auf
trackableTracker
und alle untergeordneten Handles muss extern synchronisiert werden.
Rückgabecodes
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_HANDLE_INVALID
Alle Tracker abrufen
Das XrTrackableANDROID
-Atom ist definiert als:
XR_DEFINE_ATOM(XrTrackableANDROID)
XrTrackableANDROID
wird verwendet, um ein einzelnes Trackable zu repräsentieren, und ist nur innerhalb des Lebenszyklus des zugehörigen XrTrackableTrackerANDROID gültig.
Die Funktion xrGetAllTrackablesANDROID ist so definiert:
XrResult xrGetAllTrackablesANDROID(
XrTrackableTrackerANDROID trackableTracker,
uint32_t trackableCapacityInput,
uint32_t* trackableCountOutput,
XrTrackableANDROID* trackables);
Parameterbeschreibungen
trackableTracker
ist der XrTrackableTrackerANDROID, der abgefragt werden soll.trackableCapacityInput
ist die Kapazität destrackables
-Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.trackableCountOutput
ist ein Verweis auf die Anzahl der geschriebenentrackables
oder ein Verweis auf die erforderliche Kapazität, fallstrackables
nicht ausreicht.trackables
ist ein Verweis auf ein Array vonXrTrackableANDROID
. Es kannNULL
sein, wenntrackableCapacityInput
0 ist.Eine ausführliche Beschreibung zum Abrufen der erforderlichen
trackables
-Größe findest du im Abschnitt Parameter für die Puffergröße.
xrGetAllTrackablesANDROID füllt ein Array mit XrTrackableANDROID
, das die in der Umgebung gefundenen Trackables darstellt. Der XrTrackableTypeANDROID der zurückgegebenen trackables
muss mit dem XrTrackableTypeANDROID der trackableTracker
übereinstimmen.
Einsehbares Flugzeug
Die Funktion xrGetTrackablePlaneANDROID ist so definiert:
XrResult xrGetTrackablePlaneANDROID(
XrTrackableTrackerANDROID trackableTracker,
const XrTrackableGetInfoANDROID* getInfo,
XrTrackablePlaneANDROID* planeOutput);
Parameterbeschreibungen
trackableTracker
ist der XrTrackableTrackerANDROID, der abgefragt werden soll.getInfo
ist die XrTrackableGetInfoANDROID mit den Informationen, die zum Abrufen des Trackable-Ebenens verwendet werden.planeOutput
ist ein Verweis auf die Struktur XrTrackablePlaneANDROID, in der die trackbare Ebene zurückgegeben wird.
Die Funktion xrGetTrackablePlaneANDROID gibt Details zur trackbaren Ebene zurück, z. B. ihre Geometrie, Ausrichtung und den Tracking-Status.
Die Informationen zur Ebene werden mithilfe von XrTrackableGetInfoANDROID::time, XrTrackableGetInfoANDROID::baseSpace aufgelöst und relativ zum Basisbereich zum Zeitpunkt des Aufrufs von xrGetTrackablePlaneANDROID angegeben.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_trackables
muss aktiviert sein, bevor xrGetTrackablePlaneANDROID aufgerufen wird. trackableTracker
muss ein gültiger XrTrackableTrackerANDROID-Handle sein.getInfo
muss ein Verweis auf eine gültige XrTrackableGetInfoANDROID-Struktur sein.planeOutput
muss ein Zeiger auf eine XrTrackablePlaneANDROID-Struktur sein.
Rückgabecodes
XR_SUCCESS
XR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_VALIDATION_FAILURE
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_HANDLE_INVALID
XR_ERROR_INSTANCE_LOST
XR_ERROR_SESSION_LOST
XR_ERROR_LIMIT_REACHED
XR_ERROR_TIME_INVALID
Die Struktur XrTrackableGetInfoANDROID ist so definiert:
typedef struct XrTrackableGetInfoANDROID {
XrStructureType type;
void* next;
XrTrackableANDROID trackable;
XrSpace baseSpace;
XrTime time;
} XrTrackableGetInfoANDROID;
Beschreibungen von Mitgliedern
type
ist der XrStructureType dieser Struktur.next
istNULL
oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht definiert.trackable
ist dieXrTrackableANDROID
-Ebene, die abgefragt werden soll.baseSpace
Die Flugzeugpose ist dann relativ zu diesem XrSpace beitime
.time
ist dieXrTime
, an der die Koordinaten relativ zurbaseSpace
ausgewertet werden sollen.
Die Struktur XrTrackableGetInfoANDROID bietet Abfrageoptionen, wenn sie an xrGetTrackablePlaneANDROID übergeben wird. trackable
muss mit dem trackableTracker
übereinstimmen, das in xrGetTrackablePlaneANDROID verwendet wird.
XR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROID
wird zurückgegeben, wenn der trackbare Typ der trackable
nicht XR_TRACKABLE_TYPE_PLANE_ANDROID
ist.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_trackables
muss aktiviert sein, bevor XrTrackableGetInfoANDROID verwendet werden kann. type
mussXR_TYPE_TRACKABLE_GET_INFO_ANDROID
sein.next
mussNULL
oder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.baseSpace
muss ein gültiger XrSpace-Handle sein
Die Struktur XrTrackablePlaneANDROID ist so definiert:
typedef struct XrTrackablePlaneANDROID {
XrStructureType type;
void* next;
XrTrackingStateANDROID trackingState;
XrPosef centerPose;
XrExtent2Df extents;
XrPlaneTypeANDROID planeType;
XrPlaneLabelANDROID planeLabel;
XrTrackableANDROID subsumedByPlane;
XrTime lastUpdatedTime;
uint32_t vertexCapacityInput;
uint32_t* vertexCountOutput;
XrVector2f* vertices;
} XrTrackablePlaneANDROID;
Beschreibungen von Mitgliedern
type
ist der XrStructureType dieser Struktur.next
istNULL
oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht definiert.trackingState
ist der XrTrackingStateANDROID des Flugzeugs.centerPose
ist ein XrPosef, das die Position und Ausrichtung der Ebene im Referenzrahmen des entsprechenden XrTrackableGetInfoANDROID::baseSpace definiert. Eine Identitätsorientierung stellt hier Koordinatenaxes dar, bei denen +Y parallel zur Normale der Ebene ist.extents
ist die XrExtent2Df-Dimension der Ebene.planeType
ist der XrPlaneTypeANDROID, den die Laufzeit für diese Ebene festgelegt hat.planeLabel
ist das XrPlaneLabelANDROID, das die Laufzeit für diese Ebene festgelegt hat.subsumedByPlane
ist dieXrTrackableANDROID
der Ebene, die diese Ebene umfasst (XR_NULL_TRACKABLE_ANDROID
, wenn keine vorhanden ist).lastUpdatedTime
ist dieXrTime
der letzten Aktualisierung des Plans.vertexCapacityInput
ist die Kapazität desvertices
-Arrays oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.vertexCountOutput
ist ein Verweis auf die Anzahl der geschriebenenvertices
oder ein Verweis auf die erforderliche Kapazität, fallsvertices
nicht ausreicht.vertices
ist ein Verweis auf ein Array von XrVector2f. Es kannNULL
sein, wennvertexCapacityInput
0 ist. Die Eckpunkte werden gegen den Uhrzeigersinn angeordnet. Das Polygon darf konkav sein und darf sich nicht selbst schneiden.- Eine ausführliche Beschreibung zum Abrufen der erforderlichen
vertices
-Größe findest du im Abschnitt Parameter für die Puffergröße.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_trackables
muss aktiviert sein, bevor XrTrackablePlaneANDROID verwendet werden kann. type
mussXR_TYPE_TRACKABLE_PLANE_ANDROID
sein.next
mussNULL
oder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.trackingState
muss ein gültiger Wert für XrTrackingStateANDROID seinplaneType
muss ein gültiger Wert für XrPlaneTypeANDROID seinplaneLabel
muss ein gültiger Wert für XrPlaneLabelANDROID seinvertexCountOutput
muss ein Verweis auf einenuint32_t
-Wert seinvertices
muss ein Zeiger auf ein Array vonvertexCapacityInput
XrVector2f-Strukturen sein.- Der Parameter
vertexCapacityInput
muss größer als0
sein.
Die XrTrackingStateANDROID-Aufzählung beschreibt den Tracking-Status eines XrTrackableANDROID
.
typedef enum XrTrackingStateANDROID {
XR_TRACKING_STATE_PAUSED_ANDROID = 0,
XR_TRACKING_STATE_STOPPED_ANDROID = 1,
XR_TRACKING_STATE_TRACKING_ANDROID = 2
} XrTrackingStateANDROID;
Beschreibung |
|
|
Das Tracking für das Element oder den Anker ist pausiert, kann aber in Zukunft fortgesetzt werden. |
|
Das Tracking für dieses Trackable wurde beendet und wird nie wieder fortgesetzt. |
|
Das Objekt wird erfasst und seine Pose ist aktuell. |
Die XrPlaneTypeANDROID-Enumeration ist der Typ eines XrTrackableANDROID
-Flugzeugs.
typedef enum XrPlaneTypeANDROID {
XR_PLANE_TYPE_HORIZONTAL_DOWNWARD_FACING_ANDROID = 0,
XR_PLANE_TYPE_HORIZONTAL_UPWARD_FACING_ANDROID = 1,
XR_PLANE_TYPE_VERTICAL_ANDROID = 2,
XR_PLANE_TYPE_ARBITRARY_ANDROID = 3
} XrPlaneTypeANDROID;
Die XrPlaneLabelANDROID-Enumeration ist ein Label für eine XrTrackableANDROID
-Ebene.
typedef enum XrPlaneLabelANDROID {
XR_PLANE_LABEL_UNKNOWN_ANDROID = 0,
XR_PLANE_LABEL_WALL_ANDROID = 1,
XR_PLANE_LABEL_FLOOR_ANDROID = 2,
XR_PLANE_LABEL_CEILING_ANDROID = 3,
XR_PLANE_LABEL_TABLE_ANDROID = 4
} XrPlaneLabelANDROID;
Ankerbereich erstellen
XrResult xrCreateAnchorSpaceANDROID(
XrSession session,
const XrAnchorSpaceCreateInfoANDROID* createInfo,
XrSpace* anchorOutput);
Parameterbeschreibungen
session
ist die XrSession, die den Ankerbereich erstellt.createInfo
ist ein Verweis auf ein XrAnchorSpaceCreateInfoANDROID-Objekt mit Parametern, die zum Erstellen des Ankerbereichs verwendet werden.anchorOutput
ist ein Verweis auf einen Handle, über den der erstellte XrSpace zurückgegeben wird.
Zu jedem Zeitpunkt werden sowohl die Position als auch die Richtung des Ankers erfasst oder nicht erfasst. Das bedeutet, dass sowohl XR_SPACE_LOCATION_POSITION_TRACKED_BIT
als auch XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT
festgelegt oder beide gelöscht werden müssen, wenn die Anwendung xrLocateSpace oder xrLocateSpaces für anchorOutput
aufruft.
Die Anwendung muss den zurückgegebenen XrSpace mit xrDestroySpace freigeben.
XR_ERROR_FEATURE_UNSUPPORTED
muss zurückgegeben werden, wenn das System keine Anker unterstützt.XR_ERROR_TRACKABLE_TYPE_NOT_SUPPORTED_ANDROID
muss zurückgegeben werden, wenn die jeweilige Ankeranbringung nicht unterstützt wird.
Gültige Verwendung (implizit)
- Die Erweiterung
XR_ANDROID_trackables
muss aktiviert sein, bevor xrCreateAnchorSpaceANDROID aufgerufen wird. session
muss ein gültiger XrSession-Alias sein.createInfo
muss ein Zeiger auf eine gültige XrAnchorSpaceCreateInfoANDROID-Struktur sein.anchorOutput
muss ein Zeiger auf einen XrSpace-Handle sein.
Rückgabecodes
XR_SUCCESS
XR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_TRACKABLE_TYPE_NOT_SUPPORTED_ANDROID
XR_ERROR_VALIDATION_FAILURE
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_HANDLE_INVALID
XR_ERROR_INSTANCE_LOST
XR_ERROR_SESSION_LOST
XR_ERROR_LIMIT_REACHED
XR_ERROR_POSE_INVALID
XR_ERROR_TIME_INVALID
XR_ERROR_OUT_OF_MEMORY
Die Struktur XrAnchorSpaceCreateInfoANDROID ist so definiert:
typedef struct XrAnchorSpaceCreateInfoANDROID {
XrStructureType type;
void* next;
XrSpace space;
XrTime time;
XrPosef pose;
XrTrackableANDROID trackable;
} XrAnchorSpaceCreateInfoANDROID;
Beschreibungen von Mitgliedern
type
ist der XrStructureType dieser Struktur.next
istNULL
oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht definiert.space
ist der XrSpace, in dem die Markierung erstellt wird.time
ist derXrTime
der Erstellung des Ankers.pose
ist die XrPosef des Ankers.trackable
ist dieXrTrackableANDROID
, an der der Anker befestigt wird. Es kannXR_NULL_TRACKABLE_ANDROID
€ kosten, einen räumlichen Anker zu erstellen.
Gültige Verwendung (implizit)
- Die
XR_ANDROID_trackables
-Erweiterung muss aktiviert sein, bevor XrAnchorSpaceCreateInfoANDROID verwendet werden kann. type
mussXR_TYPE_ANCHOR_SPACE_CREATE_INFO_ANDROID
sein.next
mussNULL
oder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.space
muss ein gültiger XrSpace-Handle sein
Beispielcode zum Abrufen aller Tracker
Im folgenden Beispielcode wird gezeigt, wie alle Tracker eines bestimmten Typs abgerufen werden.
XrSession session; // previously initialized
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateTrackableTrackerANDROID xrCreateTrackableTrackerANDROID; // previously initialized
PFN_xrGetAllTrackablesANDROID xrGetAllTrackablesANDROID; // previously initialized
PFN_xrDestroyTrackableTrackerANDROID xrDestroyTrackableTrackerANDROID; // previously initialized
XrTrackableTrackerCreateInfoANDROID createInfo{XR_TYPE_TRACKABLE_TRACKER_CREATE_INFO_ANDROID};
createInfo.trackableType = XR_TRACKABLE_TYPE_PLANE_ANDROID;
XrTrackableTrackerANDROID planeTrackableTracker;
XrResult result = xrCreateTrackableTrackerANDROID(
session,
&createInfo,
&planeTrackableTracker);
if (result != XR_SUCCESS) { /* Handle failures. */ }
uint32_t trackableCountOutput = 0;
std::vector<XrTrackableANDROID> allPlaneTrackables;
// Query the number of trackables available.
result = xrGetAllTrackablesANDROID(
planeTrackableTracker,
0,
&trackableCountOutput,
nullptr
);
if (result == XR_SUCCESS) {
allPlaneTrackables.resize(trackableCountOutput, XR_NULL_HANDLE);
// Fetch the actual trackable handles in the appropriately resized array.
result = xrGetAllTrackablesANDROID(
planeTrackableTracker,
trackableCountOutput,
&trackableCountOutput,
allPlaneTrackables.data());
if (result == XR_SUCCESS) {
for (XrTrackableANDROID trackable : allPlaneTrackables) {
// You now have all trackables of the specified type.
}
}
}
// Release trackable tracker.
result = xrDestroyTrackableTrackerANDROID(planeTrackableTracker);
Beispielcode zum Abrufen eines trackbaren Flugobjekts
Im folgenden Beispielcode wird gezeigt, wie Sie eine trackbare Ebene aus einer vorhandenen XrTrackableANDROID
abrufen, die aus einem Trefferergebnis XR_ANDROID_raycast
oder xrGetTrackablesANDROID
stammt.
XrTrackableTrackerANDROID planeTracker; // previously created
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrGetTrackablePlaneANDROID xrGetTrackablePlaneANDROID; // previously initialized
XrTime updateTime; // Time used for the current frame's simulation update.
XrSpace appSpace; // Space created for XR_REFERENCE_SPACE_TYPE_LOCAL.
XrTrackableANDROID planeTrackable; // Acquired from a hit result or getTrackables().
XrTrackableGetInfoANDROID planeGetInfo;
planeGetInfo.type = XR_TYPE_TRACKABLE_GET_INFO_ANDROID;
planeGetInfo.next = nullptr;
planeGetInfo.trackable = planeTrackable;
planeGetInfo.space = appSpace;
planeGetInfo.time = updateTime;
XrTrackablePlaneANDROID plane = { XR_TYPE_TRACKABLE_PLANE_ANDROID };
result = xrGetTrackablePlaneANDROID(
planeTracker,
&planeGetInfo,
&plane
);
if (result == XR_SUCCESS) {
// Plane tracking state, center pose, extents, type now available in plane.
}
Beispielcode zum Erstellen eines Ankerbereichs
Im folgenden Beispielcode wird gezeigt, wie ein Ankerbereich erstellt wird, der an ein Trackable angehängt ist.
XrSession session; // Created at app startup.
XrTime updateTime; // Time used for the current frame's simulation update.
XrSpace appSpace; // Space created for XR_REFERENCE_SPACE_TYPE_LOCAL.
XrTrackableANDROID planeTrackable; // Acquired from a hit result or getTrackables().
// Create an anchor at (2, 2, 2) world-coordinates.
XrAnchorSpaceCreateInfoANDROID spatialAnchorCreateInfo;
spatialAnchorCreateInfo.type = XR_TYPE_ANCHOR_SPACE_CREATE_INFO_ANDROID;
spatialAnchorCreateInfo.next = nullptr;
spatialAnchorCreateInfo.space = appSpace;
spatialAnchorCreateInfo.time = updateTime;
spatialAnchorCreateInfo.pose = { { 0, 0, 0, 1 }, { 2, 2, 2 } };
XrSpace spatialAnchor = XR_NULL_HANDLE;
XrResult result = xrCreateAnchorSpaceANDROID(
session,
&spatialAnchorCreateInfo,
&spatialAnchor
);
// Create an anchor attached to a trackable.
XrTrackablePlane plane = ...;
XrAnchorSpaceCreateInfoANDROID trackableAnchorCreateInfo;
trackableAnchorCreateInfo.type = XR_TYPE_ANCHOR_SPACE_CREATE_INFO_ANDROID;
trackableAnchorCreateInfo.next = nullptr;
trackableAnchorCreateInfo.space = appState;
trackableAnchorCreateInfo.pose = plane.centerPose;
trackableAnchorCreateInfo.trackable = planeTrackable;
XrSpace trackableAnchor = XR_NULL_HANDLE;
XrResult result = xrCreateAnchorSpaceANDROID(
session,
&trackableAnchorCreateInfo,
&trackableAnchor
);
while (true) {
// app update loop
// ...
// Get the current location of the anchor's space w.r.t the world.
XrSpaceLocation anchorLocation = { XR_TYPE_SPACE_LOCATION };
result = xrLocateSpace(trackableAnchor, appSpace, updateTime, &anchorLocation);
if (anchor.trackingState == XR_TRACKING_STATE_TRACKING_ANDROID) {
// Update anchor pose.
doDrawingForAnchor(anchorLocation.pose);
} else {
// ...
}
}
// Cleanup - destroy the space, detatch the anchor so its no longer tracked by the
// runtime and then release all resources held by it.
xrDestroySpace(spatialAnchor);
xrDestroySpace(trackableAnchor);
Neue Basistypen
Neue Objekttypen
Neue Enum-Konstanten
Die Aufzählung XrStructureType wurde um folgende Elemente erweitert:
XR_TYPE_TRACKABLE_GET_INFO_ANDROID
XR_TYPE_ANCHOR_SPACE_CREATE_INFO_ANDROID
XR_TYPE_TRACKABLE_PLANE_ANDROID
XR_TYPE_TRACKABLE_TRACKER_CREATE_INFO_ANDROID
Die Aufzählung XrObjectType wurde um Folgendes erweitert:
XR_OBJECT_TYPE_TRACKABLE_TRACKER_ANDROID
Die Aufzählung XrResult wurde um folgende Elemente erweitert:
XR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROID
XR_ERROR_TRACKABLE_TYPE_NOT_SUPPORTED_ANDROID
Neue Enums
Neue Strukturen
- XrTrackableTrackerCreateInfoANDROID
- XrTrackableGetInfoANDROID
- XrTrackablePlaneANDROID
- XrAnchorSpaceCreateInfoANDROID
Neue Funktionen
- xrCreateTrackableTrackerANDROID
- xrDestroyTrackableTrackerANDROID
- xrGetAllTrackablesANDROID
- xrGetTrackablePlaneANDROID
- xrCreateAnchorSpaceANDROID
Probleme
Versionsverlauf
- Revision 1, 27. September 2024 (Kenny Vercaemer)
- Erste Beschreibung der Erweiterung.