名前の文字列
XR_ANDROID_face_tracking
拡張機能の種類
インスタンスの拡張
登録されている電話番号
459
リビジョン
1
拡張機能とバージョンの依存関係
最終更新日
2024-09-06
IP ステータス
既知の IP に関する申し立てはありません。
寄与者
Spencer Quin、Google
Jared Finder、Google
Levana Chen、Google
概要
この拡張機能により、アプリはブレンドシェイプの重みを取得し、XR エクスペリエンスで顔の表情をレンダリングできます。
この拡張機能は、仮想空間でユーザーのリアルなアバターや表現力豊かな表現を作成するために必要な情報を提供することを目的としています。アプリは、ブレンド シェイプの重みを取得する前に、顔の補正の有効化を確認できます。
顔トラッカー
フェイス トラッカーは、ユーザー向けの画像ストリームとカメラ キャリブレーションを使用して表情を追跡するセンサー デバイスです。この拡張機能の主な目的は、ユーザーの表情を仮想シーンのアバターにマッピングすることです。
顔トラッキング データは機密性の高い個人情報であり、個人のプライバシーと完全性と密接に関連しています。顔トラッキング データを保存または転送するアプリでは、常にユーザーにアクティブで具体的な同意を求めることを強くおすすめします。
- アプリがアクティブなフェイス トラッカーを作成するときに、アプリがフェイス トラッカーへのアクセスを許可されるまで、
XR_ERROR_PERMISSION_INSUFFICIENT
が返されます。 - xrGetFaceStateANDROID を使用して顔の状態を取得する場合、アプリケーション アクセスが許可されていない限り、XrFaceStateANDROID::isValid は
XR_TRUE
を返しません。
顔トラッカー ハンドルを作成する
XR_DEFINE_HANDLE(XrFaceTrackerANDROID)
XrFaceTrackerANDROID ハンドルは、顔トラッキング用の顔トラッカーを表します。
このハンドルを使用すると、この拡張機能の他の関数を使用して顔トラッキング データにアクセスできます。
xrCreateFaceTrackerANDROID 関数は次のように定義されます。
XrResult xrCreateFaceTrackerANDROID(
XrSession session,
const XrFaceTrackerCreateInfoANDROID* createInfo,
XrFaceTrackerANDROID* faceTracker);
パラメータの説明
session
は、フェイス トラッカーがアクティブになる XrSession ハンドルです。createInfo
は、フェイス トラッカーの指定に使用される XrFaceTrackerCreateInfoANDROID です。faceTracker
は、返された XrFaceTrackerANDROID ハンドルです。
アプリケーションは、xrCreateFaceTrackerANDROID 関数を使用して XrFaceTrackerANDROID ハンドルを作成できます。
システムが顔トラッキングをサポートしていない場合、xrCreateFaceTrackerANDROID は XR_ERROR_FEATURE_UNSUPPORTED
を返します。
有効な使用方法(暗黙的)
- xrCreateFaceTrackerANDROID を呼び出す前に、
XR_ANDROID_face_tracking
拡張機能を有効にする必要があります。 session
は有効な XrSession ハンドルである必要があります。createInfo
は、有効な XrFaceTrackerCreateInfoANDROID 構造体へのポインタである必要があります。faceTracker
は XrFaceTrackerANDROID ハンドルへのポインタである必要があります。
戻りコード
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
XrFaceTrackerCreateInfoANDROID 構造は次のように記述されます。
typedef struct XrFaceTrackerCreateInfoANDROID {
XrStructureType type;
void* next;
} XrFaceTrackerCreateInfoANDROID;
メンバーの説明
type
は、この構造の XrStructureType です。next
はNULL
または構造体チェーンの次の構造体へのポインタです。コア OpenXR またはこの拡張機能では、そのような構造は定義されていません。
XrFaceTrackerCreateInfoANDROID 構造体には、XrFaceTrackerANDROID ハンドルを作成する情報が記述されています。
有効な使用方法(暗黙的)
- XrFaceTrackerCreateInfoANDROID を使用する前に、
XR_ANDROID_face_tracking
拡張機能を有効にする必要があります。 type
はXR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID
にする必要がありますnext
はNULL
であるか、構造体チェーンの次の構造体を指す有効なポインタである必要があります。
xrDestroyFaceTrackerANDROID 関数は次のように定義されます。
XrResult xrDestroyFaceTrackerANDROID(
XrFaceTrackerANDROID faceTracker);
パラメータの説明
faceTracker
は、xrCreateFaceTrackerANDROID によって以前に作成された XrFaceTrackerANDROID です。
xrDestroyFaceTrackerANDROID 関数は、顔トラッキングが終了したときに faceTracker
と基盤となるリソースを解放します。
有効な使用方法(暗黙的)
- xrDestroyFaceTrackerANDROID を呼び出す前に、
XR_ANDROID_face_tracking
拡張機能を有効にする必要があります。 faceTracker
は有効な XrFaceTrackerANDROID ハンドルである必要があります。
スレッドセーフ
faceTracker
と子ハンドルへのアクセスは、外部で同期する必要があります。
戻りコード
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_HANDLE_INVALID
顔のキャリブレーションを確認する
xrGetFaceCalibrationStateANDROID
関数は次のように定義されます。
XrResult xrGetFaceCalibrationStateANDROID(
XrFaceTrackerANDROID faceTracker,
XrBool32* faceIsCalibratedOutput);
パラメータの説明
faceTracker
は、xrCreateFaceTrackerANDROID によって以前に作成された XrFaceTrackerANDROID です。faceIsCalibratedOutput
は、フェイス トラッカーがキャリブレーションされているかどうかを示します。
アプリケーションは、xrGetFaceCalibrationStateANDROID 関数を使用して顔の補正状態を確認できます。
システムが顔の補正をサポートしていない場合、xrGetFaceCalibrationStateANDROID は XR_ERROR_FEATURE_UNSUPPORTED
を返します。それ以外の場合は、顔の補正状態を反映するために faceIsCalibratedOutput
を XR_TRUE
に設定できます。
有効な使用方法(暗黙的)
- xrGetFaceCalibrationStateANDROID を呼び出す前に、
XR_ANDROID_face_tracking
拡張機能を有効にする必要があります。 faceTracker
は有効な XrFaceTrackerANDROID ハンドルである必要があります。faceIsCalibratedOutput
はXrBool32
値へのポインタである必要があります。
戻りコード
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
顔の表情を取得する
xrGetFaceStateANDROID 関数は、特定の時点での表情のブレンドシェイプを返します。
XrResult xrGetFaceStateANDROID(
XrFaceTrackerANDROID faceTracker,
const XrFaceStateGetInfoANDROID* getInfo,
XrFaceStateANDROID* faceStateOutput);
パラメータの説明
faceTracker
は、xrCreateFaceTrackerANDROID によって以前に作成された XrFaceTrackerANDROID です。getInfo
は、顔の表情を取得するための情報を記述する XrFaceStateGetInfoANDROID へのポインタです。faceStateOutput
は、返された顔トラッキング状態と顔の表情を受信する XrFaceStateANDROID へのポインタです。
有効な使用方法(暗黙的)
- xrGetFaceStateANDROID を呼び出す前に、
XR_ANDROID_face_tracking
拡張機能を有効にする必要があります。 faceTracker
は有効な XrFaceTrackerANDROID ハンドルである必要があります。getInfo
は有効な XrFaceStateGetInfoANDROID 構造体へのポインタである必要があります。faceStateOutput
は XrFaceStateANDROID 構造体へのポインタである必要があります。
戻りコード
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
XrFaceStateGetInfoANDROID 構造体には、顔の表情を取得するための情報が記述されています。
typedef struct XrFaceStateGetInfoANDROID {
XrStructureType type;
void* next;
XrTime time;
} XrFaceStateGetInfoANDROID;
メンバーの説明
type
は、この構造の XrStructureType です。next
はNULL
または構造体チェーンの次の構造体へのポインタです。コア OpenXR またはこの拡張機能では、そのような構造は定義されていません。time
は、表情がリクエストされるXrTime
です。
アプリは、レンダリングされたフレームの予測される表示時間と同じ時間をリクエストする必要があります。
有効な使用方法(暗黙的)
- XrFaceStateGetInfoANDROID を使用する前に、
XR_ANDROID_face_tracking
拡張機能を有効にする必要があります。 type
はXR_TYPE_FACE_STATE_GET_INFO_ANDROID
にする必要がありますnext
はNULL
であるか、構造体チェーンの次の構造体を指す有効なポインタである必要があります。
XrFaceStateANDROID 構造は、顔トラッキング状態と顔の表情を返します。
typedef struct XrFaceStateANDROID {
XrStructureType type;
void* next;
uint32_t parametersCapacityInput;
uint32_t parametersCountOutput;
float* parameters;
XrFaceTrackingStateANDROID faceTrackingState;
XrTime sampleTime;
XrBool32 isValid;
} XrFaceStateANDROID;
メンバーの説明
type
は、この構造の XrStructureType です。next
はNULL
または構造体チェーンの次の構造体へのポインタです。コア OpenXR またはこの拡張機能では、そのような構造は定義されていません。parametersCapacityInput
は、parameters
配列の容量を記述するuint32_t
です。必要な容量の取得リクエストを示す場合は 0 です。parametersCountOutput
は、parameters
の数、またはparametersCapacityInput
が不十分な場合に必要な容量を記述するuint32_t
です。parameters
は、表情のブレンド シェイプの重みで埋められる、アプリで割り振られたfloat
の配列へのポインタです。faceTrackingState
は、フェイス トラッキングの有効性ステータスのXrFaceTrackingStateANDROID
です。sampleTime
は、返された式が追跡または外挿されるXrTime
時間です。その時点の外挿が成功した場合、式の重みがリクエストされた時刻と同じです。isValid
は、データが現在のフレームからのものではない場合でも有効かどうかを示します。- 必要な
parameters
サイズの取得の詳細については、バッファサイズ パラメータのセクションをご覧ください。
アプリは parametersCapacityInput
を XR_FACE_PARAMETER_COUNT_ANDROID
に設定して、XrFaceParameterIndicesANDROID でインデックス付けされた表情を取得できます。
返された parameters
は、現在の表情のブレンドシェイプの重みを表します。
parameters
配列の更新は、対応する顔の表情列挙型(XrFaceParameterIndicesANDROID など)を使用して、アプリケーションが要素をインデックス登録できるように順序付けられます。
有効な使用方法(暗黙的)
- XrFaceStateANDROID を使用する前に、
XR_ANDROID_face_tracking
拡張機能を有効にする必要があります。 type
はXR_TYPE_FACE_STATE_ANDROID
にする必要がありますnext
はNULL
であるか、構造体チェーンの次の構造体を指す有効なポインタである必要があります。parametersCapacityInput
が0, parameters
でない場合、parametersCapacityInput float
値の配列へのポインタである必要があります。faceTrackingState
は有効な XrFaceTrackingStateANDROID 値である必要があります。
XrFaceTrackingStateANDROID 列挙型は、フェイス トラッカーのさまざまな状態を識別します。
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;
列挙型の意味は次のとおりです。
列挙型 |
説明 |
|
顔認識が一時停止されているが、今後再開される可能性があることを示します。 |
|
トラッキングは停止しているが、クライアントの顔トラッカーはアクティブな状態である。 |
|
顔がトラッキングされ、ポーズが最新の状態である。 |
ブレンド シェイプの規則
この拡張機能は、XR_FACE_PARAMETER_COUNT_ANDROID
を使用して、削減された G-Nome 形式の 63 個のブレンドシェイプを定義します。この列挙型の各パラメータは、値が float
型のブレンドシェイプ配列のインデックスであり、ランタイムで 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;
インデックス | 名前 | 参照画像 | |
---|---|---|---|
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 |
顔トラッキングのサンプルコード
次のサンプルコードは、表情のブレンドシェイプのすべての重みを取得する方法を示しています。
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));
新しいオブジェクト タイプ
新しい列挙型定数
XR_FACE_PARAMETER_COUNT_ANDROID
XrObjectType 列挙型が拡張され、次のように変更されました。
XR_OBJECT_TYPE_FACE_TRACKER_ANDROID
XrStructureType 列挙型が拡張され、次のように変更されました。
XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID
XR_TYPE_FACE_STATE_GET_INFO_ANDROID
XR_TYPE_FACE_STATE_ANDROID
新しい列挙型
新しい構造
新機能
- xrCreateFaceTrackerANDROID
- xrDestroyFaceTrackerANDROID
- xrGetFaceStateANDROID
- xrGetFaceCalibrationStateANDROID
問題
変更履歴
- リビジョン 1、2024 年 9 月 5 日(Levana Chen)
- 最初の拡張機能の説明