سلسلة الاسم
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_ANDROID
next
يجب أن يكون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
يجب أن يكون اسمًا معرِّفًا صالحًا علىXrSession
createInfo
يجب أن يكون مؤشرًا إلى بنيةXrEyeTrackerCreateInfoANDROID
صالحةeyeTracker
يجب أن يكون مؤشرًا إلى اسم معرِّفXrEyeTrackerANDROID
.
رموز الإرجاع
XR_SUCCESS
XR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_VALIDATION_FAILURE
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_HANDLE_INVALID
XR_ERROR_INSTANCE_LOST
XR_ERROR_SESSION_LOST
XR_ERROR_OUT_OF_MEMORY
XR_ERROR_LIMIT_REACHED
XR_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
قبل طلبxrDestroyEyeTrackerANDROID
. eyeTracker
يجب أن يكون الاسم المعرِّفXrEyeTrackerANDROID
صالحًا.
أمان سلسلة المحادثات
- يجب أن تتم معالجة الوصول إلى
eyeTracker
وأيّ أسماء معرِّفة فرعية خارجيًا.
رموز الإرجاع
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTED
XR_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_SUCCESS
XR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_VALIDATION_FAILURE
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_HANDLE_INVALID
XR_ERROR_INSTANCE_LOST
XR_ERROR_SESSION_LOST
XR_ERROR_OUT_OF_MEMORY
XR_ERROR_LIMIT_REACHED
XR_ERROR_TIME_INVALID
XR_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
يجب أن يكون اسمًا معرِّفًا صالحًا علىXrEyeTrackerANDROID
getInfo
يجب أن يكون مؤشرًا إلىXrEyesGetInfoANDROID
هيكل صالحeyesOutput
يجب أن يكون مؤشرًا إلى بنيةXrEyesANDROID
.
رموز الإرجاع
XR_SUCCESS
XR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_VALIDATION_FAILURE
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_HANDLE_INVALID
XR_ERROR_INSTANCE_LOST
XR_ERROR_SESSION_LOST
XR_ERROR_OUT_OF_MEMORY
XR_ERROR_LIMIT_REACHED
XR_ERROR_TIME_INVALID
XR_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_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
قبل استخدام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_ANDROID
XR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROID
XR_TYPE_EYES_GET_INFO_ANDROID
XR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROID
عمليات التعداد الجديدة
التصاميم الجديدة
XrEyeANDROID
XrEyesANDROID
XrEyesGetInfoANDROID
XrEyeTrackerCreateInfoANDROID
XrSystemEyeTrackingPropertiesANDROID
الدوالّ الجديدة
xrCreateEyeTrackerANDROID
xrDestroyEyeTrackerANDROID
xrGetCoarseTrackingEyesInfoANDROID
xrGetFineTrackingEyesInfoANDROID
المشاكل
سجلّ الإصدارات
- النسخة 1، 17-01-2025 (كيني فيركمير)
- الوصف الأولي للإضافة