String Nama
XR_ANDROID_face_tracking
Jenis Ekstensi
Ekstensi instance
Registered Extension Number
459
Revisi
1
Dependensi Ekstensi dan Versi
Tanggal Terakhir Diubah
2024-09-06
Status IP
Tidak ada klaim IP yang diketahui.
Kontributor
Spencer Quin, Google
Jared Finder, Google
Levana Chen, Google
Ringkasan
Ekstensi ini memungkinkan aplikasi mendapatkan bobot bentuk gabungan dan merender ekspresi wajah dalam pengalaman XR.
Ekstensi ini dimaksudkan untuk memberikan informasi yang diperlukan guna membuat avatar realistis dan representasi ekspresif pengguna di ruang virtual. Aplikasi dapat memeriksa aktivasi kalibrasi wajah sebelum mendapatkan bobot bentuk gabungan.
Pelacak Wajah
Pelacak wajah adalah perangkat deteksi yang melacak ekspresi wajah melalui aliran gambar yang ditampilkan kepada pengguna dan kalibrasi kamera. Tujuan utama ekstensi ini adalah untuk memetakan ekspresi wajah pengguna ke avatar mereka dalam tampilan virtual.
Data pelacakan wajah adalah informasi pribadi yang sensitif dan terkait erat dengan privasi dan integritas pribadi. Sebaiknya aplikasi yang menyimpan atau mentransfer data pelacakan wajah selalu meminta persetujuan aktif dan tertentu dari pengguna untuk melakukannya.
- Aplikasi akan menerima
XR_ERROR_PERMISSION_INSUFFICIENT
saat membuat pelacak wajah aktif hingga aplikasi diizinkan mengakses pelacak wajah. - Saat mendapatkan status wajah menggunakan xrGetFaceStateANDROID,
XrFaceStateANDROID::isValid tidak akan menampilkan
XR_TRUE
kecuali jika akses aplikasi telah diizinkan
Membuat nama sebutan pelacak wajah
XR_DEFINE_HANDLE(XrFaceTrackerANDROID)
Handle XrFaceTrackerANDROID mewakili pelacak wajah untuk pelacakan wajah.
Nama sebutan ini dapat digunakan untuk mengakses data pelacakan wajah menggunakan fungsi lain dalam ekstensi ini.
Fungsi xrCreateFaceTrackerANDROID ditentukan sebagai:
XrResult xrCreateFaceTrackerANDROID(
XrSession session,
const XrFaceTrackerCreateInfoANDROID* createInfo,
XrFaceTrackerANDROID* faceTracker);
Deskripsi Parameter
session
adalah handle XrSession tempat pelacak wajah akan aktif.createInfo
adalah XrFaceTrackerCreateInfoANDROID yang digunakan untuk menentukan face tracker.faceTracker
adalah handle XrFaceTrackerANDROID yang ditampilkan.
Aplikasi dapat membuat handle XrFaceTrackerANDROID menggunakan fungsi xrCreateFaceTrackerANDROID.
Jika sistem tidak mendukung pelacakan wajah, xrCreateFaceTrackerANDROID
akan menampilkan XR_ERROR_FEATURE_UNSUPPORTED
.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_face_tracking
harus diaktifkan sebelum memanggil xrCreateFaceTrackerANDROID session
harus berupa nama sebutan channel XrSession yang validcreateInfo
harus berupa pointer ke struktur XrFaceTrackerCreateInfoANDROID yang validfaceTracker
harus berupa pointer ke nama sebutan channel XrFaceTrackerANDROID
Kode Status
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
Struktur XrFaceTrackerCreateInfoANDROID dijelaskan sebagai berikut:
typedef struct XrFaceTrackerCreateInfoANDROID {
XrStructureType type;
void* next;
} XrFaceTrackerCreateInfoANDROID;
Deskripsi Anggota
type
adalah XrStructureType dari struktur ini.next
adalahNULL
atau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur semacam itu yang ditentukan di OpenXR inti atau ekstensi ini.
Struktur XrFaceTrackerCreateInfoANDROID menjelaskan informasi untuk membuat handle XrFaceTrackerANDROID.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_face_tracking
harus diaktifkan sebelum menggunakan XrFaceTrackerCreateInfoANDROID type
harus berupaXR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID
next
harus berupaNULL
atau pointer yang valid ke struktur berikutnya dalam rantai struktur
Fungsi xrDestroyFaceTrackerANDROID ditentukan sebagai:
XrResult xrDestroyFaceTrackerANDROID(
XrFaceTrackerANDROID faceTracker);
Deskripsi Parameter
faceTracker
adalah XrFaceTrackerANDROID yang sebelumnya dibuat oleh xrCreateFaceTrackerANDROID.
Fungsi xrDestroyFaceTrackerANDROID merilis faceTracker
dan
resource yang mendasarinya saat pengalaman pelacakan wajah berakhir.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_face_tracking
harus diaktifkan sebelum memanggil xrDestroyFaceTrackerANDROID faceTracker
harus berupa nama sebutan XrFaceTrackerANDROID yang valid
Keamanan Thread
- Akses ke
faceTracker
, dan setiap nama sebutan turunan, harus disinkronkan secara eksternal
Kode Status
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_HANDLE_INVALID
Memeriksa kalibrasi wajah
Fungsi xrGetFaceCalibrationStateANDROID
ditentukan sebagai:
XrResult xrGetFaceCalibrationStateANDROID(
XrFaceTrackerANDROID faceTracker,
XrBool32* faceIsCalibratedOutput);
Deskripsi Parameter
faceTracker
adalah XrFaceTrackerANDROID yang sebelumnya dibuat oleh xrCreateFaceTrackerANDROID.faceIsCalibratedOutput
menunjukkan apakah pelacak wajah telah dikalibrasi atau tidak.
Aplikasi dapat memeriksa status kalibrasi wajah menggunakan fungsi xrGetFaceCalibrationStateANDROID.
Jika sistem tidak mendukung kalibrasi wajah,
xrGetFaceCalibrationStateANDROID akan menampilkan
XR_ERROR_FEATURE_UNSUPPORTED
. Jika tidak, faceIsCalibratedOutput
dapat ditetapkan
ke XR_TRUE
untuk mencerminkan status kalibrasi wajah.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_face_tracking
harus diaktifkan sebelum memanggil xrGetFaceCalibrationStateANDROID faceTracker
harus berupa nama sebutan XrFaceTrackerANDROID yang validfaceIsCalibratedOutput
harus berupa pointer ke nilaiXrBool32
Kode Status
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
Mendapatkan ekspresi wajah
Fungsi xrGetFaceStateANDROID menampilkan bentuk gabungan ekspresi wajah pada waktu tertentu.
XrResult xrGetFaceStateANDROID(
XrFaceTrackerANDROID faceTracker,
const XrFaceStateGetInfoANDROID* getInfo,
XrFaceStateANDROID* faceStateOutput);
Deskripsi Parameter
faceTracker
adalah XrFaceTrackerANDROID yang sebelumnya dibuat oleh xrCreateFaceTrackerANDROID.getInfo
adalah pointer ke XrFaceStateGetInfoANDROID yang menjelaskan informasi untuk mendapatkan ekspresi wajah.faceStateOutput
adalah pointer ke XrFaceStateANDROID yang menerima ekspresi wajah dan status pelacakan wajah yang ditampilkan.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_face_tracking
harus diaktifkan sebelum memanggil xrGetFaceStateANDROID faceTracker
harus berupa nama sebutan XrFaceTrackerANDROID yang validgetInfo
harus berupa pointer ke struktur XrFaceStateGetInfoANDROID yang validfaceStateOutput
harus berupa pointer ke struktur XrFaceStateANDROID
Kode Status
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
Struktur XrFaceStateGetInfoANDROID menjelaskan informasi untuk mendapatkan ekspresi wajah.
typedef struct XrFaceStateGetInfoANDROID {
XrStructureType type;
void* next;
XrTime time;
} XrFaceStateGetInfoANDROID;
Deskripsi Anggota
type
adalah XrStructureType dari struktur ini.next
adalahNULL
atau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur semacam itu yang ditentukan di OpenXR inti atau ekstensi ini.time
adalahXrTime
tempat ekspresi wajah diminta.
Aplikasi harus meminta waktu yang sama dengan waktu tampilan yang diprediksi untuk frame yang dirender.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_face_tracking
harus diaktifkan sebelum menggunakan XrFaceStateGetInfoANDROID type
harus berupaXR_TYPE_FACE_STATE_GET_INFO_ANDROID
next
harus berupaNULL
atau pointer yang valid ke struktur berikutnya dalam rantai struktur
Struktur XrFaceStateANDROID menampilkan status pelacakan wajah dan ekspresi wajah.
typedef struct XrFaceStateANDROID {
XrStructureType type;
void* next;
uint32_t parametersCapacityInput;
uint32_t parametersCountOutput;
float* parameters;
XrFaceTrackingStateANDROID faceTrackingState;
XrTime sampleTime;
XrBool32 isValid;
} XrFaceStateANDROID;
Deskripsi Anggota
type
adalah XrStructureType dari struktur ini.next
adalahNULL
atau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur semacam itu yang ditentukan di OpenXR inti atau ekstensi ini.parametersCapacityInput
adalahuint32_t
yang menjelaskan kapasitas arrayparameters
, atau 0 untuk menunjukkan permintaan guna mengambil kapasitas yang diperlukan.parametersCountOutput
adalahuint32_t
yang menjelaskan jumlahparameters
, atau kapasitas yang diperlukan jikaparametersCapacityInput
tidak memadai.parameters
adalah pointer ke arrayfloat
yang dialokasikan aplikasi yang akan diisi dengan bobot bentuk gabungan ekspresi wajah.faceTrackingState
adalahXrFaceTrackingStateANDROID
status validitas pelacakan wajah.sampleTime
adalah waktuXrTime
saat ekspresi yang ditampilkan dilacak atau diekstrapolasi. Nilai ini sama dengan waktu saat bobot ekspresi diminta jika ekstrapolasi pada saat itu berhasil.isValid
menunjukkan apakah data valid meskipun bukan dari frame saat ini.- Lihat bagian Parameter Ukuran Buffer untuk mengetahui deskripsi terperinci tentang
mengambil ukuran
parameters
yang diperlukan.
Aplikasi dapat menetapkan parametersCapacityInput
ke
XR_FACE_PARAMETER_COUNT_ANDROID
untuk mendapatkan ekspresi wajah yang diindeks oleh
XrFaceParameterIndicesANDROID.
parameters
yang ditampilkan mewakili bobot bentuk
gabungan ekspresi wajah saat ini.
Update array parameters
akan diurutkan sehingga
aplikasi dapat mengindeks elemen menggunakan enum ekspresi
wajah yang sesuai (misalnya, XrFaceParameterIndicesANDROID).
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_face_tracking
harus diaktifkan sebelum menggunakan XrFaceStateANDROID type
harus berupaXR_TYPE_FACE_STATE_ANDROID
next
harus berupaNULL
atau pointer yang valid ke struktur berikutnya dalam rantai struktur- Jika
parametersCapacityInput
bukan0, parameters
, harus berupa pointer ke array nilaiparametersCapacityInput float
faceTrackingState
harus berupa nilai XrFaceTrackingStateANDROID yang valid
Enumerasi XrFaceTrackingStateANDROID mengidentifikasi berbagai status pelacak wajah.
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;
Enum memiliki arti berikut:
Enum |
Deskripsi |
|
Menunjukkan bahwa pelacakan wajah dijeda, tetapi dapat dilanjutkan di masa mendatang. |
|
Pelacakan telah dihentikan, tetapi klien masih memiliki pelacak wajah yang aktif. |
|
Wajah dilacak dan posenya saat ini. |
Konvensi bentuk gabungan
Ekstensi ini menentukan 63 bentuk gabungan melalui
XR_FACE_PARAMETER_COUNT_ANDROID
, untuk format G-Nome yang dikurangi. Setiap parameter
dalam enum ini adalah indeks ke array bentuk gabungan yang nilainya adalah jenis
float
dan runtime dinormalisasi menjadi 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 | Nama | Gambar Referensi | |
---|---|---|---|
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 |
Contoh kode untuk pelacakan wajah
Kode contoh berikut menunjukkan cara mendapatkan semua bobot untuk bentuk gabungan ekspresi wajah.
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));
Jenis Objek Baru
Konstanta Enum Baru
XR_FACE_PARAMETER_COUNT_ANDROID
Enumerasi XrObjectType diperluas dengan:
XR_OBJECT_TYPE_FACE_TRACKER_ANDROID
Enumerasi XrStructureType diperluas dengan:
XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID
XR_TYPE_FACE_STATE_GET_INFO_ANDROID
XR_TYPE_FACE_STATE_ANDROID
Enum Baru
Struktur Baru
Fungsi Baru
- xrCreateFaceTrackerANDROID
- xrDestroyFaceTrackerANDROID
- xrGetFaceStateANDROID
- xrGetFaceCalibrationStateANDROID
Masalah
Histori Versi
- Revisi 1, 05-09-2024 (Levana Chen)
- Deskripsi ekstensi awal