String Nama
XR_ANDROID_eye_tracking
Jenis Ekstensi
Ekstensi 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
type
adalahXrStructureType
dari struktur ini.next
adalahNULL
atau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur seperti itu yang ditentukan di OpenXR inti atau ekstensi ini.supportsEyeTracking
adalahXrBool32
, 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_tracking
harus diaktifkan sebelum menggunakanXrSystemEyeTrackingPropertiesANDROID
type
harus berupaXR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROID
next
harus berupaNULL
atau pointer yang valid ke struktur berikutnya dalam rantai struktur
Membuat nama sebutan channel pelacak mata
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 mata memberikan representasi status dan pose mata dalam tampilan.
Fungsi xrCreateEyeTrackerANDROID
ditentukan
sebagai:
XrResult xrCreateEyeTrackerANDROID(
XrSession session,
const XrEyeTrackerCreateInfoANDROID* createInfo,
XrEyeTrackerANDROID* eyeTracker);
Deskripsi Parameter
session
adalah handleXrSession
tempat pelacakan mata akan aktif.createInfo
adalahXrEyeTrackerCreateInfoANDROID
yang digunakan untuk menentukan pelacakan mata.eyeTracker
adalah nama sebutanXrEyeTrackerANDROID
yang 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_tracking
harus diaktifkan sebelum memanggilxrCreateEyeTrackerANDROID
session
harus berupa nama sebutan channelXrSession
yang validcreateInfo
harus berupa pointer ke strukturXrEyeTrackerCreateInfoANDROID
yang valideyeTracker
harus berupa pointer ke nama sebutan channelXrEyeTrackerANDROID
Kode Status
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
Struktur XrEyeTrackerCreateInfoANDROID
ditentukan sebagai:
typedef struct XrEyeTrackerCreateInfoANDROID {
XrStructureType type;
void* next;
} XrEyeTrackerCreateInfoANDROID;
Deskripsi Anggota
type
adalahXrStructureType
dari struktur ini.next
adalahNULL
atau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur seperti 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_tracking
harus diaktifkan sebelum menggunakanXrEyeTrackerCreateInfoANDROID
type
harus berupaXR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROID
next
harus berupaNULL
atau pointer yang valid ke struktur berikutnya dalam rantai struktur
Fungsi xrDestroyEyeTrackerANDROID
ditentukan sebagai:
XrResult xrDestroyEyeTrackerANDROID(
XrEyeTrackerANDROID eyeTracker);
Deskripsi Parameter
eyeTracker
adalahXrEyeTrackerANDROID
yang 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_tracking
harus diaktifkan sebelum memanggilxrDestroyEyeTrackerANDROID
eyeTracker
harus berupa nama sebutan channelXrEyeTrackerANDROID
yang valid.
Keamanan Thread
- Akses ke
eyeTracker
, dan setiap nama sebutan turunan, harus disinkronkan secara eksternal
Kode Status
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_HANDLE_INVALID
Mendapatkan informasi mata
Fungsi xrGetCoarseTrackingEyesInfoANDROID
ditentukan sebagai:
XrResult xrGetCoarseTrackingEyesInfoANDROID(
XrEyeTrackerANDROID eyeTracker,
const XrEyesGetInfoANDROID* getInfo,
XrEyesANDROID* eyesOutput);
Deskripsi Parameter
eyeTracker
adalahXrEyeTrackerANDROID
yang sebelumnya dibuat olehxrCreateEyeTrackerANDROID
.getInfo
adalah pointer keXrEyesGetInfoANDROID
yang digunakan untuk menentukan output yang diperlukan.infoOutput
adalah pointer keXrEyesANDROID
yang 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_tracking
harus diaktifkan sebelum memanggilxrGetCoarseTrackingEyesInfoANDROID
eyeTracker
harus berupa nama sebutan channelXrEyeTrackerANDROID
yang validgetInfo
harus berupa pointer ke strukturXrEyesGetInfoANDROID
yang valideyesOutput
harus berupa pointer ke strukturXrEyesANDROID
Kode Status
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
Fungsi xrGetFineTrackingEyesInfoANDROID
ditentukan sebagai:
{:#xrGetFineTrackingEyesInfoANDROID}
C++
XrResult xrGetFineTrackingEyesInfoANDROID(
XrEyeTrackerANDROID eyeTracker,
const XrEyesGetInfoANDROID* getInfo,
XrEyesANDROID* eyesOutput);
Deskripsi Parameter
eyeTracker
adalahXrEyeTrackerANDROID
yang sebelumnya dibuat olehxrCreateEyeTrackerANDROID
.getInfo
adalah pointer keXrEyesGetInfoANDROID
yang digunakan untuk menentukan output yang diperlukan.infoOutput
adalah pointer keXrEyesANDROID
yang berisi informasi mata yang ditampilkan, termasuk pose dan status. FungsixrGetFineTrackingEyesInfoANDROID
mendapatkan 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_tracking
harus diaktifkan sebelum memanggilxrGetFineTrackingEyesInfoANDROID
eyeTracker
harus berupa nama sebutan channelXrEyeTrackerANDROID
yang validgetInfo
harus berupa pointer ke strukturXrEyesGetInfoANDROID
yang valideyesOutput
harus berupa pointer ke strukturXrEyesANDROID
Kode Status
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
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
type
adalahXrStructureType
dari struktur ini.next
adalahNULL
atau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur seperti itu yang ditentukan di OpenXR inti atau ekstensi ini.time
adalahXrTime
tempat mengevaluasi koordinat relatif terhadapbaseSpace
.baseSpace
pose mata akan relatif terhadapXrSpace
ini ditime
.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_eye_tracking
harus diaktifkan sebelum menggunakanXrEyesGetInfoANDROID
type
harus berupaXR_TYPE_EYES_GET_INFO_ANDROID
next
harus berupaNULL
atau pointer yang valid ke struktur berikutnya dalam rantai strukturbaseSpace
harus berupa nama sebutan channelXrSpace
yang 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
type
adalahXrStructureType
dari struktur ini.next
adalahNULL
atau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur seperti itu yang ditentukan di OpenXR inti atau ekstensi ini.eyes
adalah arrayXrEyeANDROID
untuk mata kiri dan kanan seperti yang diindeks olehXrEyeIndexANDROID
.mode
adalahXrEyeTrackingModeANDROID
untuk menunjukkan apakah mata melacak dan yang mana.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_eye_tracking
harus diaktifkan sebelum menggunakanXrEyesANDROID
type
harus berupaXR_TYPE_EYES_ANDROID
next
harus berupaNULL
atau pointer yang valid ke struktur berikutnya dalam rantai struktur- Setiap elemen
eyes
harus berupa strukturXrEyeANDROID
yang valid mode
harus berupa nilaiXrEyeTrackingModeANDROID
yang valid
Struktur XrEyeANDROID
menjelaskan status, posisi, dan orientasi
mata.
typedef struct XrEyeANDROID {
XrEyeStateANDROID eyeState;
XrPosef eyePose;
} XrEyeANDROID;
Deskripsi Anggota
eyeState
adalahXrEyeStateANDROID
mata.pose
adalahXrPosef
yang menentukan posisi dan orientasi asal mata dalam frame referensiXrEyesGetInfoANDROID::baseSpace
yang 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_tracking
harus diaktifkan sebelum menggunakanXrEyeANDROID
eyeState
harus berupa nilaiXrEyeStateANDROID
yang 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_ANDROID
XR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROID
XR_TYPE_EYES_GET_INFO_ANDROID
XR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROID
Enum Baru
Struktur Baru
XrEyeANDROID
XrEyesANDROID
XrEyesGetInfoANDROID
XrEyeTrackerCreateInfoANDROID
XrSystemEyeTrackingPropertiesANDROID
Fungsi Baru
xrCreateEyeTrackerANDROID
xrDestroyEyeTrackerANDROID
xrGetCoarseTrackingEyesInfoANDROID
xrGetFineTrackingEyesInfoANDROID
Masalah
Histori Versi
- Revisi 1, 17-01-2025 (Kenny Vercaemer)
- Deskripsi ekstensi awal