이름 문자열
XR_ANDROID_face_tracking
확장 프로그램 유형
인스턴스 연장
등록된 부속 번호
459
버전
1
확장 프로그램 및 버전 종속 항목
최종 수정일
2024-09-06
IP 상태
알려진 IP 소유권 주장이 없습니다.
도움을 주신 분들
스펜서 퀸, Google
재러드 파인더, Google
레바나 첸, Google
개요
이 확장 프로그램을 사용하면 애플리케이션이 혼합 도형의 가중치를 가져오고 XR 환경에서 얼굴 표정을 렌더링할 수 있습니다.
이 확장 프로그램은 가상 공간에서 사실적인 아바타와 사용자의 표현적인 표현을 만드는 데 필요한 정보를 제공하기 위한 것입니다. 애플리케이션은 혼합 도형의 가중치를 가져오기 전에 얼굴 보정 활성화를 확인할 수 있습니다.
얼굴 추적기
얼굴 추적기는 사용자 대상 이미지 스트림 및 카메라 보정을 통해 표정을 추적하는 감지 기기입니다. 이 확장 프로그램의 주된 목적은 가상 장면에서 사용자 얼굴 표정을 아바타에 매핑하는 것입니다.
얼굴 추적 데이터는 민감한 개인 정보이며 개인 정보 보호 및 무결성과 밀접하게 연결되어 있습니다. 얼굴 추적 데이터를 저장하거나 전송하는 애플리케이션은 항상 사용자에게 이를 위해 적극적이고 구체적인 동의를 구하는 것이 좋습니다.
- 애플리케이션이 얼굴 추적기에 액세스할 수 있을 때까지 애플리케이션은 활성 얼굴 추적기를 만들 때
XR_ERROR_PERMISSION_INSUFFICIENT
을 수신합니다. - xrGetFaceStateANDROID를 사용하여 얼굴 상태를 가져올 때 애플리케이션 액세스가 허용되지 않으면 XrFaceStateANDROID::isValid이
XR_TRUE
을 반환하지 않습니다.
얼굴 추적기 핸들 만들기
XR_DEFINE_HANDLE(XrFaceTrackerANDROID)
XrFaceTrackerANDROID 핸들은 얼굴 추적을 위한 얼굴 추적기를 나타냅니다.
이 핸들은 이 확장 프로그램의 다른 함수를 사용하여 얼굴 추적 데이터에 액세스하는 데 사용할 수 있습니다.
xrCreateFaceTrackerANDROID 함수는 다음과 같이 정의됩니다.
XrResult xrCreateFaceTrackerANDROID(
XrSession session,
const XrFaceTrackerCreateInfoANDROID* createInfo,
XrFaceTrackerANDROID* faceTracker);
매개변수 설명
session
는 얼굴 추적기가 활성화되는 XrSession 핸들입니다.createInfo
는 얼굴 추적기를 지정하는 데 사용되는 XrFaceTrackerCreateInfoANDROID입니다.faceTracker
는 반환된 XrFaceTrackerANDROID 핸들입니다.
애플리케이션은 xrCreateFaceTrackerANDROID 함수를 사용하여 XrFaceTrackerANDROID 핸들을 만들 수 있습니다.
시스템에서 얼굴 추적을 지원하지 않으면 xrCreateFaceTrackerANDROID가 XR_ERROR_FEATURE_UNSUPPORTED
를 반환합니다.
유효한 사용 (암시적)
- xrCreateFaceTrackerANDROID를 호출하기 전에
XR_ANDROID_face_tracking
확장 프로그램을 사용 설정해야 합니다. session
는 유효한 XrSession 핸들여야 합니다.createInfo
는 유효한 XrFaceTrackerCreateInfoANDROID 구조체에 대한 포인터여야 합니다.faceTracker
는 XrFaceTrackerANDROID 핸들에 대한 포인터여야 합니다.
반품 코드
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
XrFaceTrackerCreateInfoANDROID 구조는 다음과 같이 설명됩니다.
typedef struct XrFaceTrackerCreateInfoANDROID {
XrStructureType type;
void* next;
} XrFaceTrackerCreateInfoANDROID;
회원 설명
type
은 이 구조의 XrStructureType입니다.next
는NULL
또는 구조 체인의 다음 구조에 대한 포인터입니다. 핵심 OpenXR 또는 이 확장 프로그램에는 이러한 구조가 정의되어 있지 않습니다.
XrFaceTrackerCreateInfoANDROID 구조는 XrFaceTrackerANDROID 핸들을 만드는 정보를 설명합니다.
유효한 사용 (암시적)
- XrFaceTrackerCreateInfoANDROID를 사용하기 전에
XR_ANDROID_face_tracking
확장 프로그램을 사용 설정해야 합니다. type
는XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID
여야 합니다.next
는NULL
이거나 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다.
xrDestroyFaceTrackerANDROID 함수는 다음과 같이 정의됩니다.
XrResult xrDestroyFaceTrackerANDROID(
XrFaceTrackerANDROID faceTracker);
매개변수 설명
faceTracker
은 이전에 xrCreateFaceTrackerANDROID로 만든 XrFaceTrackerANDROID입니다.
xrDestroyFaceTrackerANDROID 함수는 얼굴 추적 환경이 종료되면 faceTracker
및 기본 리소스를 해제합니다.
유효한 사용 (암시적)
- xrDestroyFaceTrackerANDROID를 호출하기 전에
XR_ANDROID_face_tracking
확장 프로그램을 사용 설정해야 합니다. faceTracker
는 유효한 XrFaceTrackerANDROID 핸들여야 합니다.
스레드 안전
faceTracker
및 모든 하위 핸들에 대한 액세스는 외부에서 동기화되어야 함
반품 코드
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_HANDLE_INVALID
얼굴 보정 확인
xrGetFaceCalibrationStateANDROID
함수는 다음과 같이 정의됩니다.
XrResult xrGetFaceCalibrationStateANDROID(
XrFaceTrackerANDROID faceTracker,
XrBool32* faceIsCalibratedOutput);
매개변수 설명
faceTracker
은 이전에 xrCreateFaceTrackerANDROID로 만든 XrFaceTrackerANDROID입니다.faceIsCalibratedOutput
는 얼굴 추적기가 보정되었는지 여부를 나타냅니다.
애플리케이션은 xrGetFaceCalibrationStateANDROID 함수를 사용하여 얼굴 보정 상태를 확인할 수 있습니다.
시스템에서 얼굴 보정을 지원하지 않으면 xrGetFaceCalibrationStateANDROID가 XR_ERROR_FEATURE_UNSUPPORTED
를 반환합니다. 그렇지 않으면 얼굴 보정 상태를 반영하기 위해 faceIsCalibratedOutput
가 XR_TRUE
로 설정될 수 있습니다.
유효한 사용 (암시적)
- xrGetFaceCalibrationStateANDROID를 호출하기 전에
XR_ANDROID_face_tracking
확장 프로그램을 사용 설정해야 합니다. faceTracker
는 유효한 XrFaceTrackerANDROID 핸들여야 합니다.faceIsCalibratedOutput
은(는)XrBool32
값을 가리키는 포인터여야 합니다.
반품 코드
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
얼굴 표정 가져오기
xrGetFaceStateANDROID 함수는 특정 시점의 얼굴 표정의 블렌드 도형을 반환합니다.
XrResult xrGetFaceStateANDROID(
XrFaceTrackerANDROID faceTracker,
const XrFaceStateGetInfoANDROID* getInfo,
XrFaceStateANDROID* faceStateOutput);
매개변수 설명
faceTracker
은 이전에 xrCreateFaceTrackerANDROID로 만든 XrFaceTrackerANDROID입니다.getInfo
은 얼굴 표현을 가져오는 정보를 설명하는 XrFaceStateGetInfoANDROID에 대한 포인터입니다.faceStateOutput
는 반환된 얼굴 추적 상태 및 표정을 수신하는 XrFaceStateANDROID에 대한 포인터입니다.
유효한 사용 (암시적)
- xrGetFaceStateANDROID를 호출하기 전에
XR_ANDROID_face_tracking
확장 프로그램을 사용 설정해야 합니다. faceTracker
는 유효한 XrFaceTrackerANDROID 핸들여야 합니다.getInfo
는 유효한 XrFaceStateGetInfoANDROID 구조체에 대한 포인터여야 합니다.faceStateOutput
는 XrFaceStateANDROID 구조체에 대한 포인터여야 함
반품 코드
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
XrFaceStateGetInfoANDROID 구조는 얼굴 표정을 얻기 위한 정보를 설명합니다.
typedef struct XrFaceStateGetInfoANDROID {
XrStructureType type;
void* next;
XrTime time;
} XrFaceStateGetInfoANDROID;
회원 설명
type
은 이 구조의 XrStructureType입니다.next
는NULL
또는 구조 체인의 다음 구조에 대한 포인터입니다. 핵심 OpenXR 또는 이 확장 프로그램에는 이러한 구조가 정의되어 있지 않습니다.time
는 표정 표현이 요청되는XrTime
입니다.
애플리케이션은 렌더링된 프레임의 예상 표시 시간과 동일한 시간을 요청해야 합니다.
유효한 사용 (암시적)
- XrFaceStateGetInfoANDROID를 사용하기 전에
XR_ANDROID_face_tracking
확장 프로그램을 사용 설정해야 합니다. type
는XR_TYPE_FACE_STATE_GET_INFO_ANDROID
여야 합니다.next
는NULL
이거나 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다.
XrFaceStateANDROID 구조는 얼굴 추적 상태와 얼굴 표정을 반환합니다.
typedef struct XrFaceStateANDROID {
XrStructureType type;
void* next;
uint32_t parametersCapacityInput;
uint32_t parametersCountOutput;
float* parameters;
XrFaceTrackingStateANDROID faceTrackingState;
XrTime sampleTime;
XrBool32 isValid;
} XrFaceStateANDROID;
회원 설명
type
은 이 구조의 XrStructureType입니다.next
는NULL
또는 구조 체인의 다음 구조에 대한 포인터입니다. 핵심 OpenXR 또는 이 확장 프로그램에는 이러한 구조가 정의되어 있지 않습니다.parametersCapacityInput
는parameters
배열의 용량을 설명하는uint32_t
이거나 필요한 용량을 검색하라는 요청을 나타내는 0입니다.parametersCountOutput
는parameters
의 개수를 나타내는uint32_t
이거나parametersCapacityInput
가 충분하지 않은 경우 필요한 용량입니다.parameters
는 얼굴 표정 혼합 도형의 가중치로 채워질 애플리케이션 할당float
배열의 포인터입니다.faceTrackingState
는 얼굴 추적의 유효성 상태의XrFaceTrackingStateANDROID
입니다.sampleTime
는 반환된 표현식이 추적되거나 추론되는XrTime
시간입니다. 이 값은 당시에 추론이 성공한 경우 표현식 가중치가 요청된 시간과 같습니다.isValid
는 데이터가 현재 프레임에서 가져온 것이 아니더라도 데이터가 유효한지 여부를 나타냅니다.- 필요한
parameters
크기를 검색하는 방법에 관한 자세한 설명은 버퍼 크기 매개변수 섹션을 참고하세요.
애플리케이션은 parametersCapacityInput
를 XR_FACE_PARAMETER_COUNT_ANDROID
로 설정하여 XrFaceParameterIndicesANDROID로 색인이 생성된 얼굴 표정을 가져올 수 있습니다.
반환된 parameters
는 현재 표정의 혼합 도형의 가중치를 나타냅니다.
parameters
배열 업데이트는 애플리케이션이 상응하는 얼굴 표정 enum (예: XrFaceParameterIndicesANDROID)을 사용하여 요소의 색인을 생성할 수 있도록 정렬됩니다.
유효한 사용 (암시적)
- XrFaceStateANDROID를 사용하기 전에
XR_ANDROID_face_tracking
확장 프로그램을 사용 설정해야 합니다. type
는XR_TYPE_FACE_STATE_ANDROID
여야 합니다.next
는NULL
이거나 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다.parametersCapacityInput
가0, parameters
가 아닌 경우parametersCapacityInput float
값 배열의 포인터여야 함faceTrackingState
은(는) 유효한 XrFaceTrackingStateANDROID 값이어야 합니다.
XrFaceTrackingStateANDROID 열거형은 얼굴 추적기의 다양한 상태를 식별합니다.
typedef enum XrFaceTrackingStateANDROID {
XR_FACE_TRACKING_STATE_PAUSED_ANDROID = 0,
XR_FACE_TRACKING_STATE_STOPPED_ANDROID = 1,
XR_FACE_TRACKING_STATE_TRACKING_ANDROID = 2
} XrFaceTrackingStateANDROID;
enum은 다음과 같은 의미를 갖습니다.
enum |
설명 |
|
얼굴 추적이 일시중지되었지만 향후 재개될 수 있음을 나타냅니다. |
|
추적이 중지되었지만 클라이언트에 여전히 활성 얼굴 추적기가 있습니다. |
|
얼굴이 추적되고 현재 자세를 취하고 있습니다. |
혼합 도형의 규칙
이 확장은 축소된 G-Nome 형식의 XR_FACE_PARAMETER_COUNT_ANDROID
를 통해 63개의 블렌드 도형을 정의합니다. 이 열거형의 각 매개변수는 블렌드 모양 배열의 색인으로, 값은 float
유형이고 런타임은 1 - 0으로 정규화합니다.
typedef enum XrFaceParameterIndicesANDROID {
XR_FACE_PARAMETER_INDICES_BROW_LOWERER_L_ANDROID = 0,
XR_FACE_PARAMETER_INDICES_BROW_LOWERER_R_ANDROID = 1,
XR_FACE_PARAMETER_INDICES_CHEEK_PUFF_L_ANDROID = 2,
XR_FACE_PARAMETER_INDICES_CHEEK_PUFF_R_ANDROID = 3,
XR_FACE_PARAMETER_INDICES_CHEEK_RAISER_L_ANDROID = 4,
XR_FACE_PARAMETER_INDICES_CHEEK_RAISER_R_ANDROID = 5,
XR_FACE_PARAMETER_INDICES_CHEEK_SUCK_L_ANDROID = 6,
XR_FACE_PARAMETER_INDICES_CHEEK_SUCK_R_ANDROID = 7,
XR_FACE_PARAMETER_INDICES_CHIN_RAISER_B_ANDROID = 8,
XR_FACE_PARAMETER_INDICES_CHIN_RAISER_T_ANDROID = 9,
XR_FACE_PARAMETER_INDICES_DIMPLER_L_ANDROID = 10,
XR_FACE_PARAMETER_INDICES_DIMPLER_R_ANDROID = 11,
XR_FACE_PARAMETER_INDICES_EYES_CLOSED_L_ANDROID = 12,
XR_FACE_PARAMETER_INDICES_EYES_CLOSED_R_ANDROID = 13,
XR_FACE_PARAMETER_INDICES_EYES_LOOK_DOWN_L_ANDROID = 14,
XR_FACE_PARAMETER_INDICES_EYES_LOOK_DOWN_R_ANDROID = 15,
XR_FACE_PARAMETER_INDICES_EYES_LOOK_LEFT_L_ANDROID = 16,
XR_FACE_PARAMETER_INDICES_EYES_LOOK_LEFT_R_ANDROID = 17,
XR_FACE_PARAMETER_INDICES_EYES_LOOK_RIGHT_L_ANDROID = 18,
XR_FACE_PARAMETER_INDICES_EYES_LOOK_RIGHT_R_ANDROID = 19,
XR_FACE_PARAMETER_INDICES_EYES_LOOK_UP_L_ANDROID = 20,
XR_FACE_PARAMETER_INDICES_EYES_LOOK_UP_R_ANDROID = 21,
XR_FACE_PARAMETER_INDICES_INNER_BROW_RAISER_L_ANDROID = 22,
XR_FACE_PARAMETER_INDICES_INNER_BROW_RAISER_R_ANDROID = 23,
XR_FACE_PARAMETER_INDICES_JAW_DROP_ANDROID = 24,
XR_FACE_PARAMETER_INDICES_JAW_SIDEWAYS_LEFT_ANDROID = 25,
XR_FACE_PARAMETER_INDICES_JAW_SIDEWAYS_RIGHT_ANDROID = 26,
XR_FACE_PARAMETER_INDICES_JAW_THRUST_ANDROID = 27,
XR_FACE_PARAMETER_INDICES_LID_TIGHTENER_L_ANDROID = 28,
XR_FACE_PARAMETER_INDICES_LID_TIGHTENER_R_ANDROID = 29,
XR_FACE_PARAMETER_INDICES_LIP_CORNER_DEPRESSOR_L_ANDROID = 30,
XR_FACE_PARAMETER_INDICES_LIP_CORNER_DEPRESSOR_R_ANDROID = 31,
XR_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_L_ANDROID = 32,
XR_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_R_ANDROID = 33,
XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LB_ANDROID = 34,
XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LT_ANDROID = 35,
XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RB_ANDROID = 36,
XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RT_ANDROID = 37,
XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_L_ANDROID = 38,
XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_R_ANDROID = 39,
XR_FACE_PARAMETER_INDICES_LIP_PUCKER_L_ANDROID = 40,
XR_FACE_PARAMETER_INDICES_LIP_PUCKER_R_ANDROID = 41,
XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_L_ANDROID = 42,
XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_R_ANDROID = 43,
XR_FACE_PARAMETER_INDICES_LIP_SUCK_LB_ANDROID = 44,
XR_FACE_PARAMETER_INDICES_LIP_SUCK_LT_ANDROID = 45,
XR_FACE_PARAMETER_INDICES_LIP_SUCK_RB_ANDROID = 46,
XR_FACE_PARAMETER_INDICES_LIP_SUCK_RT_ANDROID = 47,
XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_L_ANDROID = 48,
XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_R_ANDROID = 49,
XR_FACE_PARAMETER_INDICES_LIPS_TOWARD_ANDROID = 50,
XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_L_ANDROID = 51,
XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_R_ANDROID = 52,
XR_FACE_PARAMETER_INDICES_MOUTH_LEFT_ANDROID = 53,
XR_FACE_PARAMETER_INDICES_MOUTH_RIGHT_ANDROID = 54,
XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_L_ANDROID = 55,
XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_R_ANDROID = 56,
XR_FACE_PARAMETER_INDICES_OUTER_BROW_RAISER_L_ANDROID = 57,
XR_FACE_PARAMETER_INDICES_OUTER_BROW_RAISER_R_ANDROID = 58,
XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_L_ANDROID = 59,
XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_R_ANDROID = 60,
XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_L_ANDROID = 61,
XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_R_ANDROID = 62
} XrFaceParameterIndicesANDROID;
색인 | 이름 | 참조 이미지 | |
---|---|---|---|
0 | BROW_LOWERER_L | ||
1 | BROW_LOWERER_R | ||
2 | CHEEK_PUFF_L | ||
3 | CHEEK_PUFF_R | ||
4 | CHEEK_RAISER_L | ||
5 | CHEEK_RAISER_R | ||
6 | CHEEK_SUCK_L | ||
7 | CHEEK_SUCK_R | ||
8 | CHIN_RAISER_B | ||
9 | CHIN_RAISER_T | ||
10 | DIMPLER_L | ||
11 | DIMPLER_R | ||
12 | EYES_CLOSED_L | ||
13 | EYES_CLOSED_R | ||
14 | EYES_LOOK_DOWN_L | ||
15 | EYES_LOOK_DOWN_R | ||
16 | EYES_LOOK_LEFT_L | ||
17 | EYES_LOOK_LEFT_R | ||
18 | EYES_LOOK_RIGHT_L | ||
19 | EYES_LOOK_RIGHT_R | ||
20 | EYES_LOOK_UP_L | ||
21 | EYES_LOOK_UP_R | ||
22 | INNER_BROW_RAISER_L | ||
23 | INNER_BROW_RAISER_R | ||
24 | JAW_DROP | ||
25 | JAW_SIDEWAYS_LEFT | ||
26 | JAW_SIDEWAYS_RIGHT | ||
27 | JAW_THRUST | ||
28 | LID_TIGHTENER_L | ||
29 | LID_TIGHTENER_R | ||
30 | LIP_CORNER_DEPRESSOR_L | ||
31 | LIP_CORNER_DEPRESSOR_R | ||
32 | LIP_CORNER_PULLER_L | ||
33 | LIP_CORNER_PULLER_R | ||
34 | LIP_FUNNELER_LB | ||
35 | LIP_FUNNELER_LT | ||
36 | LIP_FUNNELER_RB | ||
37 | LIP_FUNNELER_RT | ||
38 | LIP_PRESSOR_L | ||
39 | LIP_PRESSOR_R | ||
40 | LIP_PUCKER_L | ||
41 | LIP_PUCKER_R | ||
42 | LIP_STRETCHER_L | ||
43 | LIP_STRETCHER_R | ||
44 | LIP_SUCK_LB | ||
45 | LIP_SUCK_LT | ||
46 | LIP_SUCK_RB | ||
47 | LIP_SUCK_RT | ||
48 | LIP_TIGHTENER_L | ||
49 | LIP_TIGHTENER_R | ||
50 | LIPS_TOWARD | ||
51 | LOWER_LIP_DEPRESSOR_L | ||
52 | LOWER_LIP_DEPRESSOR_R | ||
53 | MOUTH_LEFT | ||
54 | MOUTH_RIGHT | ||
55 | NOSE_WRINKLER_L | ||
56 | NOSE_WRINKLER_R | ||
57 | OUTER_BROW_RAISER_L | ||
58 | OUTER_BROW_RAISER_R | ||
59 | UPPER_LID_RAISER_L | ||
60 | UPPER_LID_RAISER_R | ||
61 | UPPER_LIP_RAISER_L | ||
62 | UPPER_LIP_RAISER_R |
얼굴 추적 코드 예시
다음 예시 코드는 얼굴 표정 블렌드 도형의 모든 가중치를 가져오는 방법을 보여줍니다.
XrSession session; // previously initialized, for example created at app startup.
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateFaceTrackerANDROID xrCreateFaceTrackerANDROID; // previously initialized
PFN_xrDestroyFaceTrackerANDROID xrDestroyFaceTrackerANDROID; // previously initialized
PFN_xrGetFaceStateANDROID xrGetFaceStateANDROID; // previously initialized
PFN_xrGetFaceCalibrationStateANDROID xrGetFaceCalibrationStateANDROID; // previously initialized
XrFaceTrackerANDROID faceTracker;
XrFaceTrackerCreateInfoANDROID
createInfo{.type = XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID,
.next = nullptr};
CHK_XR(xrCreateFaceTrackerANDROID(session, &createInfo, &faceTracker));
// If the system supports face calibration:
bool isCalibrated;
CHK_XR(xrGetFaceCalibrationStateANDROID(faceTracker, &isCalibrated));
if (!isCalibrated) {
// Redirect the user to system calibration setting.
}
XrFaceStateANDROID faceState;
float faceExpressionParameters[XR_FACE_PARAMETER_COUNT_ANDROID];
faceState.type = XR_TYPE_FACE_STATE_ANDROID;
faceState.next = nullptr;
faceState.parametersCapacityInput = XR_FACE_PARAMETER_COUNT_ANDROID;
faceState.parameters = faceExpressionParameters;
while (1) {
// ...
// For every frame in the frame loop
// ...
XrFrameState frameState; // previously returned from xrWaitFrame
XrFaceStateGetInfoANDROID faceGetInfo{
.type = XR_TYPE_FACE_STATE_GET_INFO_ANDROID,
.next = nullptr,
.time = frameState.predictedDisplayTime,
};
CHECK_XR(xrGetFaceStateANDROID(faceTracker, &faceGetInfo, &faceState));
if (faceState.isValid) {
for (uint32_t i = 0; i < XR_FACE_PARAMETER_COUNT_ANDROID; ++i) {
// parameters[i] contains a weight of specific blend shape
}
}
}
// after usage
CHK_XR(xrDestroyFaceTrackerANDROID(faceTracker));
새로운 객체 유형
새로운 enum 상수
XR_FACE_PARAMETER_COUNT_ANDROID
XrObjectType 열거형은 다음으로 확장됩니다.
XR_OBJECT_TYPE_FACE_TRACKER_ANDROID
XrStructureType 열거형은 다음과 같이 확장됩니다.
XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID
XR_TYPE_FACE_STATE_GET_INFO_ANDROID
XR_TYPE_FACE_STATE_ANDROID
새로운 enum
새로운 구조
새로운 함수
- xrCreateFaceTrackerANDROID
- xrDestroyFaceTrackerANDROID
- xrGetFaceStateANDROID
- xrGetFaceCalibrationStateANDROID
문제
버전 기록
- 버전 1, 2024년 9월 5일 (레바나 첸)
- 초기 확장 프로그램 설명