Stringa del nome
XR_ANDROID_face_tracking
Tipo di estensione
Estensione dell'istanza
Numero di estensione registrato
459
Revisione
1
Dipendenze di estensioni e versioni
Data ultima modifica
2024-09-06
Stato IP
Nessuna rivendicazione IP nota.
Collaboratori
Spencer Quin, Google
Jared Finder, Google
Levana Chen, Google
Panoramica
Questa estensione consente alle applicazioni di ottenere i pesi delle forme di miscela e di eseguire il rendering delle espressioni facciali nelle esperienze XR.
Questa estensione ha lo scopo di fornire le informazioni necessarie per creare avatar realistici e rappresentazioni espressive degli utenti nello spazio virtuale. L'applicazione può controllare l'attivazione della calibrazione del viso prima di ottenere i pesi delle forme di miscelazione.
Rilevamento dei volti
Un tracker per il rilevamento del volto è un dispositivo di rilevamento che monitora l'espressione facciale tramite stream di immagini rivolte all'utente e la calibrazione della videocamera. Lo scopo principale di questa estensione è mappare le espressioni facciali degli utenti ai loro avatar in una scena virtuale.
I dati relativi al monitoraggio del volto sono informazioni personali sensibili e sono strettamente collegati alla privacy e all'integrità personale. È vivamente consigliato che le applicazioni che archiviano o trasferiscono dati di monitoraggio del volto chiedano sempre all'utente un'accettazione attiva e specifica.
- Le applicazioni riceveranno
XR_ERROR_PERMISSION_INSUFFICIENTquando viene creato un tracker per il rilevamento del volto attivo finché all'applicazione non viene consentito l'accesso al tracker. - Quando ottieni gli stati del volto utilizzando xrGetFaceStateANDROID,
XrFaceStateANDROID::isValid non restituirà
XR_TRUEa meno che l'accesso all'applicazione non sia stato consentito
Creare un handle del tracker del volto
XR_DEFINE_HANDLE(XrFaceTrackerANDROID)
L'handle XrFaceTrackerANDROID rappresenta un tracker per il monitoraggio del volto.
Questo handle può essere utilizzato per accedere ai dati di rilevamento del volto utilizzando altre funzioni di questa estensione.
La funzione xrCreateFaceTrackerANDROID è definita come:
XrResult xrCreateFaceTrackerANDROID(
XrSession session,
const XrFaceTrackerCreateInfoANDROID* createInfo,
XrFaceTrackerANDROID* faceTracker);
Descrizioni dei parametri
sessionè un handle XrSession in cui il tracker del volto sarà attivo.createInfoè il XrFaceTrackerCreateInfoANDROID utilizzato per specificare il tracker per il rilevamento del volto.faceTrackerè l'handle XrFaceTrackerANDROID restituito.
Un'applicazione può creare un handle XrFaceTrackerANDROID utilizzando la funzione xrCreateFaceTrackerANDROID.
Se il sistema non supporta il rilevamento del volto, xrCreateFaceTrackerANDROID
restituirà XR_ERROR_FEATURE_UNSUPPORTED.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_face_trackingdeve essere attivata prima di chiamare xrCreateFaceTrackerANDROID sessiondeve essere un handle XrSession validocreateInfodeve essere un puntatore a una struttura XrFaceTrackerCreateInfoANDROID validafaceTrackerdeve essere un puntatore a un handle XrFaceTrackerANDROID
Codici di ritorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHED
La struttura XrFaceTrackerCreateInfoANDROID è descritta come segue:
typedef struct XrFaceTrackerCreateInfoANDROID {
XrStructureType type;
void* next;
} XrFaceTrackerCreateInfoANDROID;
Descrizioni dei membri
typeè il XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture. Queste strutture non sono definite in OpenXR di base o in questa estensione.
La struttura XrFaceTrackerCreateInfoANDROID descrive le informazioni per creare un handle XrFaceTrackerANDROID.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_face_trackingdeve essere attivata prima di utilizzare XrFaceTrackerCreateInfoANDROID typedeve essereXR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROIDnextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture
La funzione xrDestroyFaceTrackerANDROID è definita come:
XrResult xrDestroyFaceTrackerANDROID(
XrFaceTrackerANDROID faceTracker);
Descrizioni dei parametri
faceTrackerè un XrFaceTrackerANDROID creato in precedenza con xrCreateFaceTrackerANDROID.
La funzione xrDestroyFaceTrackerANDROID rilascia faceTracker e le risorse sottostanti al termine dell'esperienza di monitoraggio del volto.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_face_trackingdeve essere attivata prima di chiamare xrDestroyFaceTrackerANDROID faceTrackerdeve essere un handle XrFaceTrackerANDROID valido
Coerenza di thread
- L'accesso a
faceTrackere a eventuali handle secondari deve essere sincronizzato esternamente
Codici di ritorno
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
Controllare la calibrazione del volto
La funzione xrGetFaceCalibrationStateANDROID è definita come:
XrResult xrGetFaceCalibrationStateANDROID(
XrFaceTrackerANDROID faceTracker,
XrBool32* faceIsCalibratedOutput);
Descrizioni dei parametri
faceTrackerè un XrFaceTrackerANDROID creato in precedenza con xrCreateFaceTrackerANDROID.faceIsCalibratedOutputindica se il rilevamento del volto è stato calibrato o meno.
Un'applicazione può controllare lo stato della calibrazione del volto utilizzando la funzione xrGetFaceCalibrationStateANDROID.
Se il sistema non supporta la calibrazione del volto,
xrGetFaceCalibrationStateANDROID restituirà
XR_ERROR_FEATURE_UNSUPPORTED. In caso contrario, faceIsCalibratedOutput potrebbe essere impostato su XR_TRUE per riflettere lo stato della calibrazione del volto.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_face_trackingdeve essere attivata prima di chiamare xrGetFaceCalibrationStateANDROID faceTrackerdeve essere un handle XrFaceTrackerANDROID validofaceIsCalibratedOutputdeve essere un puntatore a un valoreXrBool32
Codici di ritorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHED
Acquisisci espressioni facciali
La funzione xrGetFaceStateANDROID restituisce le forme di miscela delle espressioni del viso in un determinato momento.
XrResult xrGetFaceStateANDROID(
XrFaceTrackerANDROID faceTracker,
const XrFaceStateGetInfoANDROID* getInfo,
XrFaceStateANDROID* faceStateOutput);
Descrizioni dei parametri
faceTrackerè un XrFaceTrackerANDROID creato in precedenza con xrCreateFaceTrackerANDROID.getInfoè un puntatore a XrFaceStateGetInfoANDROID che descrive informazioni per ottenere le espressioni facciali.faceStateOutputè un puntatore a XrFaceStateANDROID che riceve lo stato del rilevamento del volto e le espressioni facciali restituiti.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_face_trackingdeve essere attivata prima di chiamare xrGetFaceStateANDROID faceTrackerdeve essere un handle XrFaceTrackerANDROID validogetInfodeve essere un puntatore a una struttura XrFaceStateGetInfoANDROID validafaceStateOutputdeve essere un puntatore a una struttura XrFaceStateANDROID.
Codici di ritorno
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_TIME_INVALID
La struttura XrFaceStateGetInfoANDROID descrive le informazioni per ottenere le espressioni facciali.
typedef struct XrFaceStateGetInfoANDROID {
XrStructureType type;
void* next;
XrTime time;
} XrFaceStateGetInfoANDROID;
Descrizioni dei membri
typeè il XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture. Queste strutture non sono definite in OpenXR di base o in questa estensione.timeè unXrTimea cui vengono richieste le espressioni facciali.
Le applicazioni devono richiedere un orario pari al tempo di visualizzazione previsto per il frame visualizzato.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_face_trackingdeve essere attivata prima di utilizzare XrFaceStateGetInfoANDROID typedeve essereXR_TYPE_FACE_STATE_GET_INFO_ANDROIDnextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture
La struttura XrFaceStateANDROID restituisce lo stato del rilevamento del volto e le espressioni del viso.
typedef struct XrFaceStateANDROID {
XrStructureType type;
void* next;
uint32_t parametersCapacityInput;
uint32_t parametersCountOutput;
float* parameters;
XrFaceTrackingStateANDROID faceTrackingState;
XrTime sampleTime;
XrBool32 isValid;
} XrFaceStateANDROID;
Descrizioni dei membri
typeè il XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture. Queste strutture non sono definite in OpenXR di base o in questa estensione.parametersCapacityInputè unuint32_tche descrive la capacità dell'arrayparameterso 0 per indicare una richiesta di recupero della capacità richiesta.parametersCountOutputè unuint32_tche descrive il numero diparameterso la capacità richiesta nel caso in cuiparametersCapacityInputnon sia sufficiente.parametersè un puntatore a un array difloatallocato dall'applicazione che verrà completato con i pesi delle forme di combinazione delle espressioni facciali.faceTrackingStateè ilXrFaceTrackingStateANDROIDdello stato di validità del monitoraggio del volto.sampleTimeè un'oraXrTimea cui vengono monitorate o extrapolate le espressioni restituite. Corrisponde al momento in cui sono stati richiesti i pesi dell'espressione se l'estrapolazione è riuscita in quel momento.isValidindica se i dati sono validi anche se non provengono dall'inquadratura corrente.- Per una descrizione dettagliata del recupero della dimensione
parametersrichiesta, consulta la sezione Parametri di dimensione del buffer.
L'applicazione può impostare parametersCapacityInput su
XR_FACE_PARAMETER_COUNT_ANDROID per ottenere le espressioni facciali indicizzate da
XrFaceParameterIndicesANDROID.
I valori parameters restituiti rappresentano i pesi delle forme di miscela delle espressioni facciali attuali.
Gli aggiornamenti dell'array parameters verranno ordinati in modo che l'applicazione possa indicizzare gli elementi utilizzando l'enum corrispondente per le espressioni facciali (ad es. XrFaceParameterIndicesANDROID).
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_face_trackingdeve essere attivata prima di usare XrFaceStateANDROID typedeve essereXR_TYPE_FACE_STATE_ANDROIDnextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture- Se
parametersCapacityInputnon è0, parametersdeve essere un puntatore a un array di valoriparametersCapacityInput float faceTrackingStatedeve essere un valore XrFaceTrackingStateANDROID valido
L'enumerazione XrFaceTrackingStateANDROID identifica i diversi stati del tracker per il rilevamento dei volti.
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;
Gli enum hanno i seguenti significati:
Enum |
Descrizione |
|
Indica che il rilevamento del volto è in pausa, ma potrebbe essere ripreso in futuro. |
|
Il monitoraggio è stato interrotto, ma il cliente ha ancora un tracker per il rilevamento del volto attivo. |
|
Il volto è rilevato e la sua posa è attuale. |
Convenzioni per le forme di fusione
Questa estensione definisce 63 forme di miscela tramite
XR_FACE_PARAMETER_COUNT_ANDROID, per il formato G-Nome ridotto. Ogni parametro
in questo enum è un indice in un array di blend shape i cui valori sono di tipo
float e il runtime viene normalizzato 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;
| Indice | Nome | Immagine di riferimento | |
|---|---|---|---|
| 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 | BOCA_DESTRA |
|
|
| 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 |
|
|
Codice di esempio per il rilevamento dei volti
Il seguente codice di esempio mostra come ottenere tutti i pesi per le forme di miscelazione delle espressioni facciali.
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));
Nuovi tipi di oggetti
Nuove costanti enum
XR_FACE_PARAMETER_COUNT_ANDROID
L'enumerazione XrObjectType è estesa con:
XR_OBJECT_TYPE_FACE_TRACKER_ANDROID
L'enumerazione XrStructureType è stata estesa con:
XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROIDXR_TYPE_FACE_STATE_GET_INFO_ANDROIDXR_TYPE_FACE_STATE_ANDROID
Nuovi enum
Nuove strutture
Nuove funzioni
- xrCreateFaceTrackerANDROID
- xrDestroyFaceTrackerANDROID
- xrGetFaceStateANDROID
- xrGetFaceCalibrationStateANDROID
Problemi
Cronologia delle versioni
- Revisione 1, 05-09-2024 (Levana Chen)
- Descrizione iniziale dell'estensione
OpenXR™ e il logo OpenXR sono marchi di proprietà di The Khronos Group Inc. e sono registrati come marchi in Cina, nell'Unione Europea, in Giappone e nel Regno Unito.