Chuỗi tên
XR_ANDROID_eye_tracking
Loại phần mở rộng
Tiện ích thực thể
Số điện thoại mở rộng đã đăng ký
457
Bản sửa đổi
1
Phần mở rộng và phần phụ thuộc phiên bản
Ngày sửa đổi gần đây nhất
2025-01-17
Trạng thái IP
Không có thông báo xác nhận quyền sở hữu đối với tài sản trí tuệ nào.
Cộng tác viên
Spencer Quin, Google
Jared Finder, Google
Levana Chen, Google
Kenny Vercaemer, Google
Prasanthi Gurumurthy, Google
Nihav Jain, Google
Tổng quan
Tiện ích này cho phép các ứng dụng lấy vị trí và hướng của mắt người dùng, cũng như trạng thái theo dõi mắt.
Dữ liệu theo dõi mắt được cung cấp ở hai chế độ: thô và tinh. Tính năng theo dõi thô cung cấp thông tin ước tính thô về mắt của người dùng, trong khi tính năng theo dõi tinh cung cấp thông tin ước tính chính xác hơn. Tính năng theo dõi thô dành cho các ứng dụng muốn cung cấp hình đại diện cơ bản, còn tính năng theo dõi tinh dành cho các ứng dụng chính xác hơn.
Để tương tác, bạn nên sử dụng XR_EXT_eye_gaze_interaction
.
Kiểm tra chức năng của hệ thống
Cấu trúc XrSystemEyeTrackingPropertiesANDROID
được xác định là:
typedef struct XrSystemEyeTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsEyeTracking;
} XrSystemEyeTrackingPropertiesANDROID;
Nội dung mô tả thành viên
type
làXrStructureType
của cấu trúc này.next
làNULL
hoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.supportsEyeTracking
làXrBool32
, cho biết liệu hệ thống hiện tại có hỗ trợ tính năng theo dõi mắt hay không.
Ứng dụng có thể kiểm tra xem hệ thống có thể theo dõi chuyển động mắt hay không bằng cách tạo chuỗi cấu trúc XrSystemEyeTrackingPropertiesANDROID
với XrSystemProperties khi gọi xrGetSystemProperties
. Nếu supportsEyeTracking
trả về XR_FALSE
, thì ứng dụng sẽ nhận được XR_ERROR_FEATURE_UNSUPPORTED
từ xrCreateEyeTrackerANDROID
.
Cách sử dụng hợp lệ (ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_eye_tracking
trước khi sử dụngXrSystemEyeTrackingPropertiesANDROID
type
phải làXR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROID
next
phải làNULL
hoặc con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Tạo tên người dùng cho thiết bị theo dõi mắt
XR_DEFINE_HANDLE(XrEyeTrackerANDROID)
Tên XrEyeTrackerANDROID
đại diện cho một thiết bị theo dõi mắt để theo dõi mắt và ánh xạ chính xác nội dung mà người dùng đang nhìn.
Dữ liệu theo dõi mắt có thể là thông tin cá nhân nhạy cảm và liên quan chặt chẽ đến quyền riêng tư và tính toàn vẹn cá nhân. Các ứng dụng lưu trữ hoặc chuyển dữ liệu theo dõi mắt nên luôn yêu cầu người dùng chấp nhận một cách chủ động và cụ thể để thực hiện việc này.
Bạn có thể sử dụng tay điều khiển này để truy cập dữ liệu theo dõi mắt bằng các hàm khác trong tiện ích này.
Tính năng theo dõi mắt cung cấp thông tin về tư thế và trạng thái của mắt trong cảnh.
Hàm xrCreateEyeTrackerANDROID
được xác định như sau:
XrResult xrCreateEyeTrackerANDROID(
XrSession session,
const XrEyeTrackerCreateInfoANDROID* createInfo,
XrEyeTrackerANDROID* eyeTracker);
Nội dung mô tả tham số
session
là một tay cầmXrSession
trong đó tính năng theo dõi mắt sẽ hoạt động.createInfo
làXrEyeTrackerCreateInfoANDROID
dùng để chỉ định tính năng theo dõi chuyển động mắt.eyeTracker
là handleXrEyeTrackerANDROID
được trả về.
Ứng dụng có thể tạo một tay điều khiển XrEyeTrackerANDROID
bằng cách sử dụng hàm xrCreateEyeTrackerANDROID
.
Nếu hệ thống không hỗ trợ tính năng theo dõi chuyển động mắt, thì XR_ERROR_FEATURE_UNSUPPORTED
sẽ được trả về từ xrCreateEyeTrackerANDROID
.
Cách sử dụng hợp lệ (ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_eye_tracking
trước khi gọixrCreateEyeTrackerANDROID
session
phải là tên người dùngXrSession
hợp lệcreateInfo
phải là con trỏ đến một cấu trúcXrEyeTrackerCreateInfoANDROID
hợp lệeyeTracker
phải là con trỏ đến một tên người dùngXrEyeTrackerANDROID
Mã trả về
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
Cấu trúc XrEyeTrackerCreateInfoANDROID
được xác định là:
typedef struct XrEyeTrackerCreateInfoANDROID {
XrStructureType type;
void* next;
} XrEyeTrackerCreateInfoANDROID;
Nội dung mô tả thành viên
type
làXrStructureType
của cấu trúc này.next
làNULL
hoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.
Cấu trúc XrEyeTrackerCreateInfoANDROID
mô tả thông tin để tạo một tay điều khiển XrEyeTrackerANDROID
.
Cách sử dụng hợp lệ (ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_eye_tracking
trước khi sử dụngXrEyeTrackerCreateInfoANDROID
type
phải làXR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROID
next
phải làNULL
hoặc con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Hàm xrDestroyEyeTrackerANDROID
được xác định là:
XrResult xrDestroyEyeTrackerANDROID(
XrEyeTrackerANDROID eyeTracker);
Nội dung mô tả tham số
eyeTracker
là mộtXrEyeTrackerANDROID
doxrCreateEyeTrackerANDROID
tạo trước đó.
Hàm xrDestroyEyeTrackerANDROID
sẽ giải phóng eyeTracker
và các tài nguyên cơ bản khi hoàn tất trải nghiệm theo dõi mắt.
Cách sử dụng hợp lệ (ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_eye_tracking
trước khi gọixrDestroyEyeTrackerANDROID
eyeTracker
phải là một tên người dùngXrEyeTrackerANDROID
hợp lệ.
Độ an toàn cho luồng
- Quyền truy cập vào
eyeTracker
và mọi tay điều khiển con phải được đồng bộ hoá bên ngoài
Mã trả về
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_HANDLE_INVALID
Nhận thông tin về mắt
Hàm xrGetCoarseTrackingEyesInfoANDROID
được xác định là:
XrResult xrGetCoarseTrackingEyesInfoANDROID(
XrEyeTrackerANDROID eyeTracker,
const XrEyesGetInfoANDROID* getInfo,
XrEyesANDROID* eyesOutput);
Nội dung mô tả tham số
eyeTracker
là mộtXrEyeTrackerANDROID
doxrCreateEyeTrackerANDROID
tạo trước đó.getInfo
là con trỏ đếnXrEyesGetInfoANDROID
dùng để chỉ định đầu ra cần thiết.infoOutput
là con trỏ đếnXrEyesANDROID
chứa thông tin về mắt được trả về, bao gồm cả tư thế và trạng thái.
Hàm xrGetCoarseTrackingEyesInfoANDROID
lấy thông tin về trạng thái mắt và tư thế theo cách bảo vệ quyền riêng tư của người dùng.
Môi trường thời gian chạy phải trả về XR_ERROR_PERMISSION_INSUFFICIENT
nếu ứng dụng không có quyền android.permission.EYE_TRACKING_COARSE
.
Thông tin về mắt được phân giải và tương ứng với không gian cơ sở tại thời điểm gọi xrGetCoarseTrackingEyesInfoANDROID
bằng cách sử dụng XrEyesGetInfoANDROID::time
, XrEyesGetInfoANDROID::baseSpace
.
Tại bất kỳ thời điểm nào, cả vị trí và hướng của tư thế mắt đều được theo dõi hoặc không được theo dõi. Điều này có nghĩa là các ứng dụng có thể dự kiến rằng cả XR_SPACE_LOCATION_POSITION_TRACKED_BIT
và XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT
sẽ được đặt hoặc xoá trên XrEyesANDROID::eyes
được cung cấp và XrEyesANDROID::mode
sẽ cho biết trạng thái theo dõi.
Cách sử dụng hợp lệ (ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_eye_tracking
trước khi gọixrGetCoarseTrackingEyesInfoANDROID
eyeTracker
phải là tên người dùngXrEyeTrackerANDROID
hợp lệgetInfo
phải là con trỏ đến một cấu trúcXrEyesGetInfoANDROID
hợp lệeyesOutput
phải là con trỏ đến cấu trúcXrEyesANDROID
Mã trả về
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
Hàm xrGetFineTrackingEyesInfoANDROID
được xác định là: {:#xrGetFineTrackingEyesInfoANDROID} C++
XrResult xrGetFineTrackingEyesInfoANDROID(
XrEyeTrackerANDROID eyeTracker,
const XrEyesGetInfoANDROID* getInfo,
XrEyesANDROID* eyesOutput);
Nội dung mô tả tham số
eyeTracker
là mộtXrEyeTrackerANDROID
doxrCreateEyeTrackerANDROID
tạo trước đó.getInfo
là con trỏ đếnXrEyesGetInfoANDROID
dùng để chỉ định đầu ra cần thiết.infoOutput
là con trỏ đếnXrEyesANDROID
chứa thông tin về mắt được trả về, bao gồm cả tư thế và trạng thái. HàmxrGetFineTrackingEyesInfoANDROID
lấy thông tin về trạng thái mắt và tư thế với độ chính xác cao hơnxrGetCoarseTrackingEyesInfoANDROID
.
Môi trường thời gian chạy phải trả về XR_ERROR_PERMISSION_INSUFFICIENT
nếu ứng dụng không có quyền android.permission.EYE_TRACKING_FINE
.
Thông tin về mắt được phân giải và tương ứng với không gian cơ sở tại thời điểm gọi xrGetFineTrackingEyesInfoANDROID
bằng cách sử dụng XrEyesGetInfoANDROID::time
, XrEyesGetInfoANDROID::baseSpace
.
Tại bất kỳ thời điểm nào, cả vị trí và hướng của tư thế mắt đều được theo dõi hoặc không được theo dõi. Điều này có nghĩa là các ứng dụng có thể dự kiến rằng cả XR_SPACE_LOCATION_POSITION_TRACKED_BIT
và XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT
sẽ được đặt hoặc xoá trên XrEyesANDROID::eyes
được cung cấp và XrEyesANDROID::mode
sẽ cho biết trạng thái theo dõi.
Cách sử dụng hợp lệ (ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_eye_tracking
trước khi gọixrGetFineTrackingEyesInfoANDROID
eyeTracker
phải là tên người dùngXrEyeTrackerANDROID
hợp lệgetInfo
phải là con trỏ đến một cấu trúcXrEyesGetInfoANDROID
hợp lệeyesOutput
phải là con trỏ đến cấu trúcXrEyesANDROID
Mã trả về
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
Cấu trúc XrEyesGetInfoANDROID
chứa thông tin cần thiết để truy xuất các tư thế và trạng thái của mắt.
typedef struct XrEyesGetInfoANDROID {
XrStructureType type;
void* next;
XrTime time;
XrSpace baseSpace;
} XrEyesGetInfoANDROID;
Nội dung mô tả thành viên
type
làXrStructureType
của cấu trúc này.next
làNULL
hoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.time
làXrTime
tại đó để đánh giá toạ độ tương ứng vớibaseSpace
.baseSpace
tư thế mắt sẽ tương ứng vớiXrSpace
này tạitime
.
Cách sử dụng hợp lệ (ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_eye_tracking
trước khi sử dụngXrEyesGetInfoANDROID
type
phải làXR_TYPE_EYES_GET_INFO_ANDROID
next
phải làNULL
hoặc con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúcbaseSpace
phải là tên người dùngXrSpace
hợp lệ
Cấu trúc XrEyesANDROID
chứa thông tin về mắt được theo dõi.
typedef struct XrEyesANDROID {
XrStructureType type;
void* next;
XrEyeANDROID eyes[XR_EYE_MAX_ANDROID];
XrEyeTrackingModeANDROID mode;
} XrEyesANDROID;
Nội dung mô tả thành viên
type
làXrStructureType
của cấu trúc này.next
làNULL
hoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.eyes
là một mảngXrEyeANDROID
cho mắt trái và phải được lập chỉ mục bằngXrEyeIndexANDROID
.mode
làXrEyeTrackingModeANDROID
để cho biết liệu mắt có đang theo dõi hay không và theo dõi mắt nào.
Cách sử dụng hợp lệ (ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_eye_tracking
trước khi sử dụngXrEyesANDROID
type
phải làXR_TYPE_EYES_ANDROID
next
phải làNULL
hoặc con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc- Mọi phần tử nhất định của
eyes
phải là một cấu trúcXrEyeANDROID
hợp lệ mode
phải là một giá trịXrEyeTrackingModeANDROID
hợp lệ
Cấu trúc XrEyeANDROID
mô tả trạng thái, vị trí và hướng của mắt.
typedef struct XrEyeANDROID {
XrEyeStateANDROID eyeState;
XrPosef eyePose;
} XrEyeANDROID;
Nội dung mô tả thành viên
eyeState
làXrEyeStateANDROID
của mắt.pose
là mộtXrPosef
xác định vị trí và hướng của gốc mắt trong khung tham chiếu củaXrEyesGetInfoANDROID::baseSpace
tương ứng. Hướng nhận dạng ở đây đại diện cho trục toạ độ với +Z vào mắt người dùng, +X sang phải và +Y lên trên.
Cách sử dụng hợp lệ (ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_eye_tracking
trước khi sử dụngXrEyeANDROID
eyeState
phải là một giá trịXrEyeStateANDROID
hợp lệ
Biến đếm XrEyeStateANDROID
xác định các trạng thái khác nhau của mắt được theo dõi.
typedef enum XrEyeStateANDROID {
XR_EYE_STATE_INVALID_ANDROID = 0,
XR_EYE_STATE_GAZING_ANDROID = 1,
XR_EYE_STATE_SHUT_ANDROID = 2
} XrEyeStateANDROID;
Các enum có ý nghĩa như sau:
Enum |
Nội dung mô tả |
|
Cho biết rằng mắt đang ở trạng thái lỗi hoặc không có. |
|
Cho biết mắt đang nhìn chăm chú. |
|
Cho biết mắt đang nhắm do nháy mắt hoặc chớp mắt. |
Biến đếm XrEyeIndexANDROID
xác định chỉ mục của mắt trái hoặc mắt phải.
typedef enum XrEyeIndexANDROID {
XR_EYE_INDEX_LEFT_ANDROID = 0,
XR_EYE_INDEX_RIGHT_ANDROID = 1
} XrEyeIndexANDROID;
Các enum có ý nghĩa như sau:
Enum |
Nội dung mô tả |
|
Mắt trái. |
|
Mắt phải. |
Biến đếm XrEyeTrackingModeANDROID
xác định các chế độ theo dõi mắt.
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;
Các enum có ý nghĩa như sau:
Enum |
Nội dung mô tả |
|
Cho biết tính năng theo dõi chuyển động mắt không hoạt động. |
|
Cho biết chỉ mắt phải đang theo dõi. |
|
Cho biết chỉ mắt trái đang theo dõi. |
|
Cho biết cả mắt trái và mắt phải đều đang theo dõi. |
Mã ví dụ cho tính năng theo dõi chuyển động mắt
Mã ví dụ sau đây minh hoạ cách lấy thông tin về mắt tương ứng với không gian xem.
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));
Các loại đối tượng mới
Hằng số enum mới
XR_EYE_MAX_ANDROID
Bổ sung enum XrObjectType
bằng:
XR_OBJECT_TYPE_EYE_TRACKER_ANDROID
Bổ sung enum XrStructureType
bằng:
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 mới
Cấu trúc mới
XrEyeANDROID
XrEyesANDROID
XrEyesGetInfoANDROID
XrEyeTrackerCreateInfoANDROID
XrSystemEyeTrackingPropertiesANDROID
Hàm mới
xrCreateEyeTrackerANDROID
xrDestroyEyeTrackerANDROID
xrGetCoarseTrackingEyesInfoANDROID
xrGetFineTrackingEyesInfoANDROID
Vấn đề
Nhật ký phiên bản
- Bản sửa đổi 1, ngày 17 tháng 1 năm 2025 (Kenny Vercaemer)
- Nội dung mô tả ban đầu của tiện ích