سلسلة الاسم
XR_ANDROID_eye_tracking
نوع الإضافة
إضافة مثيل
رقم الإضافة المسجَّل
457
المراجعة
1
التبعيات المتعلّقة بالإصدارات والإضافات
تاريخ آخر تعديل
2025-01-17
حالة عنوان IP
ما مِن مطالبات معروفة بعناوين IP.
المساهمون
سبنسر كوين، Google
جاريد فايندر، 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. typeيجب أن يكونXR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROIDnextيجب أن يكونNULLأو مؤشرًا صالحًا إلى الهيكل التالي في سلسلة الهياكل
إنشاء اسم معرِّف لجهاز تتبُّع حركة العين
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يجب أن يكون اسمًا معرِّفًا صالحًا علىXrSessioncreateInfoيجب أن يكون مؤشرًا إلى بنية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. typeيجب أن يكونXR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROIDnextيجب أن يكونNULLأو مؤشرًا صالحًا إلى الهيكل التالي في سلسلة الهياكل
يتم تعريف الدالة 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يجب أن يكون اسمًا معرِّفًا صالحًا علىXrEyeTrackerANDROIDgetInfoيجب أن يكون مؤشرًا إلى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
على النحو التالي:
{:#xrGetFineTrackingEyesInfoANDROID}
C++
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يجب أن يكون اسمًا معرِّفًا صالحًا علىXrEyeTrackerANDROIDgetInfoيجب أن يكون مؤشرًا إلى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 على المعلومات المطلوبة ل retrieving eye poses and states.
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_ANDROIDnextيجب أن يكون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_ANDROIDnextيجب أن يكون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قبل استخدام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
المشاكل
سجلّ الإصدارات
- النسخة 1، 17-01-2025 (كيني فيركمير)
- الوصف الأوّلي للإضافة
OpenXR™ وشعار OpenXR هما علامتان تجاريتان مملوكتان لشركة The Khronos Group Inc. ومسجَّلتان كعلامتَين تجاريتَين في الصين والاتحاد الأوروبي واليابان والمملكة المتحدة.