מחרוזת שם
XR_ANDROID_eye_tracking
סוג התוסף
Instance extension
מספר שלוחה רשום
457
Revision
1
תלות בתוסף ובגרסה
תאריך השינוי האחרון
2025-01-17
סטטוס כתובת ה-IP
אין תלונות ידועות על הפרת זכויות יוצרים שקשורות לכתובות IP.
שותפים ביצירת התוכן
ספנסר קווין, Google
Jared Finder, Google
לבנה צ'ן, Google
Kenny Vercaemer, Google
Prasanthi Gurumurthy, Google
Nihav Jain, Google
סקירה כללית
התוסף הזה מאפשר לאפליקציות לקבל את המיקום והכיוון של העיניים של המשתמש, וגם את סטטוס מעקב העיניים.
נתוני מעקב העיניים מסופקים בשני מצבים: גס ומדויק. מעקב גס מספק הערכה גסה של מיקום העיניים של המשתמש, ומעקב מדויק מספק הערכה מדויקת יותר. מעקב גס מיועד לאפליקציות שרוצות לספק ייצוג בסיסי דמוי אווטאר, ומעקב מדויק מיועד לאפליקציות מדויקות יותר.
למטרת אינטראקציה, XR_EXT_eye_gaze_interaction צריך לשמש.
בדיקת יכולות המערכת
המבנה של XrSystemEyeTrackingPropertiesANDROID מוגדר כך:
typedef struct XrSystemEyeTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsEyeTracking;
} XrSystemEyeTrackingPropertiesANDROID;
תיאורי חברים
typeהואXrStructureTypeשל המבנה הזה.-
nextהואNULLאו מצביע למבנה הבא בשרשרת המבנים. לא מוגדרים מבנים כאלה ב-OpenXR הליבה או בתוסף הזה. -
supportsEyeTrackingהואXrBool32, שמציין אם המערכת הנוכחית תומכת במעקב עיניים.
אפליקציה יכולה לבדוק אם המערכת מסוגלת לעקוב אחרי תנועות העיניים על ידי שרשור מבנה XrSystemEyeTrackingPropertiesANDROID אל XrSystemProperties כשמתקשרים אל xrGetSystemProperties. אם הפונקציה
supportsEyeTracking מחזירה XR_FALSE, האפליקציה תקבל
XR_ERROR_FEATURE_UNSUPPORTED מ-xrCreateEyeTrackerANDROID.
שימוש תקף (מרומז)
XR_ANDROID_eye_trackingהתוסף חייב להיות מופעל לפני השימוש ב-XrSystemEyeTrackingPropertiesANDROID- הערך של
typeחייב להיותXR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROID - הערך
nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת מבנים
יצירת כינוי למעקב אחרי תנועות העיניים
XR_DEFINE_HANDLE(XrEyeTrackerANDROID)
ה-handle XrEyeTrackerANDROID מייצג חיישן תנועות עיניים (eye tracker) למעקב אחרי העיניים, וממפה בצורה מדויקת את מה שהמשתמש מסתכל עליו.
נתונים של מעקב אחרי תנועות עיניים יכולים להיות מידע אישי רגיש, והם קשורים קשר הדוק לפרטיות ולשלמות האישית. מומלץ מאוד שאפליקציות שמאחסנות או מעבירות נתונים של מעקב אחרי תנועות עיניים יבקשו מהמשתמשים תמיד הסכמה פעילה וספציפית לעשות זאת.
אפשר להשתמש בנקודת האחיזה הזו כדי לגשת לנתוני מעקב אחרי תנועות העיניים באמצעות פונקציות אחרות בתוסף הזה.
מעקב העיניים מספק ייצוג של תנוחת העיניים והסטטוס שלהן בסצנה.
הפונקציה xrCreateEyeTrackerANDROID מוגדרת כך:
XrResult xrCreateEyeTrackerANDROID(
XrSession session,
const XrEyeTrackerCreateInfoANDROID* createInfo,
XrEyeTrackerANDROID* eyeTracker);
תיאורים של פרמטרים
-
sessionהוא שם משתמש ב-XrSessionשבו המעקב אחרי תנועות העיניים יהיה פעיל. -
createInfoהואXrEyeTrackerCreateInfoANDROIDשמשמש לציון מעקב העיניים. -
eyeTrackerהוא ה-handle שלXrEyeTrackerANDROIDשמוחזר.
אפליקציה יכולה ליצור נקודת אחיזה של XrEyeTrackerANDROID באמצעות הפונקציה xrCreateEyeTrackerANDROID.
אם המערכת לא תומכת במעקב אחרי תנועות העיניים, הפונקציה XR_ERROR_FEATURE_UNSUPPORTED
תחזיר את הערך xrCreateEyeTrackerANDROID.
שימוש תקף (מרומז)
XR_ANDROID_eye_trackingהתוסף חייב להיות מופעל לפני הקריאה אלxrCreateEyeTrackerANDROIDsessionחייב להיות כינויXrSessionתקיןcreateInfomust be a pointer to a validXrEyeTrackerCreateInfoANDROIDstructureeyeTrackerחייב להיות מצביע לכינויXrEyeTrackerANDROID
קודי החזרה
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
המבנה של XrEyeTrackerCreateInfoANDROID מוגדר כך:
typedef struct XrEyeTrackerCreateInfoANDROID {
XrStructureType type;
void* next;
} XrEyeTrackerCreateInfoANDROID;
תיאורי חברים
typeהואXrStructureTypeשל המבנה הזה.-
nextהואNULLאו מצביע למבנה הבא בשרשרת המבנים. לא מוגדרים מבנים כאלה ב-OpenXR הליבה או בתוסף הזה.
המבנה של XrEyeTrackerCreateInfoANDROID מתאר את המידע שנדרש כדי ליצור כתובת XrEyeTrackerANDROID.
שימוש תקף (מרומז)
XR_ANDROID_eye_trackingהתוסף חייב להיות מופעל לפני השימוש ב-XrEyeTrackerCreateInfoANDROID- הערך של
typeחייב להיותXR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROID - הערך
nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת מבנים
הפונקציה xrDestroyEyeTrackerANDROID מוגדרת כך:
XrResult xrDestroyEyeTrackerANDROID(
XrEyeTrackerANDROID eyeTracker);
תיאורים של פרמטרים
-
eyeTrackerהואXrEyeTrackerANDROIDשנוצר בעבר על ידיxrCreateEyeTrackerANDROID.
הפונקציה xrDestroyEyeTrackerANDROID משחררת את eyeTracker ואת המשאבים הבסיסיים כשהשימוש בממשקים למעקב אחרי תנועות העיניים מסתיים.
שימוש תקף (מרומז)
XR_ANDROID_eye_trackingהתוסף חייב להיות מופעל לפני הקריאה אלxrDestroyEyeTrackerANDROIDeyeTrackerחייב להיות שם משתמש תקין ב-XrEyeTrackerANDROID.
Thread Safety
- הגישה אל
eyeTrackerואל כל הכינויים של הילדים חייבת להיות מסונכרנת חיצונית
קודי החזרה
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
קבלת מידע על העיניים
הפונקציה xrGetCoarseTrackingEyesInfoANDROID מוגדרת כך:
XrResult xrGetCoarseTrackingEyesInfoANDROID(
XrEyeTrackerANDROID eyeTracker,
const XrEyesGetInfoANDROID* getInfo,
XrEyesANDROID* eyesOutput);
תיאורים של פרמטרים
-
eyeTrackerהואXrEyeTrackerANDROIDשנוצר בעבר על ידיxrCreateEyeTrackerANDROID. -
getInfoהוא מצביע אלXrEyesGetInfoANDROIDשמשמש לציון הפלט הנדרש. -
infoOutputהוא מצביע אלXrEyesANDROIDשמכיל את פרטי העיניים שמוחזרים, כולל תנוחות ומצבים.
הפונקציה xrGetCoarseTrackingEyesInfoANDROID מקבלת את המידע על מצבי העיניים והפוזות באופן ששומר על פרטיות המשתמשים.
סביבת זמן הריצה צריכה להחזיר את הערך XR_ERROR_PERMISSION_INSUFFICIENT אם לאפליקציה אין הרשאה מסוג android.permission.EYE_TRACKING_COARSE.
המידע על העיניים נפתר ביחס למרחב הבסיס בזמן הקריאה ל-xrGetCoarseTrackingEyesInfoANDROID באמצעות XrEyesGetInfoANDROID::time, XrEyesGetInfoANDROID::baseSpace.
בכל נקודת זמן, המיקום והכיוון של תנוחת העיניים נמדדים או לא נמדדים. המשמעות היא שהאפליקציות יכולות לצפות שגם XR_SPACE_LOCATION_POSITION_TRACKED_BIT וגם XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT יוגדרו או יבוטלו ב-XrEyesANDROID::eyes שסופק, ושהערך XrEyesANDROID::mode יציין את מצבי המעקב.
שימוש תקף (מרומז)
XR_ANDROID_eye_trackingהתוסף חייב להיות מופעל לפני הקריאה אלxrGetCoarseTrackingEyesInfoANDROIDeyeTrackerחייב להיות כינויXrEyeTrackerANDROIDתקין-
getInfomust be a pointer to a validXrEyesGetInfoANDROIDstructure eyesOutputחייב להיות מצביע למבנהXrEyesANDROID
קודי החזרה
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
הפונקציה xrGetFineTrackingEyesInfoANDROID מוגדרת כך:
XrResult xrGetFineTrackingEyesInfoANDROID(
XrEyeTrackerANDROID eyeTracker,
const XrEyesGetInfoANDROID* getInfo,
XrEyesANDROID* eyesOutput);
תיאורים של פרמטרים
-
eyeTrackerהואXrEyeTrackerANDROIDשנוצר בעבר על ידיxrCreateEyeTrackerANDROID. -
getInfoהוא מצביע אלXrEyesGetInfoANDROIDשמשמש לציון הפלט הנדרש. -
infoOutputהוא מצביע אלXrEyesANDROIDשמכיל את פרטי העיניים שמוחזרים, כולל תנוחות ומצבים. הפונקציהxrGetFineTrackingEyesInfoANDROIDמקבלת את המידע על מצבי העיניים והפוזות ברמת דיוק גבוהה יותר מאשרxrGetCoarseTrackingEyesInfoANDROID.
סביבת זמן הריצה צריכה להחזיר את הערך XR_ERROR_PERMISSION_INSUFFICIENT אם לאפליקציה אין הרשאה מסוג android.permission.EYE_TRACKING_FINE.
המידע על העיניים נפתר ביחס למרחב הבסיס בזמן הקריאה ל-xrGetFineTrackingEyesInfoANDROID באמצעות XrEyesGetInfoANDROID::time, XrEyesGetInfoANDROID::baseSpace.
בכל נקודת זמן, המיקום והכיוון של תנוחת העיניים נמדדים או לא נמדדים. המשמעות היא שהאפליקציות יכולות לצפות ששני הערכים XR_SPACE_LOCATION_POSITION_TRACKED_BIT ו-XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT יוגדרו או יבוטלו ב-XrEyesANDROID::eyes שסופק, ושהערך XrEyesANDROID::mode יציין את מצבי המעקב.
שימוש תקף (מרומז)
XR_ANDROID_eye_trackingהתוסף חייב להיות מופעל לפני הקריאה אלxrGetFineTrackingEyesInfoANDROIDeyeTrackerחייב להיות כינויXrEyeTrackerANDROIDתקין-
getInfomust be a pointer to a validXrEyesGetInfoANDROIDstructure eyesOutputחייב להיות מצביע למבנהXrEyesANDROID
קודי החזרה
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
המבנה XrEyesGetInfoANDROID מכיל את המידע שנדרש כדי לאחזר את תנוחות העיניים והמצבים שלהן.
typedef struct XrEyesGetInfoANDROID {
XrStructureType type;
void* next;
XrTime time;
XrSpace baseSpace;
} XrEyesGetInfoANDROID;
תיאורי חברים
typeהואXrStructureTypeשל המבנה הזה.-
nextהואNULLאו מצביע למבנה הבא בשרשרת המבנים. לא מוגדרים מבנים כאלה ב-OpenXR הליבה או בתוסף הזה. -
timeהואXrTimeשבו יש להעריך את הקואורדינטות ביחס לbaseSpace. baseSpaceתנוחת העיניים תהיה יחסית לXrSpaceהזה ב-time.
שימוש תקף (מרומז)
XR_ANDROID_eye_trackingהתוסף חייב להיות מופעל לפני השימוש ב-XrEyesGetInfoANDROID- הערך של
typeחייב להיותXR_TYPE_EYES_GET_INFO_ANDROID - הערך
nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת מבנים baseSpaceחייב להיות כינויXrSpaceתקין
המבנה XrEyesANDROID מכיל מידע על העיניים שעוקבים אחריהן.
typedef struct XrEyesANDROID {
XrStructureType type;
void* next;
XrEyeANDROID eyes[XR_EYE_MAX_ANDROID];
XrEyeTrackingModeANDROID mode;
} XrEyesANDROID;
תיאורי חברים
typeהואXrStructureTypeשל המבנה הזה.-
nextהואNULLאו מצביע למבנה הבא בשרשרת המבנים. לא מוגדרים מבנים כאלה ב-OpenXR הליבה או בתוסף הזה. -
eyesהוא מערך שלXrEyeANDROIDלעיניים השמאלית והימנית, שממוספרות באמצעותXrEyeIndexANDROID. -
modeהואXrEyeTrackingModeANDROIDשמציין אם העיניים עוקבות ואילו מהן.
שימוש תקף (מרומז)
XR_ANDROID_eye_trackingהתוסף חייב להיות מופעל לפני השימוש ב-XrEyesANDROID- הערך של
typeחייב להיותXR_TYPE_EYES_ANDROID - הערך
nextחייב להיותNULLאו מצביע תקין למבנה הבא בשרשרת מבנים - כל אלמנט נתון של
eyesחייב להיות מבנה תקין שלXrEyeANDROID modeחייב להיות ערך תקין שלXrEyeTrackingModeANDROID
המבנה XrEyeANDROID מתאר את המצב, המיקום והכיוון של העין.
typedef struct XrEyeANDROID {
XrEyeStateANDROID eyeState;
XrPosef eyePose;
} XrEyeANDROID;
תיאורי חברים
-
eyeStateהואXrEyeStateANDROIDשל העין. -
poseהואXrPosefשמגדיר את המיקום והכיוון של נקודת המוצא של העין בתוך מסגרת הייחוס שלXrEyesGetInfoANDROID::baseSpaceהמתאים. הכיוון של הזהות כאן מייצג צירים עם +Z לכיוון העיניים של המשתמש, +X לימין ו-+Y למעלה.
שימוש תקף (מרומז)
XR_ANDROID_eye_trackingהתוסף חייב להיות מופעל לפני השימוש ב-XrEyeANDROIDeyeStateחייב להיות ערך תקין שלXrEyeStateANDROID
הספירה XrEyeStateANDROID מזהה את המצבים השונים של העיניים שעוקבים אחריהן.
typedef enum XrEyeStateANDROID {
XR_EYE_STATE_INVALID_ANDROID = 0,
XR_EYE_STATE_GAZING_ANDROID = 1,
XR_EYE_STATE_SHUT_ANDROID = 2
} XrEyeStateANDROID;
המשמעויות של סוגי ה-enum הן:
Enum |
תיאור |
|
מציין שהעין במצב שגיאה או שהיא לא מוצגת. |
|
מציין שהעין מופנית למקום מסוים. |
|
מציין שהעין סגורה בגלל קריצה או מצמוץ. |
המספור XrEyeIndexANDROID מציין את האינדקס של העין השמאלית או הימנית.
typedef enum XrEyeIndexANDROID {
XR_EYE_INDEX_LEFT_ANDROID = 0,
XR_EYE_INDEX_RIGHT_ANDROID = 1
} XrEyeIndexANDROID;
המשמעויות של סוגי ה-enum הן:
Enum |
תיאור |
|
העין השמאלית. |
|
העין הימנית. |
הספירה XrEyeTrackingModeANDROID מזהה את המצבים השונים של מעקב אחרי העיניים.
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;
המשמעויות של סוגי ה-enum הן:
Enum |
תיאור |
|
מציין שמעקב העיניים לא פעיל. |
|
מציין שמתבצע מעקב רק אחרי העין הימנית. |
|
מציין שמתבצע מעקב רק אחרי העין השמאלית. |
|
מציין שמתבצע מעקב אחרי העין השמאלית והעין הימנית. |
קוד לדוגמה למעקב עיניים
בדוגמת הקוד הבאה אפשר לראות איך מקבלים מידע על העיניים ביחס למרחב תצוגה.
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));
סוגי אובייקטים חדשים
New Enum Constants
XR_EYE_MAX_ANDROID
הספירה XrObjectType מורחבת עם:
XR_OBJECT_TYPE_EYE_TRACKER_ANDROID
הספירה XrStructureType מורחבת עם:
XR_TYPE_EYES_ANDROIDXR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROIDXR_TYPE_EYES_GET_INFO_ANDROIDXR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROID
New Enums
מבנים חדשים
XrEyeANDROIDXrEyesANDROIDXrEyesGetInfoANDROIDXrEyeTrackerCreateInfoANDROIDXrSystemEyeTrackingPropertiesANDROID
פונקציות חדשות
xrCreateEyeTrackerANDROIDxrDestroyEyeTrackerANDROIDxrGetCoarseTrackingEyesInfoANDROIDxrGetFineTrackingEyesInfoANDROID
בעיות
היסטוריית הגרסאות
- Revision 1, 2025-01-17 (Kenny Vercaemer)
- תיאור ראשוני של התוסף
OpenXR™ והלוגו של OpenXR הם סימנים מסחריים בבעלות The Khronos Group Inc. והם רשומים כסימן מסחרי בסין, באיחוד האירופי, ביפן ובבריטניה.