Cadena de nombre
XR_ANDROID_face_tracking
Tipo de extensión
Extensión de la instancia
Número de extensión registrado
459
Revisión
1
Dependencias de extensiones y versiones
Fecha de última modificación
2024-09-06
Estado de la IP
No hay reclamos de IP conocidos.
Colaboradores
Spencer Quin, Google
Jared Finder, Google
Levana Chen, Google
Descripción general
Esta extensión permite que las aplicaciones obtengan pesos de formas de combinación y rendericen expresiones faciales en experiencias de XR.
El objetivo de esta extensión es proporcionar la información necesaria para crear avatares realistas y representaciones expresivas de los usuarios en el espacio virtual. La aplicación puede verificar la activación de la calibración facial antes de obtener los pesos de las formas de combinación.
Seguimiento de rostros
Un rastreador de rostros es un dispositivo de detección que realiza un seguimiento de la expresión facial a través de transmisiones de imágenes orientadas al usuario y calibración de la cámara. El objetivo principal de esta extensión es asignar las expresiones faciales de los usuarios a sus avatares en una escena virtual.
Los datos de seguimiento facial son información personal sensible y están estrechamente vinculados con la privacidad y la integridad personal. Se recomienda que las aplicaciones que almacenen o transfieran datos de seguimiento facial siempre soliciten al usuario una aceptación activa y específica para hacerlo.
- Las aplicaciones recibirán
XR_ERROR_PERMISSION_INSUFFICIENT
cuando creen un detector de rostros activo hasta que se les permita el acceso al detector de rostros. - Cuando se obtienen estados de rostro con xrGetFaceStateANDROID, XrFaceStateANDROID::isValid no mostrará
XR_TRUE
, a menos que se haya permitido el acceso de la aplicación.
Crea un identificador de seguimiento de rostro
XR_DEFINE_HANDLE(XrFaceTrackerANDROID)
El controlador XrFaceTrackerANDROID representa un rastreador de rostros para el seguimiento de rostros.
Este identificador se puede usar para acceder a los datos de seguimiento de rostros con otras funciones de esta extensión.
La función xrCreateFaceTrackerANDROID se define de la siguiente manera:
XrResult xrCreateFaceTrackerANDROID(
XrSession session,
const XrFaceTrackerCreateInfoANDROID* createInfo,
XrFaceTrackerANDROID* faceTracker);
Descripciones de los parámetros
session
es un identificador de XrSession en el que estará activo el rastreador de rostros.createInfo
es el XrFaceTrackerCreateInfoANDROID que se usa para especificar el detector de rostros.faceTracker
es el controlador XrFaceTrackerANDROID que se muestra.
Una aplicación puede crear un controlador XrFaceTrackerANDROID con la función xrCreateFaceTrackerANDROID.
Si el sistema no admite el seguimiento de rostros, xrCreateFaceTrackerANDROID mostrará XR_ERROR_FEATURE_UNSUPPORTED
.
Uso válido (implícito)
- La extensión
XR_ANDROID_face_tracking
debe estar habilitada antes de llamar a xrCreateFaceTrackerANDROID. session
debe ser un identificador XrSession válido.createInfo
debe ser un puntero a una estructura XrFaceTrackerCreateInfoANDROID válida.faceTracker
debe ser un puntero a un controlador 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
La estructura XrFaceTrackerCreateInfoANDROID se describe de la siguiente manera:
typedef struct XrFaceTrackerCreateInfoANDROID {
XrStructureType type;
void* next;
} XrFaceTrackerCreateInfoANDROID;
Descripciones de los miembros
type
es el XrStructureType de esta estructura.next
esNULL
o un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.
La estructura XrFaceTrackerCreateInfoANDROID describe la información para crear un control XrFaceTrackerANDROID.
Uso válido (implícito)
- La extensión
XR_ANDROID_face_tracking
debe estar habilitada antes de usar XrFaceTrackerCreateInfoANDROID. type
debe serXR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID
.next
debe serNULL
o un puntero válido a la próxima estructura en una cadena de estructuras.
La función xrDestroyFaceTrackerANDROID se define de la siguiente manera:
XrResult xrDestroyFaceTrackerANDROID(
XrFaceTrackerANDROID faceTracker);
Descripciones de los parámetros
faceTracker
es un XrFaceTrackerANDROID que xrCreateFaceTrackerANDROID creó anteriormente.
La función xrDestroyFaceTrackerANDROID libera el faceTracker
y los recursos subyacentes cuando finaliza la experiencia de seguimiento de rostros.
Uso válido (implícito)
- La extensión
XR_ANDROID_face_tracking
debe estar habilitada antes de llamar a xrDestroyFaceTrackerANDROID. faceTracker
debe ser un controlador XrFaceTrackerANDROID válido.
Seguridad de subprocesos
- El acceso a
faceTracker
y a cualquier controlador secundario debe sincronizarse de forma externa.
Códigos de retorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_HANDLE_INVALID
Cómo verificar la calibración del rostro
La función xrGetFaceCalibrationStateANDROID
se define de la siguiente manera:
XrResult xrGetFaceCalibrationStateANDROID(
XrFaceTrackerANDROID faceTracker,
XrBool32* faceIsCalibratedOutput);
Descripciones de los parámetros
faceTracker
es un XrFaceTrackerANDROID que xrCreateFaceTrackerANDROID creó anteriormente.faceIsCalibratedOutput
indica si se calibró el rastreador de rostros o no.
Una aplicación puede verificar el estado de calibración de la cara con la función xrGetFaceCalibrationStateANDROID.
Si el sistema no admite la calibración facial, xrGetFaceCalibrationStateANDROID mostrará XR_ERROR_FEATURE_UNSUPPORTED
. De lo contrario, faceIsCalibratedOutput
se puede establecer en XR_TRUE
para reflejar el estado de calibración de la cara.
Uso válido (implícito)
- La extensión
XR_ANDROID_face_tracking
debe estar habilitada antes de llamar a xrGetFaceCalibrationStateANDROID. faceTracker
debe ser un controlador XrFaceTrackerANDROID válido.faceIsCalibratedOutput
debe ser un puntero a un 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
Cómo obtener expresiones faciales
La función xrGetFaceStateANDROID muestra formas de combinación de expresiones faciales en un momento determinado.
XrResult xrGetFaceStateANDROID(
XrFaceTrackerANDROID faceTracker,
const XrFaceStateGetInfoANDROID* getInfo,
XrFaceStateANDROID* faceStateOutput);
Descripciones de los parámetros
faceTracker
es un XrFaceTrackerANDROID que xrCreateFaceTrackerANDROID creó anteriormente.getInfo
es un puntero a XrFaceStateGetInfoANDROID que describe información para obtener expresiones faciales.faceStateOutput
es un puntero a XrFaceStateANDROID que recibe el estado de seguimiento de rostro y las expresiones faciales que se muestran.
Uso válido (implícito)
- La extensión
XR_ANDROID_face_tracking
debe estar habilitada antes de llamar a xrGetFaceStateANDROID. faceTracker
debe ser un controlador XrFaceTrackerANDROID válido.getInfo
debe ser un puntero a una estructura XrFaceStateGetInfoANDROID válida.faceStateOutput
debe ser un puntero a una estructura 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
La estructura XrFaceStateGetInfoANDROID describe la información para obtener expresiones faciales.
typedef struct XrFaceStateGetInfoANDROID {
XrStructureType type;
void* next;
XrTime time;
} XrFaceStateGetInfoANDROID;
Descripciones de los miembros
type
es el XrStructureType de esta estructura.next
esNULL
o un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.time
es unXrTime
en el que se solicitan las expresiones faciales.
Las aplicaciones deben solicitar un tiempo igual al tiempo de visualización previsto para el fotograma renderizado.
Uso válido (implícito)
- La extensión
XR_ANDROID_face_tracking
debe estar habilitada antes de usar XrFaceStateGetInfoANDROID. type
debe serXR_TYPE_FACE_STATE_GET_INFO_ANDROID
.next
debe serNULL
o un puntero válido a la próxima estructura en una cadena de estructuras.
La estructura XrFaceStateANDROID muestra el estado de seguimiento de rostros y las expresiones faciales.
typedef struct XrFaceStateANDROID {
XrStructureType type;
void* next;
uint32_t parametersCapacityInput;
uint32_t parametersCountOutput;
float* parameters;
XrFaceTrackingStateANDROID faceTrackingState;
XrTime sampleTime;
XrBool32 isValid;
} XrFaceStateANDROID;
Descripciones de los miembros
type
es el XrStructureType de esta estructura.next
esNULL
o un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.parametersCapacityInput
es unuint32_t
que describe la capacidad del arrayparameters
, o 0 para indicar una solicitud para recuperar la capacidad requerida.parametersCountOutput
es unuint32_t
que describe la cantidad deparameters
o la capacidad requerida en caso de queparametersCapacityInput
sea insuficiente.parameters
es un puntero a un array defloat
asignado por la aplicación que se completará con pesos de formas de combinación de expresiones faciales.faceTrackingState
es elXrFaceTrackingStateANDROID
del estado de validez del seguimiento de rostros.sampleTime
es un tiempoXrTime
al que se hace un seguimiento o se extrapolan las expresiones que se muestran. Es igual al momento en el que se solicitaron las ponderaciones de la expresión si la extrapolación se realizó correctamente en ese momento.isValid
indica si los datos son válidos, incluso si no provienen del marco actual.- Consulta la sección Parámetros de tamaño del búfer para obtener una descripción detallada de cómo recuperar el tamaño
parameters
requerido.
La aplicación puede establecer parametersCapacityInput
en XR_FACE_PARAMETER_COUNT_ANDROID
para obtener expresiones faciales que indexa XrFaceParameterIndicesANDROID.
El parameters
que se muestra representa las ponderaciones de las formas de combinación de las expresiones faciales actuales.
Las actualizaciones del array parameters
se ordenarán para que la aplicación pueda indexar elementos con la enumeración de expresión facial correspondiente (p.ej., XrFaceParameterIndicesANDROID).
Uso válido (implícito)
- La extensión
XR_ANDROID_face_tracking
debe estar habilitada antes de usar XrFaceStateANDROID. type
debe serXR_TYPE_FACE_STATE_ANDROID
.next
debe serNULL
o un puntero válido a la próxima estructura en una cadena de estructuras.- Si
parametersCapacityInput
no es0, parameters
, debe ser un puntero a un array de valoresparametersCapacityInput float
. faceTrackingState
debe ser un valor válido de XrFaceTrackingStateANDROID.
La enumeración XrFaceTrackingStateANDROID identifica los diferentes estados del rastreador de rostros.
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;
Las enumeraciones tienen los siguientes significados:
Enum |
Descripción |
|
Indica que el seguimiento de rostros está pausado, pero se puede reanudar en el futuro. |
|
El seguimiento se detuvo, pero el cliente aún tiene un dispositivo de rastreo de rostros activo. |
|
Se realiza un seguimiento del rostro y su postura es actual. |
Convenciones de las formas de combinación
Esta extensión define 63 formas de combinación a través de XR_FACE_PARAMETER_COUNT_ANDROID
para el formato G-Nome reducido. Cada parámetro de esta enumeración es un índice en un array de forma de combinación cuyos valores son del tipo float
y el entorno de ejecución se normaliza a 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 | Name | Imagen de referencia | |
---|---|---|---|
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 |
Ejemplo de código para el seguimiento de rostros
En el siguiente código de ejemplo, se muestra cómo obtener todos los pesos para las formas de combinación de expresiones faciales.
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));
Nuevos tipos de objetos
Nuevas constantes de enum
XR_FACE_PARAMETER_COUNT_ANDROID
La enumeración XrObjectType se extiende con lo siguiente:
XR_OBJECT_TYPE_FACE_TRACKER_ANDROID
La enumeración XrStructureType se extiende con lo siguiente:
XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID
XR_TYPE_FACE_STATE_GET_INFO_ANDROID
XR_TYPE_FACE_STATE_ANDROID
Enumeraciones nuevas
Nuevas estructuras
Funciones nuevas
- xrCreateFaceTrackerANDROID
- xrDestroyFaceTrackerANDROID
- xrGetFaceStateANDROID
- xrGetFaceCalibrationStateANDROID
Problemas
Historial de versiones
- Revisión 1, 5 de septiembre de 2024 (Levana Chen)
- Descripción inicial de la extensión