Ciąg znaków nazwy
XR_ANDROID_eye_tracking
Typ rozszerzenia
Rozszerzenie instancji
Zarejestrowany numer wewnętrzny
457
Wersja
1
Zależności rozszerzeń i wersji
Data ostatniej modyfikacji
2025-01-17
Stan adresu IP
Brak znanych roszczeń do praw autorskich do treści objętych ochroną prawną.
Twórcy
Spencer Quin, Google
Jared Finder, Google
Levana Chen, Google
Kenny Vercaemer, Google
Prasanthi Gurumurthy, Google
Nihav Jain, Google
Omówienie
To rozszerzenie umożliwia aplikacjom uzyskanie pozycji i orientacji oczu użytkownika, a także stanu śledzenia wzroku.
Dane śledzenia wzroku są udostępniane w 2 trybach: ogólnym i dokładnym. Śledzenie o niskiej rozdzielczości zapewnia przybliżony obraz oczu użytkownika, natomiast śledzenie o wysokiej rozdzielczości zapewnia bardziej dokładne oszacowanie. Śledzenie za pomocą grubych punktów jest przeznaczone do aplikacji, które chcą wyświetlać podstawowe reprezentacje w postaci awatara, natomiast śledzenie za pomocą precyzyjnych punktów jest przeznaczone do bardziej precyzyjnych aplikacji.
W przypadku interakcji należy użyć wartości XR_EXT_eye_gaze_interaction.
Sprawdzanie możliwości systemu
Struktura XrSystemEyeTrackingPropertiesANDROID jest zdefiniowana w ten sposób:
typedef struct XrSystemEyeTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsEyeTracking;
} XrSystemEyeTrackingPropertiesANDROID;
Opisy członków
typetoXrStructureTypetej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktury. Nie ma żadnych takich struktur zdefiniowanych w podstawowej wersji OpenXR ani w tym rozszerzeniu.supportsEyeTrackingtoXrBool32, który wskazuje, czy bieżący system obsługuje śledzenie wzroku.
Aplikacja może sprawdzić, czy system jest w stanie śledzić ruch gałek ocznych, łącząc strukturę XrSystemEyeTrackingPropertiesANDROID z XrSystemProperties podczas wywoływania xrGetSystemProperties. Jeśli funkcja supportsEyeTracking zwróci wartość XR_FALSE, aplikacja otrzyma wartość XR_ERROR_FEATURE_UNSUPPORTED z xrCreateEyeTrackerANDROID.
Prawidłowe użycie (domyślne)
- Zanim zaczniesz korzystać z
XrSystemEyeTrackingPropertiesANDROID, musisz włączyć rozszerzenieXR_ANDROID_eye_tracking. typemusi byćXR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROIDnextmusi byćNULLlub prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur.
Tworzenie uchwytu śledzenia ruchów gałek ocznych
XR_DEFINE_HANDLE(XrEyeTrackerANDROID)
Uchwyt XrEyeTrackerANDROID reprezentuje śledzenie wzroku i dokładnie odwzorowuje to, na co patrzy użytkownik.
Dane śledzenia ruchem gałek ocznych mogą zawierać poufne dane osobowe i są ściśle powiązane z prywatnością i integralnością osoby. Zdecydowanie zalecamy, aby aplikacje, które przechowują lub przesyłają dane śledzenia ruchem gałek ocznych, zawsze prosiły użytkownika o aktywne i szczególne zaakceptowanie.
Za pomocą tego uchwytu można uzyskać dostęp do danych śledzenia wzroku za pomocą innych funkcji w tym rozszerzeniu.
Śledzenie wzroku zapewnia informacje o pozycji i stanie oczu w scenie.
Funkcja xrCreateEyeTrackerANDROID jest zdefiniowana w ten sposób:
XrResult xrCreateEyeTrackerANDROID(
XrSession session,
const XrEyeTrackerCreateInfoANDROID* createInfo,
XrEyeTrackerANDROID* eyeTracker);
Opisy parametrów
sessiontoXrSessionelement sterujący, w którym śledzenie wzroku będzie aktywne.createInfotoXrEyeTrackerCreateInfoANDROIDużywany do określania śledzenia ruchem gałek ocznych.eyeTrackerto zwrócony uchwytXrEyeTrackerANDROID.
Aplikacja może utworzyć XrEyeTrackerANDROIDza pomocą funkcji xrCreateEyeTrackerANDROID.
Jeśli system nie obsługuje śledzenia wzroku, XR_ERROR_FEATURE_UNSUPPORTED zostanie zwrócone z xrCreateEyeTrackerANDROID.
Prawidłowe użycie (domyślne)
- Przed wywołaniem funkcji
xrCreateEyeTrackerANDROIDmusi być włączone rozszerzenieXR_ANDROID_eye_tracking. sessionmusi być prawidłowym identyfikatoremXrSession.createInfomusi być wskaźnikiem do prawidłowej strukturyXrEyeTrackerCreateInfoANDROIDeyeTrackermusi być wskaźnikiem do uchwytuXrEyeTrackerANDROID
Kody zwracane
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
Struktura XrEyeTrackerCreateInfoANDROID jest zdefiniowana w ten sposób:
typedef struct XrEyeTrackerCreateInfoANDROID {
XrStructureType type;
void* next;
} XrEyeTrackerCreateInfoANDROID;
Opisy członków
typetoXrStructureTypetej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktury. Nie ma żadnych takich struktur zdefiniowanych w podstawowej wersji OpenXR ani w tym rozszerzeniu.
Struktura XrEyeTrackerCreateInfoANDROID zawiera informacje potrzebne do utworzenia identyfikatora XrEyeTrackerANDROID.
Prawidłowe użycie (domyślne)
- Zanim zaczniesz korzystać z
XrEyeTrackerCreateInfoANDROID, musisz włączyć rozszerzenieXR_ANDROID_eye_tracking. typemusi byćXR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROIDnextmusi byćNULLlub prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur.
Funkcja xrDestroyEyeTrackerANDROID jest zdefiniowana w ten sposób:
XrResult xrDestroyEyeTrackerANDROID(
XrEyeTrackerANDROID eyeTracker);
Opisy parametrów
eyeTrackertoXrEyeTrackerANDROIDutworzony wcześniej przezxrCreateEyeTrackerANDROID.
Funkcja xrDestroyEyeTrackerANDROID zwalnia eyeTracker i podstawowe zasoby po zakończeniu śledzenia ruchem gałek ocznych.
Prawidłowe użycie (domyślne)
- Zanim wywołasz funkcję
xrDestroyEyeTrackerANDROID, musisz włączyć rozszerzenieXR_ANDROID_eye_tracking. eyeTrackermusi być prawidłowym identyfikatoremXrEyeTrackerANDROID.
Bezpieczeństwo wątków
- Dostęp do
eyeTrackeri wszystkich jego uchwytów podrzędnych musi być zsynchronizowany zewnętrznie.
Kody zwracane
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
Pobieranie informacji o oczach
Funkcja xrGetCoarseTrackingEyesInfoANDROID jest zdefiniowana w ten sposób:
XrResult xrGetCoarseTrackingEyesInfoANDROID(
XrEyeTrackerANDROID eyeTracker,
const XrEyesGetInfoANDROID* getInfo,
XrEyesANDROID* eyesOutput);
Opisy parametrów
eyeTrackertoXrEyeTrackerANDROIDutworzony wcześniej przezxrCreateEyeTrackerANDROID.getInfoto wskaźnik do elementuXrEyesGetInfoANDROID, który służy do określania wymaganego wyjścia.infoOutputto wskaźnik doXrEyesANDROID, który zawiera zwrócone informacje o oczach, w tym pozy i stany.
Funkcja xrGetCoarseTrackingEyesInfoANDROID pobiera informacje o stanie i pozycji oczu w sposób, który chroni prywatność użytkownika.
Jeśli aplikacja nie ma uprawnień android.permission.EYE_TRACKING_COARSE, środowisko uruchomieniowe musi zwrócić wartość XR_ERROR_PERMISSION_INSUFFICIENT.
Informacje o oczach są rozwiązywane i odnoszą się do przestrzeni bazowej w momencie wywołania funkcji xrGetCoarseTrackingEyesInfoANDROID za pomocą funkcji XrEyesGetInfoANDROID::time, XrEyesGetInfoANDROID::baseSpace.
W dowolnym momencie można śledzić lub nie śledzić pozycję i kierunek spojrzenia. Oznacza to, że aplikacje mogą oczekiwać, że zarówno XR_SPACE_LOCATION_POSITION_TRACKED_BIT, jak i XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT będą ustawione lub wyczyszczone w podanych XrEyesANDROID::eyes, a XrEyesANDROID::mode będzie wskazywać stan śledzenia.
Prawidłowe użycie (domyślne)
- Zanim wywołasz funkcję
xrGetCoarseTrackingEyesInfoANDROID, musisz włączyć rozszerzenieXR_ANDROID_eye_tracking. eyeTrackermusi być prawidłowym identyfikatoremXrEyeTrackerANDROID.getInfomusi być wskaźnikiem do prawidłowej strukturyXrEyesGetInfoANDROIDeyesOutputmusi być wskaźnikiem do strukturyXrEyesANDROID.
Kody zwracane
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
Funkcja xrGetFineTrackingEyesInfoANDROID
jest zdefiniowana jako:
{:#xrGetFineTrackingEyesInfoANDROID}
C++
XrResult xrGetFineTrackingEyesInfoANDROID(
XrEyeTrackerANDROID eyeTracker,
const XrEyesGetInfoANDROID* getInfo,
XrEyesANDROID* eyesOutput);
Opisy parametrów
eyeTrackertoXrEyeTrackerANDROIDutworzony wcześniej przezxrCreateEyeTrackerANDROID.getInfoto wskaźnik do elementuXrEyesGetInfoANDROID, który służy do określania wymaganego wyjścia.infoOutputto wskaźnik doXrEyesANDROID, który zawiera zwrócone informacje o oczach, w tym pozy i stany. FunkcjaxrGetFineTrackingEyesInfoANDROIDuzyskuje informacje o stanach oczu i pozach z większą precyzją niż funkcjaxrGetCoarseTrackingEyesInfoANDROID.
Jeśli aplikacja nie ma uprawnień android.permission.EYE_TRACKING_FINE, środowisko uruchomieniowe musi zwrócić wartość XR_ERROR_PERMISSION_INSUFFICIENT.
Informacje o oczach są rozwiązywane i odnoszą się do przestrzeni bazowej w momencie wywołania funkcji xrGetFineTrackingEyesInfoANDROID za pomocą funkcji XrEyesGetInfoANDROID::time, XrEyesGetInfoANDROID::baseSpace.
W dowolnym momencie można śledzić lub nie śledzić pozycję i kierunek spojrzenia. Oznacza to, że aplikacje mogą oczekiwać, że zarówno XR_SPACE_LOCATION_POSITION_TRACKED_BIT, jak i XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT będą ustawione lub wyczyszczone w podanych XrEyesANDROID::eyes, a XrEyesANDROID::mode będzie wskazywać stan śledzenia.
Prawidłowe użycie (domyślne)
- Przed wywołaniem funkcji
xrGetFineTrackingEyesInfoANDROIDmusi być włączone rozszerzenieXR_ANDROID_eye_tracking. eyeTrackermusi być prawidłowym identyfikatoremXrEyeTrackerANDROID.getInfomusi być wskaźnikiem do prawidłowej strukturyXrEyesGetInfoANDROIDeyesOutputmusi być wskaźnikiem do strukturyXrEyesANDROID.
Kody zwracane
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
Struktura XrEyesGetInfoANDROID zawiera informacje wymagane do pobrania pozycji i stanów oczu.
typedef struct XrEyesGetInfoANDROID {
XrStructureType type;
void* next;
XrTime time;
XrSpace baseSpace;
} XrEyesGetInfoANDROID;
Opisy członków
typetoXrStructureTypetej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktury. Nie ma żadnych takich struktur zdefiniowanych w podstawowej wersji OpenXR ani w tym rozszerzeniu.timetoXrTime, w której współrzędne są obliczane względembaseSpace.baseSpacepozycja oczu będzie względna względem tegoXrSpacewtime.
Prawidłowe użycie (domyślne)
- Zanim zaczniesz korzystać z
XrEyesGetInfoANDROID, musisz włączyć rozszerzenieXR_ANDROID_eye_tracking. typemusi byćXR_TYPE_EYES_GET_INFO_ANDROIDnextmusi byćNULLlub prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur.baseSpacemusi być prawidłowym identyfikatoremXrSpace.
Struktura XrEyesANDROID zawiera informacje o śledzonych oczach.
typedef struct XrEyesANDROID {
XrStructureType type;
void* next;
XrEyeANDROID eyes[XR_EYE_MAX_ANDROID];
XrEyeTrackingModeANDROID mode;
} XrEyesANDROID;
Opisy członków
typetoXrStructureTypetej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktury. Nie ma żadnych takich struktur zdefiniowanych w podstawowej wersji OpenXR ani w tym rozszerzeniu.eyesto tablicaXrEyeANDROIDdla lewego i prawego oka posortowana wedługXrEyeIndexANDROID.modetoXrEyeTrackingModeANDROID, aby wskazać, czy oczy śledzą obiekt i które.
Prawidłowe użycie (domyślne)
- Zanim zaczniesz korzystać z
XrEyesANDROID, musisz włączyć rozszerzenieXR_ANDROID_eye_tracking. typemusi byćXR_TYPE_EYES_ANDROIDnextmusi byćNULLlub prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur.- Każdy element
eyesmusi być prawidłową strukturąXrEyeANDROID. modemusi mieć prawidłową wartośćXrEyeTrackingModeANDROID.
Struktura XrEyeANDROID opisuje stan, położenie i orientację oka.
typedef struct XrEyeANDROID {
XrEyeStateANDROID eyeState;
XrPosef eyePose;
} XrEyeANDROID;
Opisy członków
eyeStatetoXrEyeStateANDROIDoka.posetoXrPosefokreślający położenie i orientację początku oka w układzie odniesienia odpowiadającegoXrEyesGetInfoANDROID::baseSpace. Orientacja tożsamości reprezentuje układ współrzędnych z dodatnią osią Z skierowaną w kierunku oczu użytkownika, dodatnią osią X skierowaną w prawo i dodatnią osią Y skierowaną w górę.
Prawidłowe użycie (domyślne)
- Zanim zaczniesz korzystać z
XrEyeANDROID, musisz włączyć rozszerzenieXR_ANDROID_eye_tracking. eyeStatemusi mieć prawidłową wartośćXrEyeStateANDROID.
Wyliczenie XrEyeStateANDROID identyfikuje różne stany śledzonego oka.
typedef enum XrEyeStateANDROID {
XR_EYE_STATE_INVALID_ANDROID = 0,
XR_EYE_STATE_GAZING_ANDROID = 1,
XR_EYE_STATE_SHUT_ANDROID = 2
} XrEyeStateANDROID;
Wykazy te mają następujące znaczenia:
Wyliczenie |
Opis |
|
Wskazuje, że oko jest w stanie błędu lub nie jest obecne. |
|
Wskazuje, że oko patrzy. |
|
Wskazuje, że oko jest zamknięte z powodu mrugnięcia lub mrugnięcia okiem. |
Wyliczenie XrEyeIndexANDROID identyfikuje indeks lewego lub prawego oka.
typedef enum XrEyeIndexANDROID {
XR_EYE_INDEX_LEFT_ANDROID = 0,
XR_EYE_INDEX_RIGHT_ANDROID = 1
} XrEyeIndexANDROID;
Wykazy te mają następujące znaczenia:
Wyliczenie |
Opis |
|
Lewe oko. |
|
Prawe oko. |
Wyliczenie XrEyeTrackingModeANDROID identyfikuje różne tryby śledzenia oczu.
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;
Wykazy te mają następujące znaczenia:
Wyliczenie |
Opis |
|
Wskazuje, że śledzenie wzroku jest nieaktywne. |
|
Wskazuje, że śledzenie odbywa się tylko w przypadku prawego oka. |
|
Wskazuje, że śledzenie odbywa się tylko z użyciem lewego oka. |
|
Wskazuje, że śledzenie odbywa się zarówno lewym, jak i prawym okiem. |
Przykładowy kod do śledzenia ruchem gałek ocznych
Poniższy przykładowy kod pokazuje, jak uzyskać informacje o oczach w odniesieniu do przestrzeni widoku.
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));
Nowe typy obiektów
Nowe stałe typu wyliczeniowego
XR_EYE_MAX_ANDROID
Wyliczenie XrObjectType zostało rozszerzone o:
XR_OBJECT_TYPE_EYE_TRACKER_ANDROID
Wyliczenie XrStructureType zostało rozszerzone o:
XR_TYPE_EYES_ANDROIDXR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROIDXR_TYPE_EYES_GET_INFO_ANDROIDXR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROID
Nowe wartości w polu enum
Nowe struktury
XrEyeANDROIDXrEyesANDROIDXrEyesGetInfoANDROIDXrEyeTrackerCreateInfoANDROIDXrSystemEyeTrackingPropertiesANDROID
Nowe funkcje
xrCreateEyeTrackerANDROIDxrDestroyEyeTrackerANDROIDxrGetCoarseTrackingEyesInfoANDROIDxrGetFineTrackingEyesInfoANDROID
Problemy
Historia wersji
- Wersja 1, 17.01.2025 (Kenny Vercaemer)
- Wstępny opis rozszerzenia
OpenXR™ i logo OpenXR są znakami towarowymi należącymi do The Khronos Group Inc. i zarejestrowanymi jako znak towarowy w Chinach, Unii Europejskiej, Japonii i Wielkiej Brytanii.