XR_ANDROID_eye_tracking
이름 문자열
XR_ANDROID_eye_tracking
확장 프로그램 유형
인스턴스 확장 프로그램
등록된 내선 번호
457
버전
1
승인 상태
비준되지 않음
확장 프로그램 및 버전 종속 항목
최종 수정일
2025-01-17
IP 상태
알려진 IP 소유권 주장이 없습니다.
도움을 주신 분들
스펜서 퀸, Google
제러드 파인더, Google
레바나 첸, Google
케니 베르카머, Google
프라산티 구루무르티, Google
니하브 자인, Google
개요
이 확장 프로그램을 사용하면 애플리케이션에서 사용자의 눈 위치와 방향, 눈 추적 상태를 가져올 수 있습니다.
눈 추적 데이터는 대략적인 모드와 정밀한 모드의 두 가지 모드로 제공됩니다. 대략적인 추적은 사용자의 눈을 대략적으로 추정하는 반면, 정밀한 추적은 더 정확한 추정치를 제공합니다. 대략적인 추적은 기본적인 아바타와 같은 표현을 제공하려는 애플리케이션을 위한 것이고, 정밀한 추적은 더 정밀한 애플리케이션을 위한 것입니다.
상호작용에는 XR_EXT_eye_gaze_interaction를 사용해야 합니다(should).
권한
Android 애플리케이션은 매니페스트에 android.permission.EYE_TRACKING_COARSE 또는 android.permission.EYE_TRACKING_FINE 권한이 나열되어 있어야 합니다(must). 이러한 권한은 위험한 권한으로 간주됩니다. 애플리케이션은 런타임에 권한을 요청하여 다음 함수를 사용해야 합니다(must).
- xrCreateEyeTrackerANDROID (권한 중 하나 이상)
- xrGetCoarseTrackingEyesInfoANDROID (android.permission.EYE_TRACKING_COARSE)
- xrGetFineTrackingEyesInfoANDROID (android.permission.EYE_TRACKING_FINE)
(보호 수준: 위험)
시스템 기능 검사
XrSystemEyeTrackingPropertiesANDROID 구조는 다음과 같이 정의됩니다.
typedef struct XrSystemEyeTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsEyeTracking;
} XrSystemEyeTrackingPropertiesANDROID;
회원 설명
type는 이 구조의 XrStructureType입니다.next는NULL또는 구조 체인의 다음 구조에 대한 포인터입니다. 핵심 OpenXR 또는 이 확장 프로그램에는 이러한 구조가 정의되어 있지 않습니다.supportsEyeTracking는 현재 시스템이 눈 추적을 지원하는지 나타내는XrBool32입니다.
애플리케이션은 xrGetSystemProperties를 호출할 때 XrSystemEyeTrackingPropertiesANDROID 구조로 XrSystemProperties를 확장하여 시스템이 눈 추적을 지원하는지 검사할 수 있습니다.
런타임이 supportsEyeTracking에 대해 XR_FALSE를 반환하는 경우에만 런타임은 xrCreateEyeTrackerANDROID에서 XR_ERROR_FEATURE_UNSUPPORTED를 반환해야 합니다(must).
올바른 사용 (암시적)
-
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 핸들입니다.
애플리케이션은 xrCreateEyeTrackerANDROID 함수를 사용하여 XrEyeTrackerANDROID 핸들을 만듭니다.
시스템에서 눈 추적을 지원하지 않는 경우 런타임은 xrCreateEyeTrackerANDROID에서 XR_ERROR_FEATURE_UNSUPPORTED를 반환해야 합니다(must).
올바른 사용 (암시적)
-
XR_ANDROID_eye_tracking확장 프로그램은 xrCreateEyeTrackerANDROID를 호출하기 전에 사용 설정해야 합니다. -
session는 유효한 XrSession 핸들이어야 합니다. -
createInfo는 유효한 XrEyeTrackerCreateInfoANDROID 구조에 대한 포인터여야 합니다. -
eyeTracker는 XrEyeTrackerANDROID 핸들에 대한 포인터여야 합니다.
반품 코드
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FEATURE_UNSUPPORTEDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
XrEyeTrackerCreateInfoANDROID 구조는 다음과 같이 정의됩니다.
typedef struct XrEyeTrackerCreateInfoANDROID {
XrStructureType type;
const void* next;
} XrEyeTrackerCreateInfoANDROID;
회원 설명
type는 이 구조의 XrStructureType입니다.next는NULL또는 구조 체인의 다음 구조에 대한 포인터입니다. 핵심 OpenXR 또는 이 확장 프로그램에는 이러한 구조가 정의되어 있지 않습니다.
XrEyeTrackerCreateInfoANDROID 구조는 XrEyeTrackerANDROID 핸들을 만드는 정보를 설명합니다.
올바른 사용 (암시적)
- XrEyeTrackerCreateInfoANDROID를 사용하기 전에
XR_ANDROID_eye_tracking확장 프로그램을 사용 설정해야 합니다. -
type은(는)XR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROID여야 합니다. -
next는NULL또는 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다.
xrDestroyEyeTrackerANDROID 함수는 다음과 같이 정의됩니다.
XrResult xrDestroyEyeTrackerANDROID(
XrEyeTrackerANDROID eyeTracker);
파라미터 설명
eyeTracker은 이전에 xrCreateEyeTrackerANDROID에서 만든 XrEyeTrackerANDROID입니다.
xrDestroyEyeTrackerANDROID 함수는 눈 추적 환경이 완료되면 eyeTracker 및 기본 리소스를 해제합니다.
올바른 사용 (암시적)
-
XR_ANDROID_eye_tracking확장 프로그램은 xrDestroyEyeTrackerANDROID를 호출하기 전에 사용 설정해야 합니다. -
eyeTracker는 유효한 XrEyeTrackerANDROID 핸들이어야 합니다.
스레드 안전
eyeTracker및 모든 하위 핸들에 대한 액세스는 외부에서 동기화되어야 합니다(must).
반품 코드
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
눈 정보 가져오기
xrGetCoarseTrackingEyesInfoANDROID 함수는 다음과 같이 정의됩니다.
XrResult xrGetCoarseTrackingEyesInfoANDROID(
XrEyeTrackerANDROID eyeTracker,
const XrEyesGetInfoANDROID* getInfo,
XrEyesANDROID* eyesOutput);
파라미터 설명
eyeTracker는 이전에 xrCreateEyeTrackerANDROID에서 만든 XrEyeTrackerANDROID입니다.getInfo은 눈 포즈 및 상태를 쿼리하기 위한 정보를 제공하는 데 사용되는 XrEyesGetInfoANDROID에 대한 포인터입니다.eyesOutput는 포즈와 상태를 포함하여 반환된 눈 정보를 포함하는 XrEyesANDROID에 대한 포인터입니다.
xrGetCoarseTrackingEyesInfoANDROID 함수는 사용자 개인 정보를 보호하는 방식으로 눈 상태 및 포즈에 관한 정보를 가져옵니다.
애플리케이션에 android.permission.EYE_TRACKING_COARSE 권한이 없는 경우 런타임은 XR_ERROR_PERMISSION_INSUFFICIENT를 반환해야 합니다(must).
눈 포즈는 XrEyesGetInfoANDROID :: baseSpace(XrEyesGetInfoANDROID :: time)로 표현됩니다.
언제든지 눈 포즈의 위치와 방향이 추적되거나 추적되지 않습니다. 즉, 런타임은 제공된 XrEyesANDROID :: eyes에서 XR_SPACE_LOCATION_POSITION_TRACKED_BIT 및 XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT를 모두 설정하거나 XR_SPACE_LOCATION_POSITION_TRACKED_BIT 및 XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT를 모두 지우고 XrEyesANDROID :: mode를 설정하여 추적 상태를 나타내야 합니다(must).
올바른 사용 (암시적)
-
XR_ANDROID_eye_tracking확장 프로그램은 xrGetCoarseTrackingEyesInfoANDROID를 호출하기 전에 사용 설정해야 합니다. -
eyeTracker는 유효한 XrEyeTrackerANDROID 핸들이어야 합니다. -
getInfo는 유효한 XrEyesGetInfoANDROID 구조에 대한 포인터여야 합니다. -
eyesOutput는 XrEyesANDROID 구조에 대한 포인터여야 합니다.
반품 코드
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
xrGetFineTrackingEyesInfoANDROID 함수는 다음과 같이 정의됩니다.
XrResult xrGetFineTrackingEyesInfoANDROID(
XrEyeTrackerANDROID eyeTracker,
const XrEyesGetInfoANDROID* getInfo,
XrEyesANDROID* eyesOutput);
파라미터 설명
eyeTracker은 이전에 xrCreateEyeTrackerANDROID에서 만든 XrEyeTrackerANDROID입니다.getInfo는 필요한 출력을 지정하는 데 사용되는 XrEyesGetInfoANDROID의 포인터입니다.eyesOutput는 포즈와 상태를 포함하여 반환된 눈 정보를 포함하는 XrEyesANDROID에 대한 포인터입니다.
xrGetFineTrackingEyesInfoANDROID 함수는 xrGetCoarseTrackingEyesInfoANDROID보다 더 높은 정밀도로 눈 상태 및 포즈 정보를 가져옵니다.
애플리케이션에 android.permission.EYE_TRACKING_FINE 권한이 없는 경우 런타임은 XR_ERROR_PERMISSION_INSUFFICIENT를 반환해야 합니다(must).
눈 정보는 XrEyesGetInfoANDROID :: time , XrEyesGetInfoANDROID :: baseSpace를 사용하여 xrGetFineTrackingEyesInfoANDROID를 호출할 때 확인되며 기본 공간을 기준으로 합니다. 런타임은 호출 시 XrEyesGetInfoANDROID :: baseSpace에 의해 정의된 위치를 확인해야 합니다.
언제든지 눈 포즈의 위치와 방향이 추적되거나 추적되지 않습니다. 즉, 런타임은 제공된 XrEyesANDROID :: eyes에서 XR_SPACE_LOCATION_POSITION_TRACKED_BIT 및 XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT를 모두 설정하거나 XR_SPACE_LOCATION_POSITION_TRACKED_BIT 및 XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT를 모두 지우고 XrEyesANDROID :: mode를 설정하여 추적 상태를 나타내야 합니다(must).
올바른 사용 (암시적)
- xrGetFineTrackingEyesInfoANDROID를 호출하기 전에
XR_ANDROID_eye_tracking확장 프로그램을 사용 설정해야 합니다. -
eyeTracker는 유효한 XrEyeTrackerANDROID 핸들이어야 합니다. -
getInfo는 유효한 XrEyesGetInfoANDROID 구조에 대한 포인터여야 합니다. -
eyesOutput는 XrEyesANDROID 구조에 대한 포인터여야 합니다.
반품 코드
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
XrEyesGetInfoANDROID 구조에는 눈 포즈와 상태를 가져오는 데 필요한 정보가 포함되어 있습니다.
typedef struct XrEyesGetInfoANDROID {
XrStructureType type;
const void* next;
XrTime time;
XrSpace baseSpace;
} XrEyesGetInfoANDROID;
회원 설명
type는 이 구조의 XrStructureType입니다.next는NULL또는 구조 체인의 다음 구조에 대한 포인터입니다. 핵심 OpenXR 또는 이 확장 프로그램에는 이러한 구조가 정의되어 있지 않습니다.time는baseSpace를 기준으로 좌표를 평가할XrTime입니다.baseSpace는 눈 포즈를 반환할 XrSpace입니다.
올바른 사용 (암시적)
- XrEyesGetInfoANDROID를 사용하기 전에
XR_ANDROID_eye_tracking확장 프로그램을 사용 설정해야 합니다. -
type은(는)XR_TYPE_EYES_GET_INFO_ANDROID여야 합니다. -
next는NULL또는 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다. -
baseSpace는 유효한 XrSpace 핸들이어야 합니다(must).
XrEyesANDROID 구조에는 추적된 눈에 관한 정보가 포함됩니다.
typedef struct XrEyesANDROID {
XrStructureType type;
void* next;
XrEyeANDROID eyes[XR_EYE_MAX_ANDROID];
XrEyeTrackingModeANDROID mode;
} XrEyesANDROID;
회원 설명
type는 이 구조의 XrStructureType입니다.next는NULL또는 구조 체인의 다음 구조에 대한 포인터입니다. 핵심 OpenXR 또는 이 확장 프로그램에는 이러한 구조가 정의되어 있지 않습니다.eyes는 XrEyeIndexANDROID로 색인이 생성된 왼쪽 눈과 오른쪽 눈의 XrEyeANDROID 배열(크기XR_EYE_MAX_ANDROID)입니다.mode는 현재 추적 중인 눈을 나타내는 XrEyeTrackingModeANDROID입니다.
올바른 사용 (암시적)
-
XR_ANDROID_eye_tracking확장 프로그램은 XrEyesANDROID를 사용하기 전에 사용 설정해야 합니다. -
type은(는)XR_TYPE_EYES_ANDROID여야 합니다. -
next는NULL또는 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다. -
eyes의 모든 요소는 유효한 XrEyeANDROID 구조여야 합니다(MUST). -
mode는 유효한 XrEyeTrackingModeANDROID 값이어야 합니다.
XrEyeANDROID 구조는 눈의 상태, 위치, 방향을 설명합니다.
typedef struct XrEyeANDROID {
XrEyeStateANDROID eyeState;
XrPosef eyePose;
} XrEyeANDROID;
회원 설명
eyeState는 눈의 XrEyeStateANDROID입니다.eyePose는 해당 XrEyesGetInfoANDROID ::baseSpace의 참조 프레임 내에서 눈동자의 위치와 방향을 정의하는 XrPosef입니다. 여기서 ID 방향은 +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,
XR_EYE_STATE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrEyeStateANDROID;
enum의 의미는 다음과 같습니다.
enum 설명
XR_EYE_STATE_INVALID_ANDROID
눈이 오류 상태이거나 존재하지 않음을 나타냅니다.
XR_EYE_STATE_GAZING_ANDROID
눈이 현재 응시 중임을 나타냅니다.
XR_EYE_STATE_SHUT_ANDROID
윙크나 깜박임으로 인해 현재 눈이 감겨 있음을 나타냅니다.
XrEyeIndexANDROID 열거는 왼쪽 또는 오른쪽 눈의 색인을 식별합니다.
typedef enum XrEyeIndexANDROID {
XR_EYE_INDEX_LEFT_ANDROID = 0,
XR_EYE_INDEX_RIGHT_ANDROID = 1,
XR_EYE_INDEX_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrEyeIndexANDROID;
enum의 의미는 다음과 같습니다.
enum 설명
XR_EYE_INDEX_LEFT_ANDROID
왼쪽 눈입니다.
XR_EYE_INDEX_RIGHT_ANDROID
오른쪽 눈입니다.
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,
XR_EYE_TRACKING_MODE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrEyeTrackingModeANDROID;
enum의 의미는 다음과 같습니다.
enum 설명
XR_EYE_TRACKING_MODE_NOT_TRACKING_ANDROID
현재 눈 추적이 활성 상태가 아님을 나타냅니다.
XR_EYE_TRACKING_MODE_RIGHT_ANDROID
오른쪽 눈만 추적 중임을 나타냅니다.
XR_EYE_TRACKING_MODE_LEFT_ANDROID
왼쪽 눈만 추적 중임을 나타냅니다.
XR_EYE_TRACKING_MODE_BOTH_ANDROID
왼쪽 눈과 오른쪽 눈을 모두 추적하고 있음을 나타냅니다.
#define XR_EYE_MAX_ANDROID 2
XR_EYE_MAX_ANDROID는 XrEyeANDROID 데이터가 보고되는 최대 눈 수입니다.
눈 추적 예시 코드
다음 예시 코드는 뷰 공간을 기준으로 눈 정보를 가져오는 방법을 보여줍니다.
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));
새 객체 유형
새 명령어
- xrCreateEyeTrackerANDROID
- xrDestroyEyeTrackerANDROID
- xrGetCoarseTrackingEyesInfoANDROID
- xrGetFineTrackingEyesInfoANDROID
새로운 구조
새 enum
새 enum 상수
XR_ANDROID_EYE_TRACKING_EXTENSION_NAMEXR_ANDROID_eye_tracking_SPEC_VERSIONXR_EYE_MAX_ANDROIDXrObjectType 확장:
XR_OBJECT_TYPE_EYE_TRACKER_ANDROID
XrStructureType 확장:
XR_TYPE_EYES_ANDROIDXR_TYPE_EYES_GET_INFO_ANDROIDXR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROIDXR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROID
문제
버전 기록
버전 1, 2025-01-17 (케니 베르카에메르)
- 초기 확장 프로그램 설명