String de nome
XR_ANDROID_face_tracking
Tipo de extensão
Extensão de instância
Número de extensão registrado
459
Revisão
1
Dependências de extensão e versão
Data da última modificação
2024-09-06
Status do IP
Nenhuma reivindicação de IP conhecida.
Colaboradores
Spencer Quin, Google
Jared Finder, Google
Levana Chen, Google
Visão geral
Essa extensão permite que os aplicativos recebam pesos de formas de mesclagem e renderizem expressões faciais em experiências XR.
O objetivo dessa extensão é fornecer as informações necessárias para criar avatares realistas e representações expressivas de usuários no espaço virtual. O aplicativo pode verificar a ativação da calibração facial antes de receber os pesos dos shapes de mesclagem.
Rastreador de rostos
Um rastreador de rosto é um dispositivo de detecção que rastreia a expressão facial por fluxos de imagens voltados ao usuário e calibração da câmera. O principal objetivo dessa extensão é mapear as expressões faciais do usuário para os avatares dele em uma cena virtual.
Os dados de rastreamento facial são informações pessoais sensíveis e estão intimamente ligados à privacidade e integridade pessoal. É altamente recomendável que os apps que armazenam ou transferem dados de rastreamento facial sempre peçam ao usuário uma aceitação ativa e específica para fazer isso.
- Os aplicativos vão receber
XR_ERROR_PERMISSION_INSUFFICIENT
ao criar um rastreador de rosto ativo até que o acesso ao rastreador seja permitido. - Ao receber estados do rosto usando xrGetFaceStateANDROID,
XrFaceStateANDROID::isValid não retornará
XR_TRUE
, a menos que o acesso ao aplicativo tenha sido permitido.
Criar um identificador de rastreador de rosto
XR_DEFINE_HANDLE(XrFaceTrackerANDROID)
O handle XrFaceTrackerANDROID representa um rastreador de rosto para rastreamento de rosto.
Esse identificador pode ser usado para acessar dados de rastreamento de rosto usando outras funções nesta extensão.
A função xrCreateFaceTrackerANDROID é definida como:
XrResult xrCreateFaceTrackerANDROID(
XrSession session,
const XrFaceTrackerCreateInfoANDROID* createInfo,
XrFaceTrackerANDROID* faceTracker);
Descrições dos parâmetros
session
é um identificador XrSession em que o rastreador de rosto vai estar ativo.createInfo
é o XrFaceTrackerCreateInfoANDROID usado para especificar o rastreador de rosto.faceTracker
é o identificador XrFaceTrackerANDROID retornado.
Um aplicativo pode criar um identificador XrFaceTrackerANDROID usando a função xrCreateFaceTrackerANDROID.
Se o sistema não oferecer suporte ao rastreamento facial, o método xrCreateFaceTrackerANDROID
vai retornar XR_ERROR_FEATURE_UNSUPPORTED
.
Uso válido (implícito)
- A extensão
XR_ANDROID_face_tracking
precisa ser ativada antes de chamar xrCreateFaceTrackerANDROID. session
precisa ser um identificador XrSession válidocreateInfo
precisa ser um ponteiro para uma estrutura XrFaceTrackerCreateInfoANDROID válida.faceTracker
precisa ser um ponteiro para um identificador XrFaceTrackerANDROID
Códigos de retorno
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
A estrutura XrFaceTrackerCreateInfoANDROID é descrita da seguinte maneira:
typedef struct XrFaceTrackerCreateInfoANDROID {
XrStructureType type;
void* next;
} XrFaceTrackerCreateInfoANDROID;
Descrições dos participantes
type
é o XrStructureType dessa estrutura.next
éNULL
ou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas é definida no núcleo do OpenXR ou nesta extensão.
A estrutura XrFaceTrackerCreateInfoANDROID descreve as informações para criar um identificador XrFaceTrackerANDROID.
Uso válido (implícito)
- A extensão
XR_ANDROID_face_tracking
precisa ser ativada antes de usar XrFaceTrackerCreateInfoANDROID. type
precisa serXR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID
next
precisa serNULL
ou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas
A função xrDestroyFaceTrackerANDROID é definida como:
XrResult xrDestroyFaceTrackerANDROID(
XrFaceTrackerANDROID faceTracker);
Descrições dos parâmetros
faceTracker
é um XrFaceTrackerANDROID criado anteriormente por xrCreateFaceTrackerANDROID.
A função xrDestroyFaceTrackerANDROID libera o faceTracker
e
os recursos subjacentes quando a experiência de rastreamento facial termina.
Uso válido (implícito)
- A extensão
XR_ANDROID_face_tracking
precisa ser ativada antes de chamar xrDestroyFaceTrackerANDROID. faceTracker
precisa ser um identificador XrFaceTrackerANDROID válido
Segurança da linha de execução
- O acesso a
faceTracker
e a qualquer identificador filho precisa ser sincronizado externamente.
Códigos de retorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_HANDLE_INVALID
Verificar a calibragem do rosto
A função xrGetFaceCalibrationStateANDROID
é definida como:
XrResult xrGetFaceCalibrationStateANDROID(
XrFaceTrackerANDROID faceTracker,
XrBool32* faceIsCalibratedOutput);
Descrições dos parâmetros
faceTracker
é um XrFaceTrackerANDROID criado anteriormente por xrCreateFaceTrackerANDROID.faceIsCalibratedOutput
indica se o rastreador de rosto foi calibrado ou não.
Um aplicativo pode verificar o estado da calibração do rosto usando a função xrGetFaceCalibrationStateANDROID.
Se o sistema não oferecer suporte à calibração de rosto,
xrGetFaceCalibrationStateANDROID vai retornar
XR_ERROR_FEATURE_UNSUPPORTED
. Caso contrário, faceIsCalibratedOutput
pode ser definido
como XR_TRUE
para refletir o estado da calibração do rosto.
Uso válido (implícito)
- A extensão
XR_ANDROID_face_tracking
precisa ser ativada antes de chamar xrGetFaceCalibrationStateANDROID. faceTracker
precisa ser um identificador XrFaceTrackerANDROID válidofaceIsCalibratedOutput
precisa ser um ponteiro para um valorXrBool32
Códigos de retorno
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
Detectar expressões faciais
A função xrGetFaceStateANDROID retorna formas de mesclagem de expressões faciais em um determinado momento.
XrResult xrGetFaceStateANDROID(
XrFaceTrackerANDROID faceTracker,
const XrFaceStateGetInfoANDROID* getInfo,
XrFaceStateANDROID* faceStateOutput);
Descrições dos parâmetros
faceTracker
é um XrFaceTrackerANDROID criado anteriormente por xrCreateFaceTrackerANDROID.getInfo
é um ponteiro para XrFaceStateGetInfoANDROID, que descreve informações para receber expressões faciais.faceStateOutput
é um ponteiro para XrFaceStateANDROID, que recebe o estado de rastreamento de rosto e as expressões faciais retornadas.
Uso válido (implícito)
- A extensão
XR_ANDROID_face_tracking
precisa ser ativada antes de chamar xrGetFaceStateANDROID. faceTracker
precisa ser um identificador XrFaceTrackerANDROID válidogetInfo
precisa ser um ponteiro para uma estrutura XrFaceStateGetInfoANDROID válida.faceStateOutput
precisa ser um ponteiro para uma estrutura XrFaceStateANDROID.
Códigos de retorno
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
A estrutura XrFaceStateGetInfoANDROID descreve as informações para extrair expressões faciais.
typedef struct XrFaceStateGetInfoANDROID {
XrStructureType type;
void* next;
XrTime time;
} XrFaceStateGetInfoANDROID;
Descrições dos participantes
type
é o XrStructureType dessa estrutura.next
éNULL
ou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas é definida no núcleo do OpenXR ou nesta extensão.time
é umXrTime
em que as expressões faciais são solicitadas.
Os aplicativos precisam solicitar um tempo igual ao tempo de exibição previsto para o frame renderizado.
Uso válido (implícito)
- A extensão
XR_ANDROID_face_tracking
precisa ser ativada antes de usar XrFaceStateGetInfoANDROID. type
precisa serXR_TYPE_FACE_STATE_GET_INFO_ANDROID
next
precisa serNULL
ou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas
A estrutura XrFaceStateANDROID retorna o estado de rastreamento facial e as expressões faciais.
typedef struct XrFaceStateANDROID {
XrStructureType type;
void* next;
uint32_t parametersCapacityInput;
uint32_t parametersCountOutput;
float* parameters;
XrFaceTrackingStateANDROID faceTrackingState;
XrTime sampleTime;
XrBool32 isValid;
} XrFaceStateANDROID;
Descrições dos participantes
type
é o XrStructureType dessa estrutura.next
éNULL
ou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas é definida no núcleo do OpenXR ou nesta extensão.parametersCapacityInput
é umuint32_t
que descreve a capacidade da matrizparameters
ou 0 para indicar uma solicitação para recuperar a capacidade necessária.parametersCountOutput
é umuint32_t
que descreve o número deparameters
ou a capacidade necessária casoparametersCapacityInput
seja insuficiente.parameters
é um ponteiro para uma matriz alocada pelo aplicativo defloat
que será preenchida com pesos de formas de combinação de expressões faciais.faceTrackingState
é oXrFaceTrackingStateANDROID
do status de validade do rastreamento facial.sampleTime
é um tempoXrTime
em que as expressões retornadas são rastreadas ou extrapoladas. Ele é igual ao momento em que os pesos da expressão foram solicitados se a extrapolação no momento foi bem-sucedida.isValid
indica se os dados são válidos, mesmo que não sejam do frame atual.- Consulte a seção Parâmetros de tamanho do buffer para conferir uma descrição detalhada de
como recuperar o tamanho
parameters
necessário.
O aplicativo pode definir parametersCapacityInput
como
XR_FACE_PARAMETER_COUNT_ANDROID
para receber expressões faciais que são indexadas por
XrFaceParameterIndicesANDROID.
O parameters
retornado representa os pesos dos formatos de mesclagem
das expressões faciais atuais.
As atualizações da matriz parameters
serão ordenadas para que o
app possa indexar elementos usando o tipo enumerado de expressão facial
correspondente (por exemplo, XrFaceParameterIndicesANDROID).
Uso válido (implícito)
- A extensão
XR_ANDROID_face_tracking
precisa ser ativada antes de usar XrFaceStateANDROID. type
precisa serXR_TYPE_FACE_STATE_ANDROID
next
precisa serNULL
ou um ponteiro válido para a próxima estrutura em uma cadeia de estruturas- Se
parametersCapacityInput
não for0, parameters
, precisa ser um ponteiro para uma matriz de valoresparametersCapacityInput float
faceTrackingState
precisa ser um valor XrFaceTrackingStateANDROID válido.
A enumeração XrFaceTrackingStateANDROID identifica os diferentes estados do rastreador facial.
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;
Os tipos enumerados têm os seguintes significados:
Tipo enumerado |
Descrição |
|
Indica que o rastreamento facial está pausado, mas pode ser retomado no futuro. |
|
O rastreamento foi interrompido, mas o cliente ainda tem um rastreador de rosto ativo. |
|
O rosto é rastreado e a pose é atual. |
Convenções de formas de mesclagem
Essa extensão define 63 formas de mesclagem com
XR_FACE_PARAMETER_COUNT_ANDROID
, para o formato reduzido de G-Nome. Cada parâmetro
nesse tipo enumerado é um índice em uma matriz de forma de mesclagem cujos valores são do tipo
float
, e o tempo de execução é normalizado para 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;
Índice | Nome | Imagem de referência | |
---|---|---|---|
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 |
Exemplo de código para rastreamento facial
O exemplo de código abaixo demonstra como receber todos os pesos para formas de mesclagem de expressões faciais.
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));
Novos tipos de objeto
Novas constantes de tipo enumerado
XR_FACE_PARAMETER_COUNT_ANDROID
A enumeração XrObjectType é estendida com:
XR_OBJECT_TYPE_FACE_TRACKER_ANDROID
A enumeração XrStructureType foi ampliada com:
XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID
XR_TYPE_FACE_STATE_GET_INFO_ANDROID
XR_TYPE_FACE_STATE_ANDROID
Novos tipos enumerados
Novas estruturas
Novas funções
- xrCreateFaceTrackerANDROID
- xrDestroyFaceTrackerANDROID
- xrGetFaceStateANDROID
- xrGetFaceCalibrationStateANDROID
Problemas
Histórico de versões
- Revisão 1, 05-09-2024 (Levana Chen)
- Descrição inicial da extensão