Перейти к основному содержимому

Code examples

Example code for obtaining face tracking data

PFN_xrStartEyeTrackingPICO xrStartEyeTrackingPICO = 0;
PFN_xrSetTrackingModePICO xrSetTrackingModePICO = 0;
PFN_xrGetFaceTrackingDataPICO xrGetFaceTrackingDataPICO = 0;

PFN_xrGetFaceTrackingDataPICO xrGetFaceTrackingStatePICO = 0;

// Requires XR_EXT_eye_gaze_interaction
xrGetInstanceProcAddr(instance, "xrStartEyeTrackingPICO", (PFN_xrVoidFunction*) &xrStartEyeTrackingPICO);
xrGetInstanceProcAddr(instance, "xrSetTrackingModePICO", (PFN_xrVoidFunction*) &xrSetTrackingModePICO);
xrGetInstanceProcAddr(instance, "xrGetFaceTrackingDataPICO", (PFN_xrVoidFunction*) &xrGetFaceTrackingDataPICO);

// Requires XR_PICO_eye_tracking
xrGetInstanceProcAddr(instance, "xrGetFaceTrackingStatePICO", (PFN_xrVoidFunction*) &xrGetFaceTrackingStatePICO);

if (xrStartEyeTrackingPICO) {
xrStartEyeTrackingPICO(session);
}

if (xrSetTrackingModePICO) {
xrSetTrackingModePICO(session, XR_TRACKING_MODE_FACE_BIT_PICO | XR_TRACKING_MODE_FACE_LIPSYNC_PICO | XR_TRACKING_MODE_FACE_LIPSYNC_BLEND_SHAPES_PICO);
}

if (xrGetFaceTrackingStatePICO) {
XrTrackingModeFlagsPICO mode = 0;
XrTrackingStateCodePICO code = 0;
xrGetFaceTrackingStatePICO(session, &mode, &code);
LOGD("Face tracking mode: %lu, state code: %d", mode, code);
}

if (xrGetFaceTrackingDataPICO) {
XrFaceTrackingDataPICO data = { 0 };
xrGetFaceTrackingDataPICO(session, displayTime, XR_GET_FACE_DATA_DEFAULT_PICO, &data);
LOGD("Tounge out blendshape: %f", data.blendShapeWeight[XR_BS_TONGUEOUT_PICO]);
}