Name String
XR_ANDROID_eye_tracking
Erweiterungstyp
Instanzerweiterung
Registrierte Durchwahlnummer
457
Revision
1
Abhängigkeiten von Erweiterungen und Versionen
Datum der letzten Änderung
2025-01-17
IP-Status
Es sind keine Ansprüche wegen geistigen Eigentums bekannt.
Mitwirkende
Spencer Quin, Google
Jared Finder, Google
Levana Chen, Google
Kenny Vercaemer, Google
Prasanthi Gurumurthy, Google
Nihav Jain, Google
Übersicht
Mit dieser Erweiterung können Anwendungen die Position und Ausrichtung der Augen des Nutzers sowie den Eye-Tracking-Status abrufen.
Eye-Tracking-Daten werden in zwei Modi bereitgestellt: grob und fein. Bei der groben Verfolgung wird eine grobe Schätzung der Augen des Nutzers vorgenommen, während bei der genauen Verfolgung eine genauere Schätzung erfolgt. Die grobe Nachverfolgung ist für Anwendungen gedacht, die eine einfache avatarähnliche Darstellung bieten möchten, während die genaue Nachverfolgung für präzisere Anwendungen gedacht ist.
Für die Interaktion XR_EXT_eye_gaze_interaction sollte verwendet werden.
Systemfunktionen prüfen
Die Struktur XrSystemEyeTrackingPropertiesANDROID ist so definiert:
typedef struct XrSystemEyeTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsEyeTracking;
} XrSystemEyeTrackingPropertiesANDROID;
Mitgliederbeschreibungen
typeist dieXrStructureTypedieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Im OpenXR-Kern oder in dieser Erweiterung sind keine solchen Strukturen definiert.supportsEyeTrackingist einXrBool32, der angibt, ob das aktuelle System Eye-Tracking unterstützt.
Eine Anwendung kann prüfen, ob das System Eye-Tracking unterstützt, indem sie beim Aufrufen von xrGetSystemProperties eine XrSystemEyeTrackingPropertiesANDROID-Struktur an die XrSystemProperties anhängt. Wenn supportsEyeTracking den Wert XR_FALSE zurückgibt, erhält eine Anwendung XR_ERROR_FEATURE_UNSUPPORTED von xrCreateEyeTrackerANDROID.
Gültige Nutzung (implizit)
- Die Erweiterung
XR_ANDROID_eye_trackingmuss aktiviert sein, bevor SieXrSystemEyeTrackingPropertiesANDROIDverwenden. typemussXR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROIDsein.nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.
Eye-Tracker-Handle erstellen
XR_DEFINE_HANDLE(XrEyeTrackerANDROID)
Der XrEyeTrackerANDROID-Handle steht für einen Eye-Tracker, mit dem die Augen verfolgt und genau abgebildet wird, worauf der Nutzer blickt.
Eye-Tracking-Daten können sensible personenbezogene Daten sein und sind eng mit dem Schutz der Privatsphäre und der Integrität verbunden. Es wird dringend empfohlen, dass Anwendungen, die Eye-Tracking-Daten speichern oder übertragen, den Nutzer immer um eine aktive und spezifische Zustimmung bitten.
Mit diesem Handle kann über andere Funktionen in dieser Erweiterung auf Eye-Tracking-Daten zugegriffen werden.
Eye-Tracking bietet eine Darstellung der Augenposition und des Augenstatus in der Szene.
Die Funktion xrCreateEyeTrackerANDROID ist so definiert:
XrResult xrCreateEyeTrackerANDROID(
XrSession session,
const XrEyeTrackerCreateInfoANDROID* createInfo,
XrEyeTrackerANDROID* eyeTracker);
Parameterbeschreibungen
sessionist einXrSession-Handle, in dem die Blickverfolgung aktiv ist.createInfoist dieXrEyeTrackerCreateInfoANDROID, die zum Angeben des Eye-Trackings verwendet wird.eyeTrackerist das zurückgegebeneXrEyeTrackerANDROID-Handle.
Eine Anwendung kann mit der Funktion xrCreateEyeTrackerANDROID ein XrEyeTrackerANDROID-Handle erstellen.
Wenn das System kein Eye-Tracking unterstützt, wird XR_ERROR_FEATURE_UNSUPPORTED von xrCreateEyeTrackerANDROID zurückgegeben.
Gültige Nutzung (implizit)
- Die Erweiterung
XR_ANDROID_eye_trackingmuss aktiviert sein, bevorxrCreateEyeTrackerANDROIDaufgerufen wird. sessionmuss ein gültigerXrSession-Alias sein.createInfomuss ein Zeiger auf eine gültigeXrEyeTrackerCreateInfoANDROID-Struktur sein.eyeTrackermuss ein Zeiger auf einXrEyeTrackerANDROID-Handle sein.
Rückgabecodes
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_FEATURE_UNSUPPORTED
Die Struktur XrEyeTrackerCreateInfoANDROID ist so definiert:
typedef struct XrEyeTrackerCreateInfoANDROID {
XrStructureType type;
void* next;
} XrEyeTrackerCreateInfoANDROID;
Mitgliederbeschreibungen
typeist dieXrStructureTypedieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Im OpenXR-Kern oder in dieser Erweiterung sind keine solchen Strukturen definiert.
Die Struktur XrEyeTrackerCreateInfoANDROID beschreibt die Informationen, die zum Erstellen eines XrEyeTrackerANDROID-Handles erforderlich sind.
Gültige Nutzung (implizit)
- Die Erweiterung
XR_ANDROID_eye_trackingmuss aktiviert sein, bevor SieXrEyeTrackerCreateInfoANDROIDverwenden. typemussXR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROIDsein.nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.
Die Funktion xrDestroyEyeTrackerANDROID ist so definiert:
XrResult xrDestroyEyeTrackerANDROID(
XrEyeTrackerANDROID eyeTracker);
Parameterbeschreibungen
eyeTrackerist einXrEyeTrackerANDROID, das zuvor vonxrCreateEyeTrackerANDROIDerstellt wurde.
Die Funktion xrDestroyEyeTrackerANDROID gibt die eyeTracker und die zugrunde liegenden Ressourcen frei, wenn die Eye-Tracking-Funktionen nicht mehr benötigt werden.
Gültige Nutzung (implizit)
- Die Erweiterung
XR_ANDROID_eye_trackingmuss aktiviert sein, bevorxrDestroyEyeTrackerANDROIDaufgerufen wird. eyeTrackermuss ein gültigerXrEyeTrackerANDROID-Alias sein.
Threadsicherheit
- Der Zugriff auf
eyeTrackerund alle untergeordneten Handles muss extern synchronisiert werden.
Rückgabecodes
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
Informationen zu den Augen abrufen
Die Funktion xrGetCoarseTrackingEyesInfoANDROID ist so definiert:
XrResult xrGetCoarseTrackingEyesInfoANDROID(
XrEyeTrackerANDROID eyeTracker,
const XrEyesGetInfoANDROID* getInfo,
XrEyesANDROID* eyesOutput);
Parameterbeschreibungen
eyeTrackerist einXrEyeTrackerANDROID, das zuvor vonxrCreateEyeTrackerANDROIDerstellt wurde.getInfoist ein Zeiger aufXrEyesGetInfoANDROID, mit dem angegeben wird, welche Ausgabe erforderlich ist.infoOutputist ein Zeiger aufXrEyesANDROID, der die zurückgegebenen Informationen zu den Augen enthält, einschließlich Posen und Status.
Die Funktion xrGetCoarseTrackingEyesInfoANDROID ruft die Informationen zu Augenstatus und Posen auf eine Weise ab, die die Privatsphäre der Nutzer schützt.
Die Laufzeit muss XR_ERROR_PERMISSION_INSUFFICIENT zurückgeben, wenn die Anwendung nicht die Berechtigung android.permission.EYE_TRACKING_COARSE hat.
Die Informationen zu den Augen werden aufgelöst und sind relativ zum Basisraum zum Zeitpunkt des Aufrufs von xrGetCoarseTrackingEyesInfoANDROID mit XrEyesGetInfoANDROID::time, XrEyesGetInfoANDROID::baseSpace.
Sowohl die Position als auch die Richtung der Augenposition werden jederzeit erfasst oder nicht erfasst. Das bedeutet, dass Anwendungen davon ausgehen können, dass sowohl XR_SPACE_LOCATION_POSITION_TRACKED_BIT als auch XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT für die bereitgestellte XrEyesANDROID::eyes entweder festgelegt oder gelöscht werden und dass XrEyesANDROID::mode die Tracking-Status angibt.
Gültige Nutzung (implizit)
- Die Erweiterung
XR_ANDROID_eye_trackingmuss aktiviert sein, bevorxrGetCoarseTrackingEyesInfoANDROIDaufgerufen wird. eyeTrackermuss ein gültigerXrEyeTrackerANDROID-Alias sein.getInfomuss ein Zeiger auf eine gültigeXrEyesGetInfoANDROID-Struktur sein.eyesOutputmuss ein Zeiger auf eineXrEyesANDROID-Struktur sein.
Rückgabecodes
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_TIME_INVALIDXR_ERROR_PERMISSION_INSUFFICIENT
Die Funktion xrGetFineTrackingEyesInfoANDROID ist so definiert:
XrResult xrGetFineTrackingEyesInfoANDROID(
XrEyeTrackerANDROID eyeTracker,
const XrEyesGetInfoANDROID* getInfo,
XrEyesANDROID* eyesOutput);
Parameterbeschreibungen
eyeTrackerist einXrEyeTrackerANDROID, das zuvor vonxrCreateEyeTrackerANDROIDerstellt wurde.getInfoist ein Zeiger aufXrEyesGetInfoANDROID, mit dem angegeben wird, welche Ausgabe erforderlich ist.infoOutputist ein Zeiger aufXrEyesANDROID, der die zurückgegebenen Informationen zu den Augen enthält, einschließlich Posen und Status. Die FunktionxrGetFineTrackingEyesInfoANDROIDruft Informationen zu Augenstatus und Posen mit höherer Genauigkeit ab alsxrGetCoarseTrackingEyesInfoANDROID.
Die Laufzeit muss XR_ERROR_PERMISSION_INSUFFICIENT zurückgeben, wenn die Anwendung nicht die Berechtigung android.permission.EYE_TRACKING_FINE hat.
Die Informationen zu den Augen werden aufgelöst und sind relativ zum Basisraum zum Zeitpunkt des Aufrufs von xrGetFineTrackingEyesInfoANDROID mit XrEyesGetInfoANDROID::time, XrEyesGetInfoANDROID::baseSpace.
Sowohl die Position als auch die Richtung der Augenposition werden jederzeit erfasst oder nicht erfasst. Das bedeutet, dass Anwendungen davon ausgehen können, dass sowohl XR_SPACE_LOCATION_POSITION_TRACKED_BIT als auch XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT für die bereitgestellte XrEyesANDROID::eyes entweder festgelegt oder gelöscht werden und dass XrEyesANDROID::mode die Tracking-Status angibt.
Gültige Nutzung (implizit)
- Die Erweiterung
XR_ANDROID_eye_trackingmuss aktiviert sein, bevorxrGetFineTrackingEyesInfoANDROIDaufgerufen wird. eyeTrackermuss ein gültigerXrEyeTrackerANDROID-Alias sein.getInfomuss ein Zeiger auf eine gültigeXrEyesGetInfoANDROID-Struktur sein.eyesOutputmuss ein Zeiger auf eineXrEyesANDROID-Struktur sein.
Rückgabecodes
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_TIME_INVALIDXR_ERROR_PERMISSION_INSUFFICIENT
Die XrEyesGetInfoANDROID-Struktur enthält die Informationen, die zum Abrufen von Augenpositionen und ‑status erforderlich sind.
typedef struct XrEyesGetInfoANDROID {
XrStructureType type;
void* next;
XrTime time;
XrSpace baseSpace;
} XrEyesGetInfoANDROID;
Mitgliederbeschreibungen
typeist dieXrStructureTypedieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Im OpenXR-Kern oder in dieser Erweiterung sind keine solchen Strukturen definiert.timeist dieXrTime, bei der die Koordinaten relativ zumbaseSpaceausgewertet werden sollen.baseSpaceDie Augenposition wird relativ zu diesemXrSpacebeitimeangegeben.
Gültige Nutzung (implizit)
- Die Erweiterung
XR_ANDROID_eye_trackingmuss aktiviert sein, bevor SieXrEyesGetInfoANDROIDverwenden. typemussXR_TYPE_EYES_GET_INFO_ANDROIDsein.nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.baseSpacemuss ein gültigerXrSpace-Alias sein.
Die Struktur XrEyesANDROID enthält Informationen zu den erfassten Augen.
typedef struct XrEyesANDROID {
XrStructureType type;
void* next;
XrEyeANDROID eyes[XR_EYE_MAX_ANDROID];
XrEyeTrackingModeANDROID mode;
} XrEyesANDROID;
Mitgliederbeschreibungen
typeist dieXrStructureTypedieser Struktur.nextistNULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Im OpenXR-Kern oder in dieser Erweiterung sind keine solchen Strukturen definiert.eyesist ein Array vonXrEyeANDROIDfür das linke und rechte Auge, das durchXrEyeIndexANDROIDindexiert wird.modeist dieXrEyeTrackingModeANDROID, um anzugeben, ob die Augen verfolgt werden und welche.
Gültige Nutzung (implizit)
- Die Erweiterung
XR_ANDROID_eye_trackingmuss aktiviert sein, bevor SieXrEyesANDROIDverwenden. typemussXR_TYPE_EYES_ANDROIDsein.nextmussNULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.- Jedes Element von
eyesmuss eine gültigeXrEyeANDROID-Struktur sein. modemuss ein gültigerXrEyeTrackingModeANDROID-Wert sein
Die Struktur XrEyeANDROID beschreibt den Status, die Position und die Ausrichtung eines Auges.
typedef struct XrEyeANDROID {
XrEyeStateANDROID eyeState;
XrPosef eyePose;
} XrEyeANDROID;
Mitgliederbeschreibungen
eyeStateist dieXrEyeStateANDROIDeines Auges.poseist einXrPosef, der die Position und Ausrichtung des Ursprungs eines Auges im Referenzrahmen des entsprechendenXrEyesGetInfoANDROID::baseSpacedefiniert. Eine Identitätsausrichtung stellt hier eine Koordinatenachse mit +Z in Richtung der Augen des Nutzers, +X nach rechts und +Y nach oben dar.
Gültige Nutzung (implizit)
- Die Erweiterung
XR_ANDROID_eye_trackingmuss aktiviert sein, bevor SieXrEyeANDROIDverwenden. eyeStatemuss ein gültigerXrEyeStateANDROID-Wert sein
Die Enumeration XrEyeStateANDROID gibt die verschiedenen Zustände der erfassten Augen an.
typedef enum XrEyeStateANDROID {
XR_EYE_STATE_INVALID_ANDROID = 0,
XR_EYE_STATE_GAZING_ANDROID = 1,
XR_EYE_STATE_SHUT_ANDROID = 2
} XrEyeStateANDROID;
Die Enums haben die folgenden Bedeutungen:
Enum |
Beschreibung |
|
Gibt an, dass sich das Auge in einem Fehlerstatus befindet oder nicht vorhanden ist. |
|
Gibt an, dass das Auge blickt. |
|
Gibt an, dass das Auge aufgrund eines Zwinkerns oder Blinzelns geschlossen ist. |
Die Enumeration XrEyeIndexANDROID gibt den Index des linken oder rechten Auges an.
typedef enum XrEyeIndexANDROID {
XR_EYE_INDEX_LEFT_ANDROID = 0,
XR_EYE_INDEX_RIGHT_ANDROID = 1
} XrEyeIndexANDROID;
Die Enums haben die folgenden Bedeutungen:
Enum |
Beschreibung |
|
Linkes Auge |
|
Rechtes Auge |
Die Enumeration XrEyeTrackingModeANDROID gibt die verschiedenen Modi der erfassten Augen an.
typedef enum XrEyeTrackingModeANDROID {
XR_EYE_TRACKING_MODE_NOT_TRACKING_ANDROID = 0,
XR_EYE_TRACKING_MODE_RIGHT_ANDROID = 1,
XR_EYE_TRACKING_MODE_LEFT_ANDROID = 2,
XR_EYE_TRACKING_MODE_BOTH_ANDROID = 3
} XrEyeTrackingModeANDROID;
Die Enums haben die folgenden Bedeutungen:
Enum |
Beschreibung |
|
Gibt an, dass das Eye-Tracking nicht aktiv ist. |
|
Gibt an, dass nur das rechte Auge erfasst wird. |
|
Gibt an, dass nur das linke Auge erfasst wird. |
|
Gibt an, dass sowohl das linke als auch das rechte Auge erfasst werden. |
Beispielcode für Eye-Tracking
Im folgenden Beispielcode wird gezeigt, wie Sie Informationen zu den Augen relativ zu einem Ansichtsbereich abrufen.
XrSession session; // previously initialized, e.g. created at app startup.
XrSpace viewSpace; // space created for XR_REFERENCE_SPACE_TYPE_VIEW.
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateEyeTrackerANDROID xrCreateEyeTrackerANDROID; // previously initialized
PFN_xrDestroyEyeTrackerANDROID xrDestroyEyeTrackerANDROID; // previously initialized
PFN_xrGetCoarseTrackingEyesInfoANDROID xrGetCoarseTrackingEyesInfoANDROID; // previously initialized
PFN_xrGetFineTrackingEyesInfoANDROID xrGetFineTrackingEyesInfoANDROID; // previously initialized
// This will use the XrSession that is bound to the eye tracker done at time of creation.
XrEyeTrackerANDROID eyeTracker;
XrEyeTrackerCreateInfoANDROID createInfo{
.type = XR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROID,
.next = nullptr};
CHK_XR(xrCreateEyeTrackerANDROID(session, &createInfo, &eyeTracker));
while (1) {
// ...
// For every frame in frame loop
// ...
XrFrameState frameState; // previously returned from xrWaitFrame
const XrTime time = frameState.predictedDisplayTime;
XrEyesANDROID fineEyesInfo{.type = XR_TYPE_EYES_ANDROID,
.next = nullptr,
.mode = XR_EYE_TRACKING_MODE_BOTH_ANDROID};
XrEyesANDROID coarseEyesInfo{.type = XR_TYPE_EYES_ANDROID,
.next = nullptr,
.mode = XR_EYE_TRACKING_MODE_BOTH_ANDROID};
XrEyesGetInfoANDROID eyesGetInfo{.type = XR_TYPE_EYES_GET_INFO_ANDROID,
.next = nullptr,
.time = time,
.baseSpace = viewSpace};
CHK_XR(xrGetCoarseTrackingEyesInfoANDROID(eyeTracker, &eyesGetInfo, &coarseEyesInfo));
CHK_XR(xrGetFineTrackingEyesInfoANDROID(eyeTracker, &eyesGetInfo, &fineEyesInfo));
// eyes tracking information is now available:
// drawLeftEye(eyesInfo.eyes[XR_EYE_INDEX_LEFT_ANDROID].eyePose);
// drawRightEye(eyesInfo.eyes[XR_EYE_INDEX_RIGHT_ANDROID].eyePose);
// ...
// Finish frame loop
// ...
}
// after usage
CHK_XR(xrDestroyEyeTrackerANDROID(eyeTracker));
Neue Objekttypen
Neue Enum-Konstanten
XR_EYE_MAX_ANDROID
Die Aufzählung XrObjectType wird um Folgendes erweitert:
XR_OBJECT_TYPE_EYE_TRACKER_ANDROID
Die Aufzählung XrStructureType wird um Folgendes erweitert:
XR_TYPE_EYES_ANDROIDXR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROIDXR_TYPE_EYES_GET_INFO_ANDROIDXR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROID
Neue Enums
Neue Strukturen
XrEyeANDROIDXrEyesANDROIDXrEyesGetInfoANDROIDXrEyeTrackerCreateInfoANDROIDXrSystemEyeTrackingPropertiesANDROID
Neue Funktionen
xrCreateEyeTrackerANDROIDxrDestroyEyeTrackerANDROIDxrGetCoarseTrackingEyesInfoANDROIDxrGetFineTrackingEyesInfoANDROID
Probleme
Versionsverlauf
- Version 1, 17.01.2025 (Kenny Vercaemer)
- 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.