XR_ANDROID_eye_tracking
Name String
XR_ANDROID_eye_tracking
Type d'extension
Extension d'instance
Numéro d'extension enregistré
457
Révision
1
État de la ratification
Non ratifié
Dépendances d'extension et de version
Date de dernière modification
2025-01-17
État de l'adresse IP
Aucune réclamation de propriété intellectuelle connue.
Participants
Spencer Quin, Google
Jared Finder, Google
Levana Chen, Google
Kenny Vercaemer, Google
Prasanthi Gurumurthy, Google
Nihav Jain, Google
Présentation
Cette extension permet aux applications d'obtenir la position et l'orientation des yeux de l'utilisateur, ainsi que l'état du suivi oculaire.
Les données de suivi oculaire sont fournies dans deux modes : approximatif et précis. Le suivi approximatif fournit une estimation approximative des yeux de l'utilisateur, tandis que le suivi précis fournit une estimation plus précise. Le suivi approximatif est destiné aux applications qui souhaitent fournir une représentation de base de type avatar, tandis que le suivi précis est destiné aux applications plus précises.
Pour l'interaction, XR_EXT_eye_gaze_interaction doit être utilisé.
Autorisations
Les applications Android doivent inclure l'autorisation android.permission.EYE_TRACKING_COARSE ou android.permission.EYE_TRACKING_FINE dans leur fichier manifeste. Ces autorisations sont considérées comme dangereuses. L'application doit demander l'autorisation au moment de l'exécution pour utiliser ces fonctions :
- xrCreateEyeTrackerANDROID (au moins l'une des autorisations)
- xrGetCoarseTrackingEyesInfoANDROID (android.permission.EYE_TRACKING_COARSE)
- xrGetFineTrackingEyesInfoANDROID (android.permission.EYE_TRACKING_FINE)
(niveau de protection : dangereux)
Inspecter les capacités du système
La structure XrSystemEyeTrackingPropertiesANDROID est définie comme suit :
typedef struct XrSystemEyeTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsEyeTracking;
} XrSystemEyeTrackingPropertiesANDROID;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures. Aucune structure de ce type n'est définie dans OpenXR de base ou dans cette extension.supportsEyeTrackingest unXrBool32indiquant si le système actuel est compatible avec le suivi oculaire.
Une application peut vérifier si le système est capable d'effectuer un suivi oculaire en étendant XrSystemProperties avec la structure XrSystemEyeTrackingPropertiesANDROID lors de l'appel de xrGetSystemProperties .
Si et seulement si un environnement d'exécution renvoie XR_FALSE pour supportsEyeTracking , l'environnement d'exécution doit renvoyer XR_ERROR_FEATURE_UNSUPPORTED à partir de xrCreateEyeTrackerANDROID .
Utilisation valide (implicite)
- L'extension
XR_ANDROID_eye_trackingdoit être activée avant d'utiliser XrSystemEyeTrackingPropertiesANDROID. -
typedoit êtreXR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROID -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures
Créer un handle de suivi oculaire
XR_DEFINE_HANDLE(XrEyeTrackerANDROID)
Le handle XrEyeTrackerANDROID représente un outil de suivi oculaire qui suit les yeux et cartographie précisément l'endroit où l'utilisateur regarde.
Les données de suivi oculaire sont des informations personnelles sensibles et sont étroitement liées à la confidentialité et à l'intégrité des données personnelles. Il est vivement recommandé que les applications qui stockent ou transfèrent des données de suivi oculaire demandent toujours à l'utilisateur d'accepter activement et spécifiquement cette opération.
L'application utilise ce handle pour accéder aux données de suivi oculaire à l'aide d'autres fonctions de cette extension.
Le suivi oculaire fournit une représentation de la pose et de l'état des yeux dans la scène.
La fonction xrCreateEyeTrackerANDROID est définie comme suit :
XrResult xrCreateEyeTrackerANDROID(
XrSession session,
const XrEyeTrackerCreateInfoANDROID* createInfo,
XrEyeTrackerANDROID* eyeTracker);
Description des paramètres
sessionest un handle XrSession dans lequel le suivi oculaire sera actif.createInfoest l'élément XrEyeTrackerCreateInfoANDROID utilisé pour spécifier le suivi oculaire.eyeTrackerest le handle XrEyeTrackerANDROID renvoyé.
Une application crée un handle XrEyeTrackerANDROID à l'aide de la fonction xrCreateEyeTrackerANDROID.
Si le système n'est pas compatible avec le suivi oculaire, l'environnement d'exécution doit renvoyer XR_ERROR_FEATURE_UNSUPPORTED à partir de xrCreateEyeTrackerANDROID .
Utilisation valide (implicite)
- L'extension
XR_ANDROID_eye_trackingdoit être activée avant d'appeler xrCreateEyeTrackerANDROID. -
sessiondoit être un handle XrSession valide -
createInfodoit être un pointeur vers une structure XrEyeTrackerCreateInfoANDROID valide. -
eyeTrackerdoit être un pointeur vers un handle XrEyeTrackerANDROID.
Codes renvoyés
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FEATURE_UNSUPPORTEDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
La structure XrEyeTrackerCreateInfoANDROID est définie comme suit :
typedef struct XrEyeTrackerCreateInfoANDROID {
XrStructureType type;
const void* next;
} XrEyeTrackerCreateInfoANDROID;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures. Aucune structure de ce type n'est définie dans OpenXR de base ou dans cette extension.
La structure XrEyeTrackerCreateInfoANDROID décrit les informations permettant de créer un handle XrEyeTrackerANDROID.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_eye_trackingdoit être activée avant d'utiliser XrEyeTrackerCreateInfoANDROID. -
typedoit êtreXR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROID -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures
La fonction xrDestroyEyeTrackerANDROID est définie comme suit :
XrResult xrDestroyEyeTrackerANDROID(
XrEyeTrackerANDROID eyeTracker);
Description des paramètres
eyeTrackerest un XrEyeTrackerANDROID précédemment créé par xrCreateEyeTrackerANDROID .
La fonction xrDestroyEyeTrackerANDROID libère le eyeTracker et les ressources sous-jacentes lorsque les expériences de suivi oculaire sont terminées.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_eye_trackingdoit être activée avant d'appeler xrDestroyEyeTrackerANDROID. -
eyeTrackerdoit être un handle XrEyeTrackerANDROID valide
Thread safety
- L'accès à
eyeTrackeret à tous les handles enfants doit être synchronisé en externe.
Codes renvoyés
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Obtenir des informations sur les yeux
La fonction xrGetCoarseTrackingEyesInfoANDROID est définie comme suit :
XrResult xrGetCoarseTrackingEyesInfoANDROID(
XrEyeTrackerANDROID eyeTracker,
const XrEyesGetInfoANDROID* getInfo,
XrEyesANDROID* eyesOutput);
Description des paramètres
eyeTrackerest un XrEyeTrackerANDROID précédemment créé par xrCreateEyeTrackerANDROID .getInfoest un pointeur vers XrEyesGetInfoANDROID utilisé pour fournir des informations permettant d'interroger les poses et les états des yeux.eyesOutputest un pointeur vers XrEyesANDROID qui contient les informations renvoyées sur les yeux, y compris les poses et les états.
La fonction xrGetCoarseTrackingEyesInfoANDROID obtient les informations sur l'état et la position des yeux d'une manière qui préserve la confidentialité de l'utilisateur.
L'environnement d'exécution doit renvoyer XR_ERROR_PERMISSION_INSUFFICIENT si l'application ne dispose pas de l'autorisation android.permission.EYE_TRACKING_COARSE.
Les poses des yeux sont exprimées dans XrEyesGetInfoANDROID :: baseSpace à XrEyesGetInfoANDROID :: time .
À tout moment, la position et la direction de la pose des yeux sont suivies ou non. Cela signifie que l'environnement d'exécution doit définir à la fois XR_SPACE_LOCATION_POSITION_TRACKED_BIT et XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT ou effacer à la fois XR_SPACE_LOCATION_POSITION_TRACKED_BIT et XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT sur l'XrEyesANDROID :: eyes fourni, et définir XrEyesANDROID :: mode pour indiquer les états de suivi.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_eye_trackingdoit être activée avant d'appeler xrGetCoarseTrackingEyesInfoANDROID. -
eyeTrackerdoit être un handle XrEyeTrackerANDROID valide -
getInfodoit être un pointeur vers une structure XrEyesGetInfoANDROID valide -
eyesOutputdoit être un pointeur vers une structure XrEyesANDROID.
Codes renvoyés
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
La fonction xrGetFineTrackingEyesInfoANDROID est définie comme suit :
XrResult xrGetFineTrackingEyesInfoANDROID(
XrEyeTrackerANDROID eyeTracker,
const XrEyesGetInfoANDROID* getInfo,
XrEyesANDROID* eyesOutput);
Description des paramètres
eyeTrackerest un XrEyeTrackerANDROID précédemment créé par xrCreateEyeTrackerANDROID .getInfoest un pointeur vers XrEyesGetInfoANDROID utilisé pour spécifier la sortie requise.eyesOutputest un pointeur vers XrEyesANDROID qui contient les informations renvoyées sur les yeux, y compris les poses et les états.
La fonction xrGetFineTrackingEyesInfoANDROID obtient des informations sur l'état et la position des yeux avec une précision supérieure à celle de xrGetCoarseTrackingEyesInfoANDROID .
L'environnement d'exécution doit renvoyer XR_ERROR_PERMISSION_INSUFFICIENT si l'application ne dispose pas de l'autorisation android.permission.EYE_TRACKING_FINE.
Les informations sur les yeux sont résolues et relatives à l'espace de base au moment de l'appel à xrGetFineTrackingEyesInfoANDROID à l'aide de XrEyesGetInfoANDROID :: time , XrEyesGetInfoANDROID :: baseSpace . L'environnement d'exécution doit résoudre l'emplacement défini par XrEyesGetInfoANDROID :: baseSpace au moment de l'appel.
À tout moment, la position et la direction de la pose des yeux sont suivies ou non. Cela signifie que l'environnement d'exécution doit définir à la fois XR_SPACE_LOCATION_POSITION_TRACKED_BIT et XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT ou effacer à la fois XR_SPACE_LOCATION_POSITION_TRACKED_BIT et XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT sur l'XrEyesANDROID :: eyes fourni, et définir XrEyesANDROID :: mode pour indiquer les états de suivi.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_eye_trackingdoit être activée avant d'appeler xrGetFineTrackingEyesInfoANDROID. -
eyeTrackerdoit être un handle XrEyeTrackerANDROID valide -
getInfodoit être un pointeur vers une structure XrEyesGetInfoANDROID valide -
eyesOutputdoit être un pointeur vers une structure XrEyesANDROID.
Codes renvoyés
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
La structure XrEyesGetInfoANDROID contient les informations requises pour récupérer les positions et les états des yeux.
typedef struct XrEyesGetInfoANDROID {
XrStructureType type;
const void* next;
XrTime time;
XrSpace baseSpace;
} XrEyesGetInfoANDROID;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures. Aucune structure de ce type n'est définie dans OpenXR de base ou dans cette extension.timeest l'XrTimeauquel évaluer les coordonnées par rapport à l'baseSpace.baseSpaceest l'XrSpace dans lequel renvoyer les poses des yeux.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_eye_trackingdoit être activée avant d'utiliser XrEyesGetInfoANDROID. -
typedoit êtreXR_TYPE_EYES_GET_INFO_ANDROID -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures -
baseSpacedoit être un handle XrSpace valide
La structure XrEyesANDROID contient des informations sur les yeux suivis.
typedef struct XrEyesANDROID {
XrStructureType type;
void* next;
XrEyeANDROID eyes[XR_EYE_MAX_ANDROID];
XrEyeTrackingModeANDROID mode;
} XrEyesANDROID;
Descriptions des membres
typeest le XrStructureType de cette structure.nextestNULLou un pointeur vers la structure suivante dans une chaîne de structures. Aucune structure de ce type n'est définie dans OpenXR de base ou dans cette extension.eyesest un tableau de XrEyeANDROID, de tailleXR_EYE_MAX_ANDROID, pour les yeux gauche et droit, indexé par XrEyeIndexANDROID .modeest le XrEyeTrackingModeANDROID indiquant quel œil est actuellement suivi.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_eye_trackingdoit être activée avant d'utiliser XrEyesANDROID. -
typedoit êtreXR_TYPE_EYES_ANDROID -
nextdoit êtreNULLou un pointeur valide vers la structure suivante dans une chaîne de structures - Tout élément donné de
eyesdoit être une structure XrEyeANDROID valide. -
modedoit être une valeur XrEyeTrackingModeANDROID valide
La structure XrEyeANDROID décrit l'état, la position et l'orientation d'un œil.
typedef struct XrEyeANDROID {
XrEyeStateANDROID eyeState;
XrPosef eyePose;
} XrEyeANDROID;
Descriptions des membres
eyeStateest l'XrEyeStateANDROID d'un œil.eyePoseest un XrPosef définissant la position et l'orientation de la pupille d'un œil dans le cadre de référence du XrEyesGetInfoANDROID ::baseSpacecorrespondant. Une orientation d'identité représente ici un axe de coordonnées avec +Z dans les yeux de l'utilisateur, +X vers la droite et +Y vers le haut.
Utilisation valide (implicite)
- L'extension
XR_ANDROID_eye_trackingdoit être activée avant d'utiliser XrEyeANDROID. -
eyeStatedoit être une valeur XrEyeStateANDROID valide
L'énumération XrEyeStateANDROID identifie les différents états des yeux suivis.
typedef enum XrEyeStateANDROID {
XR_EYE_STATE_INVALID_ANDROID = 0,
XR_EYE_STATE_GAZING_ANDROID = 1,
XR_EYE_STATE_SHUT_ANDROID = 2,
XR_EYE_STATE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrEyeStateANDROID;
Les énumérations ont les significations suivantes :
Description de l'enum
XR_EYE_STATE_INVALID_ANDROID
Indique que l'œil est dans un état d'erreur ou n'est pas présent.
XR_EYE_STATE_GAZING_ANDROID
Indique que l'œil est actuellement en train de fixer un point.
XR_EYE_STATE_SHUT_ANDROID
Indique que l'œil est actuellement fermé en raison d'un clin d'œil ou d'un clignement.
L'énumération XrEyeIndexANDROID identifie l'index de l'œil gauche ou droit.
typedef enum XrEyeIndexANDROID {
XR_EYE_INDEX_LEFT_ANDROID = 0,
XR_EYE_INDEX_RIGHT_ANDROID = 1,
XR_EYE_INDEX_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrEyeIndexANDROID;
Les énumérations ont les significations suivantes :
Description de l'enum
XR_EYE_INDEX_LEFT_ANDROID
Œil gauche.
XR_EYE_INDEX_RIGHT_ANDROID
Œil droit.
L'énumération XrEyeTrackingModeANDROID identifie les différents états des yeux suivis.
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,
XR_EYE_TRACKING_MODE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrEyeTrackingModeANDROID;
Les énumérations ont les significations suivantes :
Description de l'enum
XR_EYE_TRACKING_MODE_NOT_TRACKING_ANDROID
Indique que le suivi oculaire n'est pas actif actuellement.
XR_EYE_TRACKING_MODE_RIGHT_ANDROID
Indique que seul l'œil droit est suivi.
XR_EYE_TRACKING_MODE_LEFT_ANDROID
Indique que seul l'œil gauche est suivi.
XR_EYE_TRACKING_MODE_BOTH_ANDROID
Indique que les yeux gauche et droit sont suivis.
#define XR_EYE_MAX_ANDROID 2
XR_EYE_MAX_ANDROID est le nombre maximal d'yeux pour lesquels les données XrEyeANDROID sont signalées.
Exemple de code pour le suivi oculaire
L'exemple de code suivant montre comment obtenir des informations sur les yeux par rapport à un espace de vue.
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));
Nouveaux types d'objets
Nouvelles commandes
- xrCreateEyeTrackerANDROID
- xrDestroyEyeTrackerANDROID
- xrGetCoarseTrackingEyesInfoANDROID
- xrGetFineTrackingEyesInfoANDROID
Nouvelles structures
- XrEyeANDROID
- XrEyeTrackerCreateInfoANDROID
- XrEyesANDROID
- XrEyesGetInfoANDROID
Extension de XrSystemProperties :
Nouvelles énumérations
Nouvelles constantes d'énumération
XR_ANDROID_EYE_TRACKING_EXTENSION_NAMEXR_ANDROID_eye_tracking_SPEC_VERSIONXR_EYE_MAX_ANDROIDExtension de XrObjectType :
XR_OBJECT_TYPE_EYE_TRACKER_ANDROID
Extension de XrStructureType :
XR_TYPE_EYES_ANDROIDXR_TYPE_EYES_GET_INFO_ANDROIDXR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROIDXR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROID
Problèmes
Historique des versions
Révision 1, 17/01/2025 (Kenny Vercaemer)
- Description initiale de l'extension