Строка имени
XR_ANDROID_face_tracking
Тип расширения
Расширение экземпляра
Зарегистрированный внутренний номер
459
Редакция
1
Зависимости расширений и версий
Дата последнего изменения
2024-09-06
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 .
Приложение может создать дескриптор XrFaceTrackerANDROID с помощью функции xrCreateFaceTrackerANDROID .
Если система не поддерживает отслеживание лиц, xrCreateFaceTrackerANDROID вернет XR_ERROR_FEATURE_UNSUPPORTED
.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_face_tracking
должно быть включено до вызова xrCreateFaceTrackerANDROID. -
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 .
Допустимое использование (неявное)
- Расширение
XR_ANDROID_face_tracking
необходимо включить перед использованием XrFaceTrackerCreateInfoANDROID. -
type
должен бытьXR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID
-
next
должно бытьNULL
или действительным указателем на следующую структуру в цепочке структур.
Функция xrDestroyFaceTrackerANDROID определяется как:
XrResult xrDestroyFaceTrackerANDROID(
XrFaceTrackerANDROID faceTracker);
Описание параметров
-
faceTracker
— это XrFaceTrackerANDROID, ранее созданный xrCreateFaceTrackerANDROID .
Функция xrDestroyFaceTrackerANDROID освобождает faceTracker
и базовые ресурсы, когда отслеживание лиц завершается.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_face_tracking
должно быть включено до вызова xrDestroyFaceTrackerANDROID. -
faceTracker
должен быть действительным дескриптором XrFaceTrackerANDROID.
Безопасность потоков
- Доступ к
faceTracker
и любым дочерним дескрипторам должен быть синхронизирован извне.
Коды возврата
-
XR_SUCCESS
-
XR_ERROR_FUNCTION_UNSUPPORTED
-
XR_ERROR_HANDLE_INVALID
Проверьте калибровку лица
Функция xrGetFaceCalibrationStateANDROID
определяется как:
XrResult xrGetFaceCalibrationStateANDROID(
XrFaceTrackerANDROID faceTracker,
XrBool32* faceIsCalibratedOutput);
Описание параметров
-
faceTracker
— это XrFaceTrackerANDROID, ранее созданный xrCreateFaceTrackerANDROID . -
faceIsCalibratedOutput
указывает, было ли устройство отслеживания лиц откалибровано или нет.
Приложение может проверить состояние калибровки лица с помощью функции xrGetFaceCalibrationStateANDROID .
Если система не поддерживает калибровку лица, xrGetFaceCalibrationStateANDROID вернет XR_ERROR_FEATURE_UNSUPPORTED
. В противном случае для faceIsCalibratedOutput
может быть установлено значение XR_TRUE
чтобы отразить состояние калибровки лица.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_face_tracking
должно быть включено до вызова xrGetFaceCalibrationStateANDROID. -
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
— это XrFaceTrackerANDROID, ранее созданный xrCreateFaceTrackerANDROID . -
getInfo
— указатель на XrFaceStateGetInfoANDROID, описывающий информацию для получения выражений лица. -
faceStateOutput
— это указатель на XrFaceStateANDROID, получающий возвращаемое состояние отслеживания лица и выражения лица.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_face_tracking
должно быть включено до вызова xrGetFaceStateANDROID. -
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
, в который запрашиваются выражения лица.
Приложения должны запрашивать время, равное прогнозируемому времени отображения визуализированного кадра.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_face_tracking
необходимо включить перед использованием XrFaceStateGetInfoANDROID. -
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
— этоuint32_t
описывающий емкость массиваparameters
, или 0, указывающий запрос на получение необходимой емкости. -
parametersCountOutput
— этоuint32_t
, описывающий количествоparameters
или требуемую емкость в случае, еслиparametersCapacityInput
недостаточен. -
parameters
— это указатель на выделенный приложением массивfloat
, который будет заполнен весами форм смешивания выражений лица. -
faceTrackingState
— этоXrFaceTrackingStateANDROID
статуса достоверности отслеживания лиц. -
sampleTime
— это времяXrTime
, в которое отслеживаются или экстраполируются возвращаемые выражения. Оно равно времени, в которое были запрошены веса выражения, если экстраполяция в тот момент была успешной. -
isValid
указывает, действительны ли данные, даже если они не из текущего кадра. - Подробное описание получения необходимого размера
parameters
см. в разделе «Параметры размера буфера» .
Приложение может установить для parametersCapacityInput
значение XR_FACE_PARAMETER_COUNT_ANDROID
чтобы получать выражения лица, индексированные XrFaceParameterIndicesANDROID .
Возвращаемые parameters
представляют собой веса форм смешивания текущих выражений лица.
Обновления массива parameters
будут упорядочены так, чтобы приложение могло индексировать элементы, используя соответствующее перечисление выражений лица (например, XrFaceParameterIndicesANDROID ).
Допустимое использование (неявное)
- Расширение
XR_ANDROID_face_tracking
необходимо включить перед использованием XrFaceStateANDROID. -
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;
Перечисления имеют следующие значения:
Перечисление | Описание |
| Указывает, что отслеживание лиц приостановлено, но может быть возобновлено в будущем. |
| Отслеживание остановлено, но у клиента все еще есть активный трекер лиц. |
| Лицо отслеживается и его поза актуальна. |
Условные обозначения форм смешивания
Это расширение определяет 63 формы перехода через XR_FACE_PARAMETER_COUNT_ANDROID
для сокращенного формата G-Nome. Каждый параметр в этом перечислении является индексом в массиве форм смешивания, значения которого имеют тип 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 | ЩЕКА_PUFF_L | ||
3 | CHEEK_PUFF_R | ||
4 | CHEEK_RAISER_L | ||
5 | CHEEK_RAISER_R | ||
6 | ЩЕКА_SUCK_L | ||
7 | CHEEK_SUCK_R | ||
8 | CHIN_RAISER_B | ||
9 | CHIN_RAISER_T | ||
10 | ДИМПЛЕР_Л | ||
11 | ДИМПЛЕР_Р | ||
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));
Новые типы объектов
Новые константы перечисления
-
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
Новые перечисления
Новые структуры
Новые функции
- xrCreateFaceTrackerANDROID
- xrDestroyFaceTrackerANDROID
- xrGetFaceStateANDROID
- xrGetFaceCalibrationStateANDROID
Проблемы
История версий
- Редакция 1, 05 сентября 2024 г. (Левана Чен)
- Первоначальное описание расширения