Name String
XR_ANDROID_eye_tracking
نوع الإضافة
إضافة مثيل
رقم الإضافة المسجَّل
457
المراجعة
1
متطلبات الإضافة والإصدار
تاريخ آخر تعديل
2025-01-17
حالة عنوان IP
ما مِن مطالبات معروفة بشأن الملكية الفكرية.
المساهمون
سبنسر كوين، Google
Jared Finder، Google
ليفانا تشين، Google
"كيني فيركامير"، Google
"براسانثي غورومورثي"، Google
"نيهاف جاين"، 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 - يجب أن يكون
typeXR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROID - يجب أن تكون قيمة
nextNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البِنى
إنشاء معرّف لجهاز تتبُّع العين
XR_DEFINE_HANDLE(XrEyeTrackerANDROID)
يمثّل المقبض XrEyeTrackerANDROID أداة تتبُّع العين لتتبُّع حركة العينين
وتحديد ما ينظر إليه المستخدم بدقة.
يمكن أن تكون بيانات تتبُّع حركة العين معلومات شخصية حساسة، وهي مرتبطة ارتباطًا وثيقًا بالخصوصية الشخصية والسلامة. ننصح بشدة بأن تطلب التطبيقات التي تخزِّن بيانات تتبُّع العين أو تنقلها من المستخدم دائمًا موافقة نشطة ومحدّدة على ذلك.
يمكن استخدام هذا المعرّف للوصول إلى بيانات تتبُّع العين باستخدام دوال أخرى في هذه الإضافة.
توفّر ميزة "تتبُّع العين" تمثيلاً لوضع العين وحالتها في المشهد.
يتم تعريف الدالة xrCreateEyeTrackerANDROID على النحو التالي:
XrResult xrCreateEyeTrackerANDROID(
XrSession session,
const XrEyeTrackerCreateInfoANDROID* createInfo,
XrEyeTrackerANDROID* eyeTracker);
أوصاف المَعلمات
sessionهو اسم مستخدمXrSessionسيتم تفعيل ميزة تتبُّع العين فيه.-
createInfoهيXrEyeTrackerCreateInfoANDROIDالمستخدَمة لتحديد تتبُّع حركة العين. -
eyeTrackerهو معرّفXrEyeTrackerANDROIDالذي تم عرضه.
يمكن للتطبيق إنشاء معرّف XrEyeTrackerANDROID باستخدام الدالة xrCreateEyeTrackerANDROID.
إذا كان النظام لا يتيح تتبُّع حركة العين، سيتم عرض XR_ERROR_FEATURE_UNSUPPORTED
من xrCreateEyeTrackerANDROID.
الاستخدام الصحيح (الضمني)
- يجب تفعيل الإضافة
XR_ANDROID_eye_trackingقبل الاتصال بـxrCreateEyeTrackerANDROID - يجب أن يكون
sessionاسم معرّفXrSessionصالحًا - يجب أن يكون
createInfoمؤشرًا إلى بنيةXrEyeTrackerCreateInfoANDROIDصالحة - يجب أن يكون
eyeTrackerمؤشرًا إلى معرّف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 - يجب أن يكون
typeXR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROID - يجب أن تكون قيمة
nextNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البِنى
يتم تعريف الدالة xrDestroyEyeTrackerANDROID على النحو التالي:
XrResult xrDestroyEyeTrackerANDROID(
XrEyeTrackerANDROID eyeTracker);
أوصاف المَعلمات
-
eyeTrackerهوXrEyeTrackerANDROIDتم إنشاؤه سابقًا بواسطةxrCreateEyeTrackerANDROID.
تُصدر الدالة xrDestroyEyeTrackerANDROID eyeTracker والموارد الأساسية عند الانتهاء من تجارب تتبُّع العين.
الاستخدام الصحيح (الضمني)
- يجب تفعيل الإضافة
XR_ANDROID_eye_trackingقبل الاتصال بـxrDestroyEyeTrackerANDROID - يجب أن يكون
eyeTrackerمعرّفًا صالحًاXrEyeTrackerANDROID.
أمان سلاسل المحادثات
- يجب مزامنة
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قبل الاتصال بـxrGetCoarseTrackingEyesInfoANDROID - يجب أن يكون
eyeTrackerاسم معرّفXrEyeTrackerANDROIDصالحًا - يجب أن يكون
getInfoمؤشرًا إلى بنيةXrEyesGetInfoANDROIDصالحة 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قبل الاتصال بـxrGetFineTrackingEyesInfoANDROID - يجب أن يكون
eyeTrackerاسم معرّفXrEyeTrackerANDROIDصالحًا - يجب أن يكون
getInfoمؤشرًا إلى بنيةXrEyesGetInfoANDROIDصالحة 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 - يجب أن يكون
typeXR_TYPE_EYES_GET_INFO_ANDROID - يجب أن تكون قيمة
nextNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البِنى - يجب أن يكون
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 - يجب أن يكون
typeXR_TYPE_EYES_ANDROID - يجب أن تكون قيمة
nextNULLأو مؤشرًا صالحًا إلى البنية التالية في سلسلة البِنى - يجب أن يكون أي عنصر معيّن من
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قبل استخدامXrEyeANDROID - يجب أن تكون
eyeStateقيمة صالحة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 |
الوصف |
|
يشير إلى أنّ العين في حالة خطأ أو غير متوفّرة. |
|
تشير إلى أنّ العين تنظر. |
|
تشير إلى أنّ العين مغلقة بسبب غمزة أو رمشة. |
يحدّد التعداد XrEyeIndexANDROID فهرس العين اليسرى أو اليمنى.
typedef enum XrEyeIndexANDROID {
XR_EYE_INDEX_LEFT_ANDROID = 0,
XR_EYE_INDEX_RIGHT_ANDROID = 1
} XrEyeIndexANDROID;
تحمل القيم المُعدّدة المعاني التالية:
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 |
الوصف |
|
يشير إلى أنّ ميزة تتبُّع حركة العين غير نشطة. |
|
يشير إلى أنّ العين اليمنى فقط هي التي يتم تتبُّعها. |
|
يشير إلى أنّه يتم تتبُّع العين اليسرى فقط. |
|
تشير هذه الحالة إلى أنّ كلتا العينين اليسرى واليمنى تتتبّعان الحركة. |
مثال على الرمز البرمجي لتتبُّع العين
يوضّح نموذج الرمز البرمجي التالي كيفية الحصول على معلومات العين بالنسبة إلى مساحة عرض.
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));
أنواع العناصر الجديدة
ثوابت التعداد الجديدة
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
عمليات التعداد الجديدة
البُنى الجديدة
XrEyeANDROIDXrEyesANDROIDXrEyesGetInfoANDROIDXrEyeTrackerCreateInfoANDROIDXrSystemEyeTrackingPropertiesANDROID
الدوال الجديدة
xrCreateEyeTrackerANDROIDxrDestroyEyeTrackerANDROIDxrGetCoarseTrackingEyesInfoANDROIDxrGetFineTrackingEyesInfoANDROID
المشاكل
سجلّ التعديلات
- Revision 1, 2025-01-17 (Kenny Vercaemer)
- الوصف الأوّلي للإضافة
OpenXR™ وشعار OpenXR هما علامتان تجاريتان مملوكتان لشركة The Khronos Group Inc. ومسجّلتان كعلامة تجارية في الصين والاتحاد الأوروبي واليابان والمملكة المتحدة.