Ciąg znaków nazwy
XR_ANDROID_face_tracking
Typ rozszerzenia
Rozszerzenie instancji
Zarejestrowany numer wewnętrzny
459
Weryfikacja
1
Zależności rozszerzenia i wersji
Data ostatniej modyfikacji
2024-09-06
Stan adresu IP
Brak znanych roszczeń dotyczących adresu IP.
Twórcy
Spencer Quin, Google
Jared Finder, Google
Levana Chen, Google
Omówienie
To rozszerzenie umożliwia aplikacjom uzyskiwanie wag kształtów mieszania i renderowanie wyrazów twarzy w doświadczeniach XR.
Rozszerzenie ma na celu dostarczenie informacji potrzebnych do tworzenia realistycznych awatarów i wyrazistych przedstawień użytkowników w przestrzeni wirtualnej. Aplikacja może sprawdzić aktywację kalibracji twarzy przed uzyskaniem wag kształtów mieszania.
Śledzenie twarzy
Śledzenie twarzy to urządzenie do wykrywania twarzy, które śledzi mimikę użytkownika za pomocą strumieni obrazów i kalibracji kamery. Głównym celem tego rozszerzenia jest mapowanie wyrazów twarzy użytkownika na jego awatary w wirtualnej scenie.
Dane śledzenia twarzy to wrażliwe informacje osobowe, które są ściśle związane z prywatnością i nienaruszalności osoby. Zdecydowanie zalecamy, aby aplikacje przechowujące lub przesyłające dane śledzenia twarzy zawsze prosiły użytkownika o aktywne i szczególne wyrażenie zgody na takie działanie.
- Aplikacje będą otrzymywać
XR_ERROR_PERMISSION_INSUFFICIENT
podczas tworzenia aktywnego lokalizatora twarzy, dopóki nie uzyskają dostępu do tego lokalizatora. - Gdy stany twarzy są uzyskiwane za pomocą funkcji xrGetFaceStateANDROID, funkcja XrFaceStateANDROID::isValid zwróci wartość
XR_TRUE
tylko wtedy, gdy dostęp do aplikacji został zezwolony.
Tworzenie uchwytu śledzenia twarzy
XR_DEFINE_HANDLE(XrFaceTrackerANDROID)
Uchwyt XrFaceTrackerANDROID to śledzenie twarzy.
Za pomocą tego identyfikatora można uzyskać dostęp do danych śledzenia twarzy za pomocą innych funkcji w tym rozszerzeniu.
Funkcja xrCreateFaceTrackerANDROID jest zdefiniowana jako:
XrResult xrCreateFaceTrackerANDROID(
XrSession session,
const XrFaceTrackerCreateInfoANDROID* createInfo,
XrFaceTrackerANDROID* faceTracker);
Opisy parametrów
session
to uchwyt XrSession, w którym licznik twarzy będzie aktywny.createInfo
to XrFaceTrackerCreateInfoANDROID używany do określenia śledzenia twarzy.faceTracker
to zwrócony identyfikator XrFaceTrackerANDROID.
Aplikacja może utworzyć uchwyt XrFaceTrackerANDROID za pomocą funkcji xrCreateFaceTrackerANDROID.
Jeśli system nie obsługuje śledzenia twarzy, funkcja xrCreateFaceTrackerANDROID zwróci wartość XR_ERROR_FEATURE_UNSUPPORTED
.
Prawidłowe użycie (domyślne)
- Przed wywołaniem metody xrCreateFaceTrackerANDROID musi być włączone rozszerzenie
XR_ANDROID_face_tracking
. session
musi być prawidłowym identyfikatorem XrSessioncreateInfo
musi być wskaźnikiem do prawidłowej struktury XrFaceTrackerCreateInfoANDROID.faceTracker
musi być wskaźnikiem na XrFaceTrackerANDROID
Kody zwrotu
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
Struktura XrFaceTrackerCreateInfoANDROID jest opisana w następujący sposób:
typedef struct XrFaceTrackerCreateInfoANDROID {
XrStructureType type;
void* next;
} XrFaceTrackerCreateInfoANDROID;
Opisy członków
type
to XrStructureType tej struktury.next
toNULL
lub wskaźnik do następnej struktury w łańcuchu struktur. Nie ma żadnych takich struktur zdefiniowanych w podstawowym OpenXR ani w tym rozszerzeniu.
Struktura XrFaceTrackerCreateInfoANDROID zawiera informacje potrzebne do utworzenia uchwytu XrFaceTrackerANDROID.
Prawidłowe użycie (domyślne)
- Przed użyciem funkcji XrFaceTrackerCreateInfoANDROID musi być włączone rozszerzenie
XR_ANDROID_face_tracking
. type
musi byćXR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID
next
musi byćNULL
lub prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur.
Funkcja xrDestroyFaceTrackerANDROID jest zdefiniowana w ten sposób:
XrResult xrDestroyFaceTrackerANDROID(
XrFaceTrackerANDROID faceTracker);
Opisy parametrów
faceTracker
to XrFaceTrackerANDROID utworzony wcześniej przez xrCreateFaceTrackerANDROID.
Funkcja xrDestroyFaceTrackerANDROID zwalnia faceTracker
i podstawowe zasoby po zakończeniu śledzenia twarzy.
Prawidłowe użycie (domyślne)
- Przed wywołaniem metody xrDestroyFaceTrackerANDROID należy włączyć rozszerzenie
XR_ANDROID_face_tracking
. faceTracker
musi być prawidłowym identyfikatorem XrFaceTrackerANDROID
Bezpieczeństwo wątków
- Dostęp do
faceTracker
i wszystkich jego uchwytów podrzędnych musi być zsynchronizowany zewnętrznie.
Kody zwrotu
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_HANDLE_INVALID
Sprawdzanie kalibracji twarzy
Funkcja xrGetFaceCalibrationStateANDROID
jest zdefiniowana w ten sposób:
XrResult xrGetFaceCalibrationStateANDROID(
XrFaceTrackerANDROID faceTracker,
XrBool32* faceIsCalibratedOutput);
Opisy parametrów
faceTracker
to XrFaceTrackerANDROID utworzony wcześniej przez xrCreateFaceTrackerANDROID.faceIsCalibratedOutput
wskazuje, czy lokalizator twarzy został skalibrowany.
Aplikacja może sprawdzić stan kalibracji twarzy za pomocą funkcji xrGetFaceCalibrationStateANDROID.
Jeśli system nie obsługuje kalibracji twarzy, xrGetFaceCalibrationStateANDROID zwróciXR_ERROR_FEATURE_UNSUPPORTED
. W przeciwnym razie faceIsCalibratedOutput
może być ustawiony na XR_TRUE
, aby odzwierciedlić stan kalibracji twarzy.
Prawidłowe użycie (domyślne)
- Przed wywołaniem metody xrGetFaceCalibrationStateANDROID musi być włączone rozszerzenie
XR_ANDROID_face_tracking
. faceTracker
musi być prawidłowym identyfikatorem XrFaceTrackerANDROIDfaceIsCalibratedOutput
musi być wskaźnikiem do wartościXrBool32
Kody zwrotu
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
Wyrazy twarzy
Funkcja xrGetFaceStateANDROID zwraca kształty mieszania wyrażeń twarzy w danym momencie.
XrResult xrGetFaceStateANDROID(
XrFaceTrackerANDROID faceTracker,
const XrFaceStateGetInfoANDROID* getInfo,
XrFaceStateANDROID* faceStateOutput);
Opisy parametrów
faceTracker
to XrFaceTrackerANDROID utworzony wcześniej przez xrCreateFaceTrackerANDROID.getInfo
to wskaźnik do XrFaceStateGetInfoANDROID opisujący informacje potrzebne do uzyskania wyrażeń twarzy.faceStateOutput
to wskaźnik do XrFaceStateANDROID, który zwraca stan śledzenia twarzy i mimikę.
Prawidłowe użycie (domyślne)
- Przed wywołaniem funkcji xrGetFaceStateANDROID musi być włączone rozszerzenie
XR_ANDROID_face_tracking
. faceTracker
musi być prawidłowym identyfikatorem XrFaceTrackerANDROIDgetInfo
musi być wskaźnikiem do prawidłowej struktury XrFaceStateGetInfoANDROIDfaceStateOutput
musi być wskaźnikiem do struktury XrFaceStateANDROID.
Kody zwrotu
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
Struktura XrFaceStateGetInfoANDROID zawiera informacje potrzebne do uzyskania wyrazów twarzy.
typedef struct XrFaceStateGetInfoANDROID {
XrStructureType type;
void* next;
XrTime time;
} XrFaceStateGetInfoANDROID;
Opisy członków
type
to XrStructureType tej struktury.next
toNULL
lub wskaźnik do następnej struktury w łańcuchu struktur. Nie ma żadnych takich struktur zdefiniowanych w podstawowym OpenXR ani w tym rozszerzeniu.time
toXrTime
, w której przypadku wymagane są dane dotyczące wyrazu twarzy.
Aplikacje powinny żądać czasu równego przewidywanemu czasowi wyświetlania renderowanego kadru.
Prawidłowe użycie (domyślne)
- Przed użyciem funkcji XrFaceStateGetInfoANDROID musi być włączone rozszerzenie
XR_ANDROID_face_tracking
. type
musi byćXR_TYPE_FACE_STATE_GET_INFO_ANDROID
next
musi byćNULL
lub prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur.
Struktura XrFaceStateANDROID zwraca stan śledzenia twarzy i wyrazy twarzy.
typedef struct XrFaceStateANDROID {
XrStructureType type;
void* next;
uint32_t parametersCapacityInput;
uint32_t parametersCountOutput;
float* parameters;
XrFaceTrackingStateANDROID faceTrackingState;
XrTime sampleTime;
XrBool32 isValid;
} XrFaceStateANDROID;
Opisy członków
type
to XrStructureType tej struktury.next
toNULL
lub wskaźnik do następnej struktury w łańcuchu struktur. Nie ma żadnych takich struktur zdefiniowanych w podstawowym OpenXR ani w tym rozszerzeniu.parametersCapacityInput
touint32_t
określający pojemność tablicyparameters
lub 0, aby wskazać żądaną pojemność.parametersCountOutput
touint32_t
opisujący liczbęparameters
lub wymaganą pojemność w przypadku niewystarczającej wartościparametersCapacityInput
.parameters
to wskaźnik do tablicyfloat
przydzielonej przez aplikację, która zostanie wypełniona wagami kształtów mieszania wyrazu twarzy.faceTrackingState
toXrFaceTrackingStateANDROID
stanu śledzenia twarzy.sampleTime
to czasXrTime
, w którym zwracane wyrażenia są śledzone lub ekstrapolowane. Jest to czas, w którym zostały przesłane wagi wyrażenia, jeśli ekstrapolacja się powiodła.isValid
wskazuje, czy dane są prawidłowe, nawet jeśli nie pochodzą z bieżącego kadru.- Szczegółowy opis pobierania wymaganego rozmiaru
parameters
znajdziesz w sekcji Parametry rozmiaru bufora.
Aplikacja może ustawić parametersCapacityInput
na
XR_FACE_PARAMETER_COUNT_ANDROID
, aby uzyskać wyrażenia twarzy, które są indeksowane przez
XrFaceParameterIndicesANDROID.
Zwracane wartości parameters
odpowiadają wagom mieszania kształtów bieżących wyrazów twarzy.
Aktualizacje tablicy parameters
będą uporządkowane tak, aby aplikacja mogła indeksować elementy za pomocą odpowiedniego typu zbioru wyrażeń twarzy (np. XrFaceParameterIndicesANDROID).
Prawidłowe użycie (domyślne)
- Przed użyciem rozszerzenia XrFaceStateANDROID musi ono być włączone
XR_ANDROID_face_tracking
. type
musi byćXR_TYPE_FACE_STATE_ANDROID
next
musi byćNULL
lub prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur.- Jeśli
parametersCapacityInput
nie jest0, parameters
, musi być wskaźnikiem do tablicy wartościparametersCapacityInput float
. faceTrackingState
musi być prawidłową wartością XrFaceTrackingStateANDROID
Wyliczenie XrFaceTrackingStateANDROID identyfikuje różne stany śledzenia twarzy.
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;
Wykazy te mają następujące znaczenia:
Wyliczenie |
Opis |
|
Wskazuje, że śledzenie twarzy jest wstrzymane, ale może zostać wznowione w przyszłości. |
|
Śledzenie zostało zatrzymane, ale klient nadal ma aktywny lokalizator twarzy. |
|
Twarz jest śledzona, a jej pozycja jest aktualna. |
Konwencje dotyczące kształtów krzyżowania
To rozszerzenie definiuje 63 ksztalty mieszania za pomocą funkcji XR_FACE_PARAMETER_COUNT_ANDROID
w przypadku skompresowanego formatu G-Nome. Każdy parametr w tym wyliczonym typie jest indeksem tablicy kształtów mieszania, której wartości są typu float
, a czas wykonywania normalizuje je do 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;
Indeks | Nazwa | Obraz referencyjny | |
---|---|---|---|
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 |
Przykładowy kod śledzenia twarzy
Poniższy przykładowy kod pokazuje, jak uzyskać wszystkie wagi dla kształtów mieszania wyrazu twarzy.
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));
Nowe typy obiektów
Nowe stałe typu wyliczeniowego
XR_FACE_PARAMETER_COUNT_ANDROID
Wyliczenie XrObjectType zostało rozszerzone o:
XR_OBJECT_TYPE_FACE_TRACKER_ANDROID
Wyliczenie XrStructureType zostało rozszerzone o:
XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID
XR_TYPE_FACE_STATE_GET_INFO_ANDROID
XR_TYPE_FACE_STATE_ANDROID
Nowe wartości w polu enum
Nowe struktury
Nowe funkcje
- xrCreateFaceTrackerANDROID
- xrDestroyFaceTrackerANDROID
- xrGetFaceStateANDROID
- xrGetFaceCalibrationStateANDROID
Problemy
Historia wersji
- Wersja 1, 5 września 2024 r. (Levana Chen)
- Wstępny opis rozszerzenia