Stringa del nome
XR_ANDROID_eye_tracking
Tipo di estensione
Estensione dell'istanza
Numero di interno registrato
457
Revisione
1
Dipendenze da estensioni e versioni
Data ultima modifica
2025-01-17
Stato IP
Nessuna rivendicazione di proprietà intellettuale nota.
Collaboratori
Spencer Quin, Google
Jared Finder, Google
Levana Chen, Google
Kenny Vercaemer, Google
Prasanthi Gurumurthy, Google
Nihav Jain, Google
Panoramica
Questa estensione consente alle applicazioni di ottenere la posizione e l'orientamento degli occhi dell'utente, nonché lo stato dell'eye tracking.
I dati di eye tracking vengono forniti in due modalità: grossolana e precisa. Il monitoraggio approssimativo fornisce una stima approssimativa degli occhi dell'utente, mentre il monitoraggio preciso fornisce una stima più accurata. Il tracciamento approssimativo è destinato alle applicazioni che vogliono fornire una rappresentazione di base simile a un avatar, mentre il tracciamento preciso è destinato alle applicazioni più precise.
Per
l'interazione, XR_EXT_eye_gaze_interaction deve essere utilizzato.
Ispezionare la funzionalità del sistema
La struttura XrSystemEyeTrackingPropertiesANDROID è definita come:
typedef struct XrSystemEyeTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsEyeTracking;
} XrSystemEyeTrackingPropertiesANDROID;
Descrizioni dei membri
typeè l'XrStructureTypedi questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture. Nessuna struttura di questo tipo è definita in OpenXR di base o in questa estensione.supportsEyeTrackingè unXrBool32, che indica se il sistema attuale supporta l'eye tracking.
Un'applicazione può verificare se il sistema è in grado di tracciare il movimento degli occhi concatenando una struttura XrSystemEyeTrackingPropertiesANDROID a XrSystemProperties quando chiama xrGetSystemProperties. Se
supportsEyeTracking restituisce XR_FALSE, un'applicazione riceverà
XR_ERROR_FEATURE_UNSUPPORTED da xrCreateEyeTrackerANDROID.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_eye_trackingdeve essere attivata prima di utilizzareXrSystemEyeTrackingPropertiesANDROID typedeve essereXR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROIDnextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture
Creare un handle per il tracker oculare
XR_DEFINE_HANDLE(XrEyeTrackerANDROID)
L'handle XrEyeTrackerANDROID rappresenta un eye tracker per il monitoraggio degli occhi
e mappa con precisione ciò che l'utente sta guardando.
I dati di tracciamento oculare possono essere informazioni personali sensibili e sono strettamente collegati all'integrità e alla privacy personali. È consigliabile che le applicazioni che memorizzano o trasferiscono i dati di eye tracking chiedano sempre all'utente l'accettazione attiva e specifica per farlo.
Questo handle può essere utilizzato per accedere ai dati di eye tracking utilizzando altre funzioni di questa estensione.
L'eye tracking fornisce la rappresentazione della postura e dello stato degli occhi nella scena.
La funzione xrCreateEyeTrackerANDROID è definita
come:
XrResult xrCreateEyeTrackerANDROID(
XrSession session,
const XrEyeTrackerCreateInfoANDROID* createInfo,
XrEyeTrackerANDROID* eyeTracker);
Descrizioni dei parametri
sessionè un handleXrSessionin cui l'eye tracking sarà attivo.createInfoè ilXrEyeTrackerCreateInfoANDROIDutilizzato per specificare l'eye tracking.eyeTrackerè l'handleXrEyeTrackerANDROIDrestituito.
Un'applicazione può creare un handle XrEyeTrackerANDROID utilizzando la funzione
xrCreateEyeTrackerANDROID.
Se il sistema non supporta il monitoraggio oculare, XR_ERROR_FEATURE_UNSUPPORTED
verrà restituito da xrCreateEyeTrackerANDROID.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_eye_trackingdeve essere attivata prima di chiamarexrCreateEyeTrackerANDROID sessiondeve essere un handleXrSessionvalidocreateInfodeve essere un puntatore a una strutturaXrEyeTrackerCreateInfoANDROIDvalidaeyeTrackerdeve essere un puntatore a un handleXrEyeTrackerANDROID
Codici di ritorno
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
La struttura XrEyeTrackerCreateInfoANDROID è definita come:
typedef struct XrEyeTrackerCreateInfoANDROID {
XrStructureType type;
void* next;
} XrEyeTrackerCreateInfoANDROID;
Descrizioni dei membri
typeè l'XrStructureTypedi questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture. Nessuna struttura di questo tipo è definita in OpenXR di base o in questa estensione.
La struttura XrEyeTrackerCreateInfoANDROID descrive le informazioni per
creare un handle XrEyeTrackerANDROID.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_eye_trackingdeve essere attivata prima di utilizzareXrEyeTrackerCreateInfoANDROID typedeve essereXR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROIDnextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture
La funzione xrDestroyEyeTrackerANDROID è definita come:
XrResult xrDestroyEyeTrackerANDROID(
XrEyeTrackerANDROID eyeTracker);
Descrizioni dei parametri
eyeTrackerè unXrEyeTrackerANDROIDcreato in precedenza daxrCreateEyeTrackerANDROID.
La funzione xrDestroyEyeTrackerANDROID rilascia eyeTracker e le
risorse sottostanti al termine delle esperienze di eye tracking.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_eye_trackingdeve essere attivata prima di chiamarexrDestroyEyeTrackerANDROID eyeTrackerdeve essere un handleXrEyeTrackerANDROIDvalido.
Thread Safety
- L'accesso a
eyeTrackere a tutti gli handle secondari deve essere sincronizzato esternamente
Codici di ritorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
Recupero delle informazioni sugli occhi
La funzione xrGetCoarseTrackingEyesInfoANDROID è definita come:
XrResult xrGetCoarseTrackingEyesInfoANDROID(
XrEyeTrackerANDROID eyeTracker,
const XrEyesGetInfoANDROID* getInfo,
XrEyesANDROID* eyesOutput);
Descrizioni dei parametri
eyeTrackerè unXrEyeTrackerANDROIDcreato in precedenza daxrCreateEyeTrackerANDROID.getInfoè un puntatore aXrEyesGetInfoANDROIDutilizzato per specificare l'output richiesto.infoOutputè un puntatore aXrEyesANDROIDche contiene le informazioni sugli occhi restituite, tra cui pose e stati.
La funzione xrGetCoarseTrackingEyesInfoANDROID recupera le informazioni sugli stati e sulle pose degli occhi in modo da preservare la privacy dell'utente.
Il runtime deve restituire XR_ERROR_PERMISSION_INSUFFICIENT se l'applicazione
non dispone dell'autorizzazione android.permission.EYE_TRACKING_COARSE.
Le informazioni sugli occhi vengono risolte e sono relative allo spazio di base al momento della
chiamata a xrGetCoarseTrackingEyesInfoANDROID utilizzando
XrEyesGetInfoANDROID::time, XrEyesGetInfoANDROID::baseSpace.
In qualsiasi momento, la posizione e la direzione della posa degli occhi vengono tracciate
o non tracciate. Ciò significa che le applicazioni possono prevedere che XR_SPACE_LOCATION_POSITION_TRACKED_BIT e XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT vengano impostati o cancellati in XrEyesANDROID::eyes fornito e che XrEyesANDROID::mode indichi gli stati di monitoraggio.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_eye_trackingdeve essere attivata prima di chiamarexrGetCoarseTrackingEyesInfoANDROID eyeTrackerdeve essere un handleXrEyeTrackerANDROIDvalidogetInfodeve essere un puntatore a una strutturaXrEyesGetInfoANDROIDvalidaeyesOutputdeve essere un puntatore a una strutturaXrEyesANDROID
Codici di ritorno
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
La funzione xrGetFineTrackingEyesInfoANDROID
è definita come:
XrResult xrGetFineTrackingEyesInfoANDROID(
XrEyeTrackerANDROID eyeTracker,
const XrEyesGetInfoANDROID* getInfo,
XrEyesANDROID* eyesOutput);
Descrizioni dei parametri
eyeTrackerè unXrEyeTrackerANDROIDcreato in precedenza daxrCreateEyeTrackerANDROID.getInfoè un puntatore aXrEyesGetInfoANDROIDutilizzato per specificare l'output richiesto.infoOutputè un puntatore aXrEyesANDROIDche contiene le informazioni sugli occhi restituite, tra cui pose e stati. La funzionexrGetFineTrackingEyesInfoANDROIDrecupera le informazioni sugli stati degli occhi e sulle pose con una precisione maggiore rispetto axrGetCoarseTrackingEyesInfoANDROID.
Il runtime deve restituire XR_ERROR_PERMISSION_INSUFFICIENT se l'applicazione
non dispone dell'autorizzazione android.permission.EYE_TRACKING_FINE.
Le informazioni sugli occhi vengono risolte e sono relative allo spazio di base al momento della
chiamata a xrGetFineTrackingEyesInfoANDROID utilizzando
XrEyesGetInfoANDROID::time, XrEyesGetInfoANDROID::baseSpace.
In qualsiasi momento, la posizione e la direzione della posa degli occhi vengono tracciate
o non tracciate. Ciò significa che le applicazioni possono prevedere che XR_SPACE_LOCATION_POSITION_TRACKED_BIT e XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT vengano impostati o cancellati in XrEyesANDROID::eyes fornito e che XrEyesANDROID::mode indichi gli stati di monitoraggio.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_eye_trackingdeve essere attivata prima di chiamarexrGetFineTrackingEyesInfoANDROID eyeTrackerdeve essere un handleXrEyeTrackerANDROIDvalidogetInfodeve essere un puntatore a una strutturaXrEyesGetInfoANDROIDvalidaeyesOutputdeve essere un puntatore a una strutturaXrEyesANDROID
Codici di ritorno
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
La struttura XrEyesGetInfoANDROID contiene le informazioni necessarie per
recuperare le pose e gli stati degli occhi.
typedef struct XrEyesGetInfoANDROID {
XrStructureType type;
void* next;
XrTime time;
XrSpace baseSpace;
} XrEyesGetInfoANDROID;
Descrizioni dei membri
typeè l'XrStructureTypedi questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture. Nessuna struttura di questo tipo è definita in OpenXR di base o in questa estensione.timeè ilXrTimein cui valutare le coordinate rispetto abaseSpace.baseSpacela posa degli occhi sarà relativa a questoXrSpacealle oretime.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_eye_trackingdeve essere attivata prima di utilizzareXrEyesGetInfoANDROID typedeve essereXR_TYPE_EYES_GET_INFO_ANDROIDnextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutturebaseSpacedeve essere un handleXrSpacevalido
La struttura XrEyesANDROID contiene informazioni sugli occhi tracciati.
typedef struct XrEyesANDROID {
XrStructureType type;
void* next;
XrEyeANDROID eyes[XR_EYE_MAX_ANDROID];
XrEyeTrackingModeANDROID mode;
} XrEyesANDROID;
Descrizioni dei membri
typeè l'XrStructureTypedi questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture. Nessuna struttura di questo tipo è definita in OpenXR di base o in questa estensione.eyesè un array diXrEyeANDROIDper l'occhio sinistro e destro, indicizzato daXrEyeIndexANDROID.modeè ilXrEyeTrackingModeANDROIDper indicare se gli occhi vengono tracciati e quali.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_eye_trackingdeve essere attivata prima di utilizzareXrEyesANDROID typedeve essereXR_TYPE_EYES_ANDROIDnextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture- Ogni elemento di
eyesdeve essere una strutturaXrEyeANDROIDvalida modedeve essere un valoreXrEyeTrackingModeANDROIDvalido
La struttura XrEyeANDROID descrive lo stato, la posizione e l'orientamento di un
occhio.
typedef struct XrEyeANDROID {
XrEyeStateANDROID eyeState;
XrPosef eyePose;
} XrEyeANDROID;
Descrizioni dei membri
eyeStateè l'XrEyeStateANDROIDdi un occhio.poseè unaXrPosefche definisce la posizione e l'orientamento dell'origine di un occhio all'interno del sistema di riferimento del corrispondenteXrEyesGetInfoANDROID::baseSpace. L'orientamento dell'identità qui rappresenta un sistema di coordinate con +Z verso gli occhi dell'utente, +X a destra e +Y in alto.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_eye_trackingdeve essere attivata prima di utilizzareXrEyeANDROID eyeStatedeve essere un valoreXrEyeStateANDROIDvalido
L'enumerazione XrEyeStateANDROID identifica i diversi stati degli occhi tracciati.
typedef enum XrEyeStateANDROID {
XR_EYE_STATE_INVALID_ANDROID = 0,
XR_EYE_STATE_GAZING_ANDROID = 1,
XR_EYE_STATE_SHUT_ANDROID = 2
} XrEyeStateANDROID;
Gli enum hanno i seguenti significati:
Enum |
Descrizione |
|
Indica che l'occhio è in stato di errore o non è presente. |
|
Indica che l'occhio sta fissando. |
|
Indica che l'occhio è chiuso a causa di un'occhiata o di un battito di ciglia. |
L'enumerazione XrEyeIndexANDROID identifica l'indice dell'occhio sinistro o
destro.
typedef enum XrEyeIndexANDROID {
XR_EYE_INDEX_LEFT_ANDROID = 0,
XR_EYE_INDEX_RIGHT_ANDROID = 1
} XrEyeIndexANDROID;
Gli enum hanno i seguenti significati:
Enum |
Descrizione |
|
Occhio sinistro. |
|
Occhio destro. |
L'enumerazione XrEyeTrackingModeANDROID identifica le diverse modalità di
occhi tracciati.
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;
Gli enum hanno i seguenti significati:
Enum |
Descrizione |
|
Indica che il monitoraggio oculare non è attivo. |
|
Indica che viene monitorato solo l'occhio destro. |
|
Indica che viene monitorato solo l'occhio sinistro. |
|
Indica che entrambi gli occhi, il sinistro e il destro, vengono tracciati. |
Codice di esempio per l'eye tracking
Il seguente codice di esempio mostra come ottenere informazioni sugli occhi rispetto a uno spazio di visualizzazione.
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));
Nuovi tipi di oggetti
Nuove costanti di enumerazione
XR_EYE_MAX_ANDROID
L'enumerazione XrObjectType è estesa con:
XR_OBJECT_TYPE_EYE_TRACKER_ANDROID
L'enumerazione XrStructureType è estesa con:
XR_TYPE_EYES_ANDROIDXR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROIDXR_TYPE_EYES_GET_INFO_ANDROIDXR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROID
Nuovi enum
Nuove strutture
XrEyeANDROIDXrEyesANDROIDXrEyesGetInfoANDROIDXrEyeTrackerCreateInfoANDROIDXrSystemEyeTrackingPropertiesANDROID
Nuove funzioni
xrCreateEyeTrackerANDROIDxrDestroyEyeTrackerANDROIDxrGetCoarseTrackingEyesInfoANDROIDxrGetFineTrackingEyesInfoANDROID
Problemi
Cronologia delle versioni
- Revisione 1, 17/01/2025 (Kenny Vercaemer)
- Descrizione iniziale dell'estensione
OpenXR™ e il logo OpenXR sono marchi di proprietà di The Khronos Group Inc. e sono registrati come marchi in Cina, nell'Unione Europea, in Giappone e nel Regno Unito.