이름 문자열
XR_ANDROID_avatar_eyes
확장 프로그램 유형
인스턴스 연장
등록된 부속 번호
457
버전
1
확장 프로그램 및 버전 종속 항목
최종 수정일
2024-09-30
IP 상태
알려진 IP 소유권 주장이 없습니다.
도움을 주신 분들
스펜서 퀸, Google
재러드 파인더, Google
레바나 첸, Google
개요
이 확장 프로그램을 사용하면 애플리케이션이 사용자의 눈의 위치와 방향은 물론 시선 추적 상태를 가져올 수 있습니다.
이 확장 프로그램은 아바타의 눈 모양과 상태 표현을 더 사실적으로 만드는 것을 목표로 합니다. 이 목적으로 다음을 수행합니다.
- 깜박임과 같이 추적되지 않는 상태를 허용합니다.
- 단안 또는 쌍안 추적을 허용합니다.
이 확장 프로그램은 다른 시선 추적 목적으로 사용해서는 안 됩니다. 상호작용에는 XR_EXT_eye_gaze_interaction
를 사용해야 합니다.
Eye Tracker
아이 트래커는 눈을 추적하고 사용자가 바라보는 위치를 정확하게 매핑하는 감지 장치입니다. 이 확장 프로그램의 주된 목적은 가상 장면에서 사용자 시선을 아바타에 매핑하는 것입니다.
눈 추적 데이터는 민감한 개인 정보가 될 수 있으며 개인 정보 보호 및 무결성과 밀접하게 연결되어 있습니다. 눈 추적 데이터를 저장하거나 전송하는 애플리케이션은 항상 사용자에게 이를 위한 적극적이고 구체적인 동의를 요청하는 것이 좋습니다.
- 애플리케이션이 시선 추적기에 액세스할 수 있을 때까지 애플리케이션이 활성 시선 추적기를 만들려고 하면
XR_ERROR_PERMISSION_INSUFFICIENT
이 수신됩니다.
시스템 기능 검사
애플리케이션은 xrGetSystemProperties를 호출할 때 XrSystemAvatarEyesPropertiesANDROID 구조를 XrSystemProperties에 연결하여 시스템이 아바타 눈을 지원하는지 검사할 수 있습니다. supportsAvatarEyes
가 XR_FALSE
를 반환하면 애플리케이션은 xrCreateEyeTrackerANDROID에서 XR_ERROR_FEATURE_UNSUPPORTED
를 수신합니다.
typedef struct XrSystemAvatarEyesPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsAvatarEyes;
} XrSystemAvatarEyesPropertiesANDROID;
회원 설명
type
은 이 구조의 XrStructureType입니다.next
는NULL
또는 구조 체인의 다음 구조에 대한 포인터입니다. 핵심 OpenXR 또는 이 확장 프로그램에는 이러한 구조가 정의되어 있지 않습니다.supportsAvatarEyes
는 현재 시스템에서 아바타 눈을 지원하는지 나타내는XrBool32
입니다.
유효한 사용 (암시적)
- XrSystemAvatarEyesPropertiesANDROID를 사용하기 전에 XR_ANDROID_avatar_eyes 확장 프로그램을 사용 설정해야 합니다.
type
는XR_TYPE_SYSTEM_AVATAR_EYES_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
이 반환됩니다.
유효한 사용 (암시적)
- xrCreateEyeTrackerANDROID를 호출하기 전에
XR_ANDROID_avatar_eyes
확장 프로그램을 사용 설정해야 합니다. session
는 유효한 XrSession 핸들여야 합니다.createInfo
는 유효한 XrEyeTrackerCreateInfoANDROID 구조체에 대한 포인터여야 합니다.eyeTracker
는 XrEyeTrackerANDROID 핸들에 대한 포인터여야 합니다.
반품 코드
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
XrEyeTrackerCreateInfoANDROID 구조는 다음과 같이 정의됩니다.
typedef struct XrEyeTrackerCreateInfoANDROID {
XrStructureType type;
void* next;
} XrEyeTrackerCreateInfoANDROID;
회원 설명
type
은 이 구조의 XrStructureType입니다.next
는NULL
또는 구조 체인의 다음 구조에 대한 포인터입니다. 핵심 OpenXR 또는 이 확장 프로그램에는 이러한 구조가 정의되어 있지 않습니다.
XrEyeTrackerCreateInfoANDROID 구조는 XrEyeTrackerANDROID 핸들을 만드는 정보를 설명합니다.
유효한 사용 (암시적)
- XrEyeTrackerCreateInfoANDROID를 사용하기 전에
XR_ANDROID_avatar_eyes
확장 프로그램을 사용 설정해야 합니다. type
는XR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROID
여야 합니다.next
는NULL
이거나 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다.
xrDestroyEyeTrackerANDROID 함수는 다음과 같이 정의됩니다.
XrResult xrDestroyEyeTrackerANDROID(
XrEyeTrackerANDROID eyeTracker);
매개변수 설명
eyeTracker
는 이전에 xrCreateEyeTrackerANDROID로 만든 XrEyeTrackerANDROID입니다.
xrDestroyEyeTrackerANDROID 함수는 눈 추적 환경을 완료하면 eyeTracker
및 기본 리소스를 해제합니다.
유효한 사용 (암시적)
- xrDestroyEyeTrackerANDROID를 호출하기 전에
XR_ANDROID_avatar_eyes
확장 프로그램을 사용 설정해야 합니다. eyeTracker
는 유효한 XrEyeTrackerANDROID 핸들여야 합니다.
스레드 안전
eyeTracker
및 모든 하위 핸들에 대한 액세스는 외부에서 동기화되어야 함
반품 코드
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_HANDLE_INVALID
눈 정보 가져오기
xrGetEyesInfoANDROID 함수는 다음과 같이 정의됩니다.
XrResult xrGetEyesInfoANDROID(
XrEyeTrackerANDROID eyeTracker,
const XrEyesGetInfoANDROID* getInfo,
XrEyesANDROID* infoOutput);
매개변수 설명
eyeTracker
는 이전에 xrCreateEyeTrackerANDROID로 만든 XrEyeTrackerANDROID입니다.getInfo
는 필요한 출력을 지정하는 데 사용되는 XrEyesGetInfoANDROID에 대한 포인터입니다.infoOutput
는 포즈 및 상태를 포함하여 반환된 눈 정보를 포함하는 XrEyesANDROID에 대한 포인터입니다.
xrGetEyesInfoANDROID 함수는 눈 상태 및 자세에 관한 정보를 가져옵니다.
눈 정보는 XrEyesGetInfoANDROID::time, XrEyesGetInfoANDROID::baseSpace를 사용하여 xrGetEyesInfoANDROID를 호출할 때 확인되고 기본 공간을 기준으로 합니다.
어느 시점에서든 눈 자세의 위치와 방향이 모두 추적되거나 추적 해제됩니다. 즉, 애플리케이션은 제공된 XrEyesANDROID::eyes에서 XR_SPACE_LOCATION_POSITION_TRACKED_BIT
및 XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT
가 모두 설정되거나 삭제되고 XrEyesANDROID::mode가 추적 상태를 나타낼 것으로 예상할 수 있습니다.
유효한 사용 (암시적)
- xrGetEyesInfoANDROID를 호출하기 전에
XR_ANDROID_avatar_eyes
확장 프로그램을 사용 설정해야 합니다. eyeTracker
는 유효한 XrEyeTrackerANDROID 핸들여야 합니다.getInfo
는 유효한 XrEyesGetInfoANDROID 구조체에 대한 포인터여야 합니다.infoOutput
는 XrEyesANDROID 구조를 가리키는 포인터여야 함
반품 코드
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
XrEyesGetInfoANDROID 구조에는 눈 포즈와 상태를 검색하는 데 필요한 정보가 포함되어 있습니다.
typedef struct XrEyesGetInfoANDROID {
XrStructureType type;
void* next;
XrTime time;
XrSpace baseSpace;
} XrEyesGetInfoANDROID;
회원 설명
type
은 이 구조의 XrStructureType입니다.next
는NULL
또는 구조 체인의 다음 구조에 대한 포인터입니다. 핵심 OpenXR 또는 이 확장 프로그램에는 이러한 구조가 정의되어 있지 않습니다.time
는baseSpace
를 기준으로 좌표를 평가할XrTime
입니다.baseSpace
눈 포즈는time
의 이 XrSpace를 기준으로 합니다.
유효한 사용 (암시적)
- XrEyesGetInfoANDROID를 사용하기 전에
XR_ANDROID_avatar_eyes
확장 프로그램을 사용 설정해야 합니다. type
는XR_TYPE_EYES_GET_INFO_ANDROID
여야 합니다.next
는NULL
이거나 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다.baseSpace
는 유효한 XrSpace 핸들여야 합니다.
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 배열입니다.mode
는 눈이 추적 중인지 여부와 추적 중인 눈을 나타내는 XrEyeTrackingModeANDROID입니다.
유효한 사용 (암시적)
- XrEyesANDROID를 사용하기 전에
XR_ANDROID_avatar_eyes
확장 프로그램을 사용 설정해야 합니다. type
는XR_TYPE_EYES_ANDROID
여야 합니다.next
는NULL
이거나 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다.eyes
의 모든 요소는 유효한 XrEyeANDROID 구조여야 합니다.mode
은(는) 유효한 XrEyeTrackingModeANDROID 값이어야 합니다.
XrEyeANDROID 구조는 눈의 상태, 위치, 방향을 설명합니다.
typedef struct XrEyeANDROID {
XrEyeStateANDROID eyeState;
XrPosef eyePose;
} XrEyeANDROID;
회원 설명
eyeState
는 눈의 XrEyeStateANDROID입니다.pose
는 상응하는 XrEyesGetInfoANDROID::baseSpace의 참조 프레임 내에서 눈의 원점의 위치와 방향을 정의하는 XrPosef입니다. 여기서 ID 방향은 +Z가 사용자의 눈을 향하고 +X가 오른쪽을, +Y가 위쪽을 향하는 좌표축을 나타냅니다.
유효한 사용 (암시적)
- XrEyeANDROID를 사용하기 전에
XR_ANDROID_avatar_eyes
확장 프로그램을 사용 설정해야 합니다. eyeState
은(는) 유효한 XrEyeStateANDROID 값이어야 합니다.
XrEyeStateANDROID 열거형은 추적된 눈의 다양한 상태를 식별합니다.
typedef enum XrEyeStateANDROID {
XR_EYE_STATE_INVALID_ANDROID = 0,
XR_EYE_STATE_GAZING_ANDROID = 1,
XR_EYE_STATE_SHUT_ANDROID = 2
} XrEyeStateANDROID;
enum은 다음과 같은 의미를 갖습니다.
enum |
설명 |
|
눈이 오류 상태이거나 존재하지 않음을 나타냅니다. |
|
눈이 응시하고 있음을 나타냅니다. |
|
눈을 깜박이거나 윙크하여 눈이 감겨 있음을 나타냅니다. |
XrEyeIndexANDROID 열거형은 왼쪽 또는 오른쪽 눈의 색인을 식별합니다.
typedef enum XrEyeIndexANDROID {
XR_EYE_INDEX_LEFT_ANDROID = 0,
XR_EYE_INDEX_RIGHT_ANDROID = 1
} XrEyeIndexANDROID;
enum은 다음과 같은 의미를 갖습니다.
enum |
설명 |
|
왼쪽 눈입니다. |
|
오른쪽 눈입니다. |
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
} XrEyeTrackingModeANDROID;
enum은 다음과 같은 의미를 갖습니다.
enum |
설명 |
|
눈 추적이 활성화되어 있지 않음을 나타냅니다. |
|
오른쪽 눈만 추적 중임을 나타냅니다. |
|
왼쪽 눈만 추적 중임을 나타냅니다. |
|
왼쪽 눈과 오른쪽 눈이 모두 추적 중임을 나타냅니다. |
눈 추적 코드 예시
다음 코드 예는 뷰 공간을 기준으로 눈 정보를 가져오는 방법을 보여줍니다.
XrSession session; // previously initialized, for example, 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_xrGetEyesInfoANDROID xrGetEyesInfoANDROID; // 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 eyesInfo{.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(xrGetEyesInfoANDROID(eyeTracker, &eyesGetInfo, &eyesInfo));
// 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));
새로운 객체 유형
새로운 enum 상수
XR_EYE_MAX_ANDROID
XrObjectType 열거형은 다음으로 확장됩니다.
XR_OBJECT_TYPE_EYE_TRACKER_ANDROID
XrStructureType 열거형은 다음과 같이 확장됩니다.
XR_TYPE_EYES_ANDROID
XR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROID
XR_TYPE_EYES_GET_INFO_ANDROID
XR_TYPE_SYSTEM_AVATAR_EYES_PROPERTIES_ANDROID
새로운 enum
새로운 구조
- XrEyeANDROID
- XrEyesANDROID
- XrEyesGetInfoANDROID
- XrEyeTrackerCreateInfoANDROID
- XrSystemAvatarEyesPropertiesANDROID
새로운 함수
문제
버전 기록
- 버전 1, 2024년 9월 4일 (레바나 첸)
- 초기 확장 프로그램 설명