String Nama
XR_ANDROID_eye_tracking
Jenis Ekstensi
Perpanjangan instance
Registered Extension Number
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 mata.
Data pelacakan mata disediakan dalam dua mode: kasar dan halus. Pelacakan kasar memberikan perkiraan kasar tentang mata pengguna, sedangkan pelacakan halus memberikan perkiraan yang lebih akurat. Pelacakan kasar ditujukan untuk aplikasi yang ingin memberikan representasi seperti avatar dasar, sedangkan pelacakan halus 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
typeadalahXrStructureTypedari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur semacam itu yang ditentukan di 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
mengaitkan struktur XrSystemEyeTrackingPropertiesANDROID ke
XrSystemProperties saat memanggil xrGetSystemProperties. Jika
supportsEyeTracking menampilkan XR_FALSE, 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 nama sebutan eye tracker
XR_DEFINE_HANDLE(XrEyeTrackerANDROID)
Nama sebutan XrEyeTrackerANDROID mewakili 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. Sebaiknya aplikasi yang menyimpan atau mentransfer data pelacakan mata selalu meminta persetujuan aktif dan tertentu dari pengguna untuk melakukannya.
Nama sebutan ini dapat digunakan untuk mengakses data pelacakan mata menggunakan fungsi lain di ekstensi ini.
Pelacakan gerak mata memberikan representasi status dan pose mata dalam tampilan.
Fungsi xrCreateEyeTrackerANDROID ditentukan
sebagai:
XrResult xrCreateEyeTrackerANDROID(
XrSession session,
const XrEyeTrackerCreateInfoANDROID* createInfo,
XrEyeTrackerANDROID* eyeTracker);
Deskripsi Parameter
sessionadalah handleXrSessiontempat pelacakan mata akan aktif.createInfoadalahXrEyeTrackerCreateInfoANDROIDyang digunakan untuk menentukan pelacakan mata.eyeTrackeradalah nama sebutanXrEyeTrackerANDROIDyang ditampilkan.
Aplikasi dapat membuat nama sebutan 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 sessionharus berupa nama sebutan channelXrSessionyang validcreateInfoharus berupa pointer ke strukturXrEyeTrackerCreateInfoANDROIDyang valideyeTrackerharus berupa pointer ke nama sebutan channelXrEyeTrackerANDROID
Kode Status
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
typeadalahXrStructureTypedari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur semacam itu yang ditentukan di OpenXR inti atau ekstensi ini.
Struktur XrEyeTrackerCreateInfoANDROID menjelaskan informasi untuk
membuat nama sebutan 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 merilis eyeTracker dan
resource yang mendasarinya setelah selesai dengan pengalaman pelacakan mata.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_eye_trackingharus diaktifkan sebelum memanggilxrDestroyEyeTrackerANDROID eyeTrackerharus berupa nama sebutan channelXrEyeTrackerANDROIDyang valid.
Keamanan Thread
- Akses ke
eyeTracker, dan setiap nama sebutan turunan, harus disinkronkan secara eksternal
Kode Status
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 di-resolve dan relatif terhadap ruang dasar pada saat
panggilan ke xrGetCoarseTrackingEyesInfoANDROID menggunakan
XrEyesGetInfoANDROID::time, XrEyesGetInfoANDROID::baseSpace.
Pada setiap waktu, 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 ditetapkan atau dihapus pada
XrEyesANDROID::eyes yang disediakan, dan bahwa XrEyesANDROID::mode akan
menunjukkan status pelacakan.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_eye_trackingharus diaktifkan sebelum memanggilxrGetCoarseTrackingEyesInfoANDROID eyeTrackerharus berupa nama sebutan channelXrEyeTrackerANDROIDyang validgetInfoharus berupa pointer ke strukturXrEyesGetInfoANDROIDyang valideyesOutputharus berupa pointer ke strukturXrEyesANDROID
Kode Status
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
ditentukan sebagai:
{:#xrGetFineTrackingEyesInfoANDROID}
C++
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 dan pose mata 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 di-resolve dan relatif terhadap ruang dasar pada saat
panggilan ke xrGetFineTrackingEyesInfoANDROID menggunakan
XrEyesGetInfoANDROID::time, XrEyesGetInfoANDROID::baseSpace.
Pada setiap waktu, 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 ditetapkan atau dihapus pada
XrEyesANDROID::eyes yang disediakan, dan bahwa XrEyesANDROID::mode akan
menunjukkan status pelacakan.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_eye_trackingharus diaktifkan sebelum memanggilxrGetFineTrackingEyesInfoANDROID eyeTrackerharus berupa nama sebutan channelXrEyeTrackerANDROIDyang validgetInfoharus berupa pointer ke strukturXrEyesGetInfoANDROIDyang valideyesOutputharus berupa pointer ke strukturXrEyesANDROID
Kode Status
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
typeadalahXrStructureTypedari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur semacam itu yang ditentukan di OpenXR inti atau ekstensi ini.timeadalahXrTimetempat mengevaluasi koordinat relatif terhadapbaseSpace.baseSpacepose mata akan relatif terhadapXrSpaceini ditime.
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 strukturbaseSpaceharus 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
typeadalahXrStructureTypedari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur semacam itu yang ditentukan di OpenXR inti atau ekstensi ini.eyesadalah arrayXrEyeANDROIDuntuk mata kiri dan kanan seperti yang diindeks olehXrEyeIndexANDROID.modeadalahXrEyeTrackingModeANDROIDuntuk menunjukkan apakah mata melacak dan yang mana.
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
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 mewakili 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 berada dalam status error atau tidak ada. |
|
Menunjukkan bahwa mata sedang menatap. |
|
Menunjukkan bahwa mata tertutup karena kedipan atau berkedip. |
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. |
Enumerasi 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 melacak. |
|
Menunjukkan bahwa hanya mata kiri yang melacak. |
|
Menunjukkan bahwa mata kiri dan kanan sedang melacak. |
Contoh kode untuk pelacakan mata
Kode contoh berikut menunjukkan cara mendapatkan informasi mata yang 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.