String Nama
XR_ANDROID_eye_tracking
Jenis Ekstensi
Ekstensi instance
Nomor Ekstensi Terdaftar
457
Revisi
1
Dependensi Ekstensi dan Versi
Tanggal Terakhir Diubah
2025-01-17
Status IP
Tidak ada klaim IP yang diketahui.
Kontributor
Spencer Quin, Google
Jared Finder, Google
Levana Chen, Google
Kenny Vercaemer, Google
Prasanthi Gurumurthy, Google
Nihav Jain, Google
Ringkasan
Ekstensi ini memungkinkan aplikasi mendapatkan posisi dan orientasi mata pengguna, serta status pelacakan gerak mata.
Data pelacakan mata disediakan dalam dua mode: kasar dan halus. Pelacakan kasar memberikan estimasi kasar mata pengguna, sedangkan pelacakan halus memberikan estimasi yang lebih akurat. Pelacakan kasar ditujukan untuk aplikasi yang ingin memberikan representasi dasar seperti avatar, sedangkan pelacakan akurat ditujukan untuk aplikasi yang lebih presisi.
Untuk
interaksi, XR_EXT_eye_gaze_interaction harus digunakan.
Memeriksa kemampuan sistem
Struktur XrSystemEyeTrackingPropertiesANDROID ditentukan sebagai:
typedef struct XrSystemEyeTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsEyeTracking;
} XrSystemEyeTrackingPropertiesANDROID;
Deskripsi Anggota
typeadalahXrStructureTypestruktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur seperti itu yang ditentukan dalam OpenXR inti atau ekstensi ini.supportsEyeTrackingadalahXrBool32, yang menunjukkan apakah sistem saat ini mendukung pelacakan mata.
Aplikasi dapat memeriksa apakah sistem mampu melakukan pelacakan mata dengan
menggabungkan struktur XrSystemEyeTrackingPropertiesANDROID ke
XrSystemProperties saat memanggil xrGetSystemProperties. Jika
supportsEyeTracking menampilkan XR_FALSE, maka aplikasi akan menerima
XR_ERROR_FEATURE_UNSUPPORTED dari xrCreateEyeTrackerANDROID.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_eye_trackingharus diaktifkan sebelum menggunakanXrSystemEyeTrackingPropertiesANDROID typeharus berupaXR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROIDnextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur
Membuat handle pelacak mata
XR_DEFINE_HANDLE(XrEyeTrackerANDROID)
Gagang XrEyeTrackerANDROID merepresentasikan pelacak mata untuk melacak mata
dan memetakan secara akurat apa yang dilihat pengguna.
Data pelacakan mata dapat berupa informasi pribadi yang sensitif dan terkait erat dengan privasi dan integritas pribadi. Sangat disarankan agar aplikasi yang menyimpan atau mentransfer data pelacakan mata selalu meminta persetujuan aktif dan spesifik dari pengguna untuk melakukannya.
Handle ini dapat digunakan untuk mengakses data pelacakan mata menggunakan fungsi lain dalam ekstensi ini.
Pelacakan mata memberikan representasi pose dan status mata dalam adegan.
Fungsi xrCreateEyeTrackerANDROID ditentukan
sebagai:
XrResult xrCreateEyeTrackerANDROID(
XrSession session,
const XrEyeTrackerCreateInfoANDROID* createInfo,
XrEyeTrackerANDROID* eyeTracker);
Deskripsi Parameter
sessionadalah tuasXrSessionyang akan mengaktifkan pelacakan mata.createInfoadalahXrEyeTrackerCreateInfoANDROIDyang digunakan untuk menentukan pelacakan mata.eyeTrackeradalah handleXrEyeTrackerANDROIDyang ditampilkan.
Aplikasi dapat membuat handle XrEyeTrackerANDROID menggunakan
fungsi xrCreateEyeTrackerANDROID.
Jika sistem tidak mendukung pelacakan mata, XR_ERROR_FEATURE_UNSUPPORTED
akan ditampilkan dari xrCreateEyeTrackerANDROID.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_eye_trackingharus diaktifkan sebelum memanggilxrCreateEyeTrackerANDROID sessionmust berupa nama sebutan channelXrSessionyang validcreateInfoharus berupa pointer ke strukturXrEyeTrackerCreateInfoANDROIDyang valideyeTrackerharus berupa pointer ke handleXrEyeTrackerANDROID
Kode yang Ditampilkan
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
Struktur XrEyeTrackerCreateInfoANDROID ditentukan sebagai:
typedef struct XrEyeTrackerCreateInfoANDROID {
XrStructureType type;
void* next;
} XrEyeTrackerCreateInfoANDROID;
Deskripsi Anggota
typeadalahXrStructureTypestruktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur seperti itu yang ditentukan dalam OpenXR inti atau ekstensi ini.
Struktur XrEyeTrackerCreateInfoANDROID menjelaskan informasi untuk
membuat handle XrEyeTrackerANDROID.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_eye_trackingharus diaktifkan sebelum menggunakanXrEyeTrackerCreateInfoANDROID typeharus berupaXR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROIDnextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur
Fungsi xrDestroyEyeTrackerANDROID ditentukan sebagai:
XrResult xrDestroyEyeTrackerANDROID(
XrEyeTrackerANDROID eyeTracker);
Deskripsi Parameter
eyeTrackeradalahXrEyeTrackerANDROIDyang sebelumnya dibuat olehxrCreateEyeTrackerANDROID.
Fungsi xrDestroyEyeTrackerANDROID melepaskan eyeTracker dan resource pokok saat selesai menggunakan pengalaman pelacakan mata.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_eye_trackingharus diaktifkan sebelum memanggilxrDestroyEyeTrackerANDROID eyeTrackerharus berupa nama sebutanXrEyeTrackerANDROIDyang valid.
Keamanan Thread
- Akses ke
eyeTracker, dan semua nama sebutan turunannya, harus disinkronkan secara eksternal
Kode yang Ditampilkan
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
Mendapatkan informasi mata
Fungsi xrGetCoarseTrackingEyesInfoANDROID ditentukan sebagai:
XrResult xrGetCoarseTrackingEyesInfoANDROID(
XrEyeTrackerANDROID eyeTracker,
const XrEyesGetInfoANDROID* getInfo,
XrEyesANDROID* eyesOutput);
Deskripsi Parameter
eyeTrackeradalahXrEyeTrackerANDROIDyang sebelumnya dibuat olehxrCreateEyeTrackerANDROID.getInfoadalah pointer keXrEyesGetInfoANDROIDyang digunakan untuk menentukan output yang diperlukan.infoOutputadalah pointer keXrEyesANDROIDyang berisi informasi mata yang ditampilkan, termasuk pose dan status.
Fungsi xrGetCoarseTrackingEyesInfoANDROID mendapatkan informasi untuk status dan pose mata dengan cara yang menjaga privasi pengguna.
Runtime harus menampilkan XR_ERROR_PERMISSION_INSUFFICIENT jika aplikasi tidak memiliki izin android.permission.EYE_TRACKING_COARSE.
Informasi mata diselesaikan dan relatif terhadap ruang dasar pada saat
panggilan ke xrGetCoarseTrackingEyesInfoANDROID menggunakan
XrEyesGetInfoANDROID::time, XrEyesGetInfoANDROID::baseSpace.
Setiap saat, posisi dan arah pose mata dilacak atau tidak dilacak. Artinya, aplikasi dapat mengharapkan bahwa XR_SPACE_LOCATION_POSITION_TRACKED_BIT dan XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT akan disetel atau dihapus pada XrEyesANDROID::eyes yang diberikan, dan XrEyesANDROID::mode akan menunjukkan status pelacakan.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_eye_trackingharus diaktifkan sebelum memanggilxrGetCoarseTrackingEyesInfoANDROID eyeTrackermust berupa nama sebutan channelXrEyeTrackerANDROIDyang validgetInfoharus berupa pointer ke strukturXrEyesGetInfoANDROIDyang valideyesOutputharus berupa pointer ke strukturXrEyesANDROID
Kode yang Ditampilkan
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
Fungsi xrGetFineTrackingEyesInfoANDROID
didefinisikan sebagai:
XrResult xrGetFineTrackingEyesInfoANDROID(
XrEyeTrackerANDROID eyeTracker,
const XrEyesGetInfoANDROID* getInfo,
XrEyesANDROID* eyesOutput);
Deskripsi Parameter
eyeTrackeradalahXrEyeTrackerANDROIDyang sebelumnya dibuat olehxrCreateEyeTrackerANDROID.getInfoadalah pointer keXrEyesGetInfoANDROIDyang digunakan untuk menentukan output yang diperlukan.infoOutputadalah pointer keXrEyesANDROIDyang berisi informasi mata yang ditampilkan, termasuk pose dan status. FungsixrGetFineTrackingEyesInfoANDROIDmendapatkan informasi untuk status mata dan pose dengan presisi yang lebih tinggi daripadaxrGetCoarseTrackingEyesInfoANDROID.
Runtime harus menampilkan XR_ERROR_PERMISSION_INSUFFICIENT jika aplikasi tidak memiliki izin android.permission.EYE_TRACKING_FINE.
Informasi mata diselesaikan dan relatif terhadap ruang dasar pada saat
panggilan ke xrGetFineTrackingEyesInfoANDROID menggunakan
XrEyesGetInfoANDROID::time, XrEyesGetInfoANDROID::baseSpace.
Setiap saat, posisi dan arah pose mata dilacak atau tidak dilacak. Artinya, aplikasi dapat mengharapkan bahwa XR_SPACE_LOCATION_POSITION_TRACKED_BIT dan XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT akan disetel atau dihapus pada XrEyesANDROID::eyes yang diberikan, dan XrEyesANDROID::mode akan menunjukkan status pelacakan.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_eye_trackingharus diaktifkan sebelum memanggilxrGetFineTrackingEyesInfoANDROID eyeTrackermust berupa nama sebutan channelXrEyeTrackerANDROIDyang validgetInfoharus berupa pointer ke strukturXrEyesGetInfoANDROIDyang valideyesOutputharus berupa pointer ke strukturXrEyesANDROID
Kode yang Ditampilkan
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
Struktur XrEyesGetInfoANDROID berisi informasi yang diperlukan untuk
mengambil pose dan status mata.
typedef struct XrEyesGetInfoANDROID {
XrStructureType type;
void* next;
XrTime time;
XrSpace baseSpace;
} XrEyesGetInfoANDROID;
Deskripsi Anggota
typeadalahXrStructureTypestruktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur seperti itu yang ditentukan dalam OpenXR inti atau ekstensi ini.timeadalahXrTimeuntuk mengevaluasi koordinat relatif terhadapbaseSpace.baseSpacepose mata akan relatif terhadapXrSpaceini padatime.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_eye_trackingharus diaktifkan sebelum menggunakanXrEyesGetInfoANDROID typeharus berupaXR_TYPE_EYES_GET_INFO_ANDROIDnextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai strukturbaseSpacemust berupa nama sebutan channelXrSpaceyang valid
Struktur XrEyesANDROID berisi informasi tentang mata yang dilacak.
typedef struct XrEyesANDROID {
XrStructureType type;
void* next;
XrEyeANDROID eyes[XR_EYE_MAX_ANDROID];
XrEyeTrackingModeANDROID mode;
} XrEyesANDROID;
Deskripsi Anggota
typeadalahXrStructureTypestruktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur seperti itu yang ditentukan dalam OpenXR inti atau ekstensi ini.eyesadalah arrayXrEyeANDROIDuntuk mata kiri dan kanan yang diindeks olehXrEyeIndexANDROID.modeadalahXrEyeTrackingModeANDROIDuntuk menunjukkan apakah mata melacak dan mata mana yang melacak.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_eye_trackingharus diaktifkan sebelum menggunakanXrEyesANDROID typeharus berupaXR_TYPE_EYES_ANDROIDnextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur- Setiap elemen tertentu dari
eyesharus berupa strukturXrEyeANDROIDyang valid modeharus berupa nilaiXrEyeTrackingModeANDROIDyang valid
Struktur XrEyeANDROID menjelaskan status, posisi, dan orientasi
mata.
typedef struct XrEyeANDROID {
XrEyeStateANDROID eyeState;
XrPosef eyePose;
} XrEyeANDROID;
Deskripsi Anggota
eyeStateadalahXrEyeStateANDROIDmata.poseadalahXrPosefyang menentukan posisi dan orientasi asal mata dalam frame referensiXrEyesGetInfoANDROID::baseSpaceyang sesuai. Orientasi identitas di sini merepresentasikan sumbu koordinat dengan +Z ke mata pengguna, +X ke kanan, dan +Y ke atas.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_eye_trackingharus diaktifkan sebelum menggunakanXrEyeANDROID eyeStateharus berupa nilaiXrEyeStateANDROIDyang valid
Enumerasi XrEyeStateANDROID mengidentifikasi berbagai status
mata yang dilacak.
typedef enum XrEyeStateANDROID {
XR_EYE_STATE_INVALID_ANDROID = 0,
XR_EYE_STATE_GAZING_ANDROID = 1,
XR_EYE_STATE_SHUT_ANDROID = 2
} XrEyeStateANDROID;
Enum memiliki arti berikut:
Enum |
Deskripsi |
|
Menunjukkan bahwa mata dalam status error atau tidak ada. |
|
Menunjukkan bahwa mata sedang menatap. |
|
Menunjukkan bahwa mata tertutup karena berkedip atau mengedipkan mata. |
Enumerasi XrEyeIndexANDROID mengidentifikasi indeks mata kiri atau
kanan.
typedef enum XrEyeIndexANDROID {
XR_EYE_INDEX_LEFT_ANDROID = 0,
XR_EYE_INDEX_RIGHT_ANDROID = 1
} XrEyeIndexANDROID;
Enum memiliki arti berikut:
Enum |
Deskripsi |
|
Mata kiri. |
|
Mata kanan. |
Pencacahan XrEyeTrackingModeANDROID mengidentifikasi berbagai mode
mata yang dilacak.
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 memiliki arti berikut:
Enum |
Deskripsi |
|
Menunjukkan bahwa pelacakan mata tidak aktif. |
|
Menunjukkan bahwa hanya mata kanan yang dilacak. |
|
Menunjukkan bahwa hanya mata kiri yang dilacak. |
|
Menunjukkan bahwa mata kiri dan kanan sedang melacak. |
Contoh kode untuk pelacakan mata
Contoh kode berikut menunjukkan cara mendapatkan informasi mata relatif terhadap ruang tampilan.
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));
Jenis Objek Baru
Konstanta Enum Baru
XR_EYE_MAX_ANDROID
Enumerasi XrObjectType diperluas dengan:
XR_OBJECT_TYPE_EYE_TRACKER_ANDROID
Enumerasi XrStructureType diperluas dengan:
XR_TYPE_EYES_ANDROIDXR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROIDXR_TYPE_EYES_GET_INFO_ANDROIDXR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROID
Enum Baru
Struktur Baru
XrEyeANDROIDXrEyesANDROIDXrEyesGetInfoANDROIDXrEyeTrackerCreateInfoANDROIDXrSystemEyeTrackingPropertiesANDROID
Fungsi Baru
xrCreateEyeTrackerANDROIDxrDestroyEyeTrackerANDROIDxrGetCoarseTrackingEyesInfoANDROIDxrGetFineTrackingEyesInfoANDROID
Masalah
Histori Versi
- Revisi 1, 17-01-2025 (Kenny Vercaemer)
- Deskripsi ekstensi awal
OpenXR™ dan logo OpenXR adalah merek dagang yang dimiliki oleh The Khronos Group Inc. dan terdaftar sebagai merek dagang di China, Uni Eropa, Jepang, dan Inggris Raya.