XR_ANDROID_eye_tracking
Name String
XR_ANDROID_eye_tracking
拡張機能の種類
インスタンス拡張
登録済みの内線番号
457
リビジョン
1
承認ステータス
未批准
拡張機能とバージョンの依存関係
最終更新日
2025-01-17
IP ステータス
既知の IP 申し立てはありません。
寄与者
Spencer Quin、Google
Jared Finder、Google
Levana Chen、Google
Kenny Vercaemer、Google
Prasanthi Gurumurthy、Google
Nihav Jain、Google
概要
この拡張機能により、アプリはユーザーの目の位置と向き、アイ トラッキングのステータスを取得できます。
アイ トラッキング データは、粗いモードと細かいモードの 2 つのモードで提供されます。粗いトラッキングではユーザーの目の位置を大まかに推定し、細かいトラッキングではより正確に推定します。粗いトラッキングは、基本的なアバターのような表現を提供するアプリケーション向けであり、細かいトラッキングは、より正確なアプリケーション向けです。
インタラクションには XR_EXT_eye_gaze_interaction を使用すべきです。
権限
Android アプリは、マニフェストに android.permission.EYE_TRACKING_COARSE 権限または android.permission.EYE_TRACKING_FINE 権限を記載する必要があります。これらの権限は危険な権限と見なされます。アプリは、これらの関数を使用するために、実行時に権限をリクエストしなければなりません。
- xrCreateEyeTrackerANDROID(少なくとも 1 つの権限)
- xrGetCoarseTrackingEyesInfoANDROID(android.permission.EYE_TRACKING_COARSE)
- xrGetFineTrackingEyesInfoANDROID(android.permission.EYE_TRACKING_FINE)
(保護レベル: dangerous)
システム機能を検査する
XrSystemEyeTrackingPropertiesANDROID 構造体は次のように定義されます。
typedef struct XrSystemEyeTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsEyeTracking;
} XrSystemEyeTrackingPropertiesANDROID;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。このような構造体は、コア OpenXR またはこの拡張機能では定義されていません。supportsEyeTrackingは、現在のシステムがアイトラッキングをサポートしているかどうかを示すXrBool32です。
アプリは、xrGetSystemProperties を呼び出すときに、XrSystemEyeTrackingPropertiesANDROID 構造体を使用して XrSystemProperties を拡張することで、システムがアイ トラッキングに対応しているかどうかを検査できます。
ランタイムが supportsEyeTracking に対して XR_FALSE を返す場合に限り、ランタイムは xrCreateEyeTrackerANDROID から XR_ERROR_FEATURE_UNSUPPORTED を返さなければなりません。
有効な使用方法(暗黙的)
-
XR_ANDROID_eye_tracking拡張機能は、XrSystemEyeTrackingPropertiesANDROID を使用する前に有効にする必要があります。 -
typeはXR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROIDにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタでなければなりません。
アイ トラッカー ハンドルの作成
XR_DEFINE_HANDLE(XrEyeTrackerANDROID)
XrEyeTrackerANDROID ハンドルは、目をトラッキングするアイ トラッカーを表し、ユーザーが見ている場所を正確にマッピングします。
アイ トラッキング データは機密性の高い個人情報であり、個人のプライバシーと誠実性に密接に関連しています。アイトラッキング データを保存または転送するアプリでは、常にユーザーに明示的な同意を求めることを強くおすすめします。
アプリケーションは、このハンドルを使用して、この拡張機能の他の関数を使用してアイ トラッキング データにアクセスします。
アイ トラッキングは、シーン内の目のポーズとステータスを表現します。
xrCreateEyeTrackerANDROID 関数は次のように定義されます。
XrResult xrCreateEyeTrackerANDROID(
XrSession session,
const XrEyeTrackerCreateInfoANDROID* createInfo,
XrEyeTrackerANDROID* eyeTracker);
パラメータの説明
sessionは、アイ トラッキングが有効になる XrSession ハンドルです。createInfoは、アイ トラッキングの指定に使用される XrEyeTrackerCreateInfoANDROID です。eyeTrackerは、返された XrEyeTrackerANDROID ハンドルです。
アプリは、xrCreateEyeTrackerANDROID 関数を使用して XrEyeTrackerANDROID ハンドルを作成します。
システムがアイ トラッキングをサポートしていない場合、ランタイムは xrCreateEyeTrackerANDROID から XR_ERROR_FEATURE_UNSUPPORTED を返さなければなりません。
有効な使用方法(暗黙的)
-
XR_ANDROID_eye_tracking拡張機能は、xrCreateEyeTrackerANDROID を呼び出す前に有効にする必要があります。 -
sessionは、有効な XrSession ハンドルでなければなりません。 -
createInfoは、有効な XrEyeTrackerCreateInfoANDROID 構造体へのポインタでなければなりません -
eyeTrackerは XrEyeTrackerANDROID ハンドルへのポインタでなければなりません
戻りコード
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FEATURE_UNSUPPORTEDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
XrEyeTrackerCreateInfoANDROID 構造体は次のように定義されます。
typedef struct XrEyeTrackerCreateInfoANDROID {
XrStructureType type;
const void* next;
} XrEyeTrackerCreateInfoANDROID;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。このような構造体は、コア OpenXR またはこの拡張機能では定義されていません。
XrEyeTrackerCreateInfoANDROID 構造体は、XrEyeTrackerANDROID ハンドルを作成するための情報を記述します。
有効な使用方法(暗黙的)
- XrEyeTrackerCreateInfoANDROID を使用する前に、
XR_ANDROID_eye_tracking拡張機能を有効にする必要があります。 -
typeはXR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROIDにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタでなければなりません。
xrDestroyEyeTrackerANDROID 関数は次のように定義されます。
XrResult xrDestroyEyeTrackerANDROID(
XrEyeTrackerANDROID eyeTracker);
パラメータの説明
eyeTrackerは、以前に xrCreateEyeTrackerANDROID によって作成された XrEyeTrackerANDROID です。
xrDestroyEyeTrackerANDROID 関数は、アイ トラッキング エクスペリエンスが終了すると、eyeTracker と基盤となるリソースを解放します。
有効な使用方法(暗黙的)
-
XR_ANDROID_eye_tracking拡張機能は、xrDestroyEyeTrackerANDROID を呼び出す前に有効にする必要があります。 -
eyeTrackerは、有効な XrEyeTrackerANDROID ハンドルでなければなりません。
スレッドセーフ
eyeTrackerとその子ハンドルへのアクセスは、外部で同期する必要があります。
戻りコード
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
目の情報を取得しています
xrGetCoarseTrackingEyesInfoANDROID 関数は次のように定義されます。
XrResult xrGetCoarseTrackingEyesInfoANDROID(
XrEyeTrackerANDROID eyeTracker,
const XrEyesGetInfoANDROID* getInfo,
XrEyesANDROID* eyesOutput);
パラメータの説明
eyeTrackerは、以前に xrCreateEyeTrackerANDROID によって作成された XrEyeTrackerANDROID です。getInfoは、目のポーズと状態をクエリするための情報を提供する XrEyesGetInfoANDROID へのポインタです。eyesOutputは、返された目の情報(ポーズや状態など)を含む XrEyesANDROID へのポインタです。
xrGetCoarseTrackingEyesInfoANDROID 関数は、ユーザーのプライバシーを保護する方法で、目の状態とポーズに関する情報を取得します。
アプリに android.permission.EYE_TRACKING_COARSE 権限がない場合、ランタイムは XR_ERROR_PERMISSION_INSUFFICIENT を返さなければなりません。
目のポーズは、XrEyesGetInfoANDROID :: time の XrEyesGetInfoANDROID :: baseSpace で表されます。
目のポーズの位置と方向は、常にトラッキングされているか、トラッキングされていないかのいずれかです。つまり、ランタイムは、提供された XrEyesANDROID :: eyes で XR_SPACE_LOCATION_POSITION_TRACKED_BIT と XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT の両方を設定するか、XR_SPACE_LOCATION_POSITION_TRACKED_BIT と XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT の両方をクリアし、XrEyesANDROID :: mode を設定してトラッキング状態を示す必要があります。
有効な使用方法(暗黙的)
-
XR_ANDROID_eye_tracking拡張機能は、xrGetCoarseTrackingEyesInfoANDROID を呼び出す前に有効にする必要があります。 -
eyeTrackerは、有効な XrEyeTrackerANDROID ハンドルでなければなりません。 -
getInfoは、有効な XrEyesGetInfoANDROID 構造体へのポインタでなければなりません -
eyesOutputは、XrEyesANDROID 構造体へのポインタでなければなりません。
戻りコード
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
xrGetFineTrackingEyesInfoANDROID 関数は次のように定義されます。
XrResult xrGetFineTrackingEyesInfoANDROID(
XrEyeTrackerANDROID eyeTracker,
const XrEyesGetInfoANDROID* getInfo,
XrEyesANDROID* eyesOutput);
パラメータの説明
eyeTrackerは、以前に xrCreateEyeTrackerANDROID によって作成された XrEyeTrackerANDROID です。getInfoは、必要な出力を指定するために使用される XrEyesGetInfoANDROID へのポインタです。eyesOutputは、返された目の情報(ポーズや状態など)を含む XrEyesANDROID へのポインタです。
xrGetFineTrackingEyesInfoANDROID 関数は、xrGetCoarseTrackingEyesInfoANDROID よりも高い精度で目の状態とポーズに関する情報を取得します。
アプリに android.permission.EYE_TRACKING_FINE 権限がない場合、ランタイムは XR_ERROR_PERMISSION_INSUFFICIENT を返さなければなりません。
目の情報は、XrEyesGetInfoANDROID :: time、XrEyesGetInfoANDROID :: baseSpace を使用して xrGetFineTrackingEyesInfoANDROID を呼び出した時点のベーススペースを基準として解決されます。ランタイムは、呼び出し時に XrEyesGetInfoANDROID :: baseSpace で定義された位置を解決しなければなりません。
目のポーズの位置と方向は、常にトラッキングされているか、トラッキングされていないかのいずれかです。つまり、ランタイムは、提供された XrEyesANDROID :: eyes で XR_SPACE_LOCATION_POSITION_TRACKED_BIT と XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT の両方を設定するか、XR_SPACE_LOCATION_POSITION_TRACKED_BIT と XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT の両方をクリアし、XrEyesANDROID :: mode を設定してトラッキング状態を示す必要があります。
有効な使用方法(暗黙的)
- xrGetFineTrackingEyesInfoANDROID を呼び出す前に、
XR_ANDROID_eye_tracking拡張機能を有効にする必要があります。 -
eyeTrackerは、有効な XrEyeTrackerANDROID ハンドルでなければなりません。 -
getInfoは、有効な XrEyesGetInfoANDROID 構造体へのポインタでなければなりません -
eyesOutputは XrEyesANDROID 構造体へのポインタでなければなりません
戻りコード
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
XrEyesGetInfoANDROID 構造体には、目のポーズと状態を取得するために必要な情報が含まれています。
typedef struct XrEyesGetInfoANDROID {
XrStructureType type;
const void* next;
XrTime time;
XrSpace baseSpace;
} XrEyesGetInfoANDROID;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。このような構造体は、コア OpenXR またはこの拡張機能では定義されていません。timeは、baseSpaceを基準として座標を評価するXrTimeです。baseSpaceは、目のポーズを返す XrSpace です。
有効な使用方法(暗黙的)
- XrEyesGetInfoANDROID を使用する前に、
XR_ANDROID_eye_tracking拡張機能を有効にする必要があります。 -
typeはXR_TYPE_EYES_GET_INFO_ANDROIDにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタでなければなりません。 -
baseSpaceは有効な XrSpace ハンドルでなければなりません
XrEyesANDROID 構造体には、トラッキングされた目に関する情報が含まれています。
typedef struct XrEyesANDROID {
XrStructureType type;
void* next;
XrEyeANDROID eyes[XR_EYE_MAX_ANDROID];
XrEyeTrackingModeANDROID mode;
} XrEyesANDROID;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。このような構造体は、コア OpenXR またはこの拡張機能では定義されていません。eyesは、XrEyeIndexANDROID でインデックス付けされた左右の目の XrEyeANDROID の配列(サイズXR_EYE_MAX_ANDROID)です。modeは、現在トラッキングされている目を表す XrEyeTrackingModeANDROID です。
有効な使用方法(暗黙的)
- XrEyesANDROID を使用する前に、
XR_ANDROID_eye_tracking拡張機能を有効にする必要があります。 -
typeはXR_TYPE_EYES_ANDROIDにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタでなければなりません。 -
eyesのすべての要素は、有効な XrEyeANDROID 構造体でなければなりません。 -
modeは、有効な XrEyeTrackingModeANDROID 値でなければなりません。
XrEyeANDROID 構造体は、目の状態、位置、向きを記述します。
typedef struct XrEyeANDROID {
XrEyeStateANDROID eyeState;
XrPosef eyePose;
} XrEyeANDROID;
メンバーの説明
eyeStateは、目の XrEyeStateANDROID です。eyePoseは、対応する XrEyesGetInfoANDROID ::baseSpaceの基準フレーム内での瞳孔の位置と向きを定義する XrPosef です。ここでのアイデンティティの向きは、+Z がユーザーの目、+X が右、+Y が上を向いた座標軸を表します。
有効な使用方法(暗黙的)
- XrEyeANDROID を使用する前に、
XR_ANDROID_eye_tracking拡張機能を有効にする必要があります。 -
eyeStateは、有効な XrEyeStateANDROID 値でなければなりません
XrEyeStateANDROID 列挙型は、トラッキングされた目のさまざまな状態を識別します。
typedef enum XrEyeStateANDROID {
XR_EYE_STATE_INVALID_ANDROID = 0,
XR_EYE_STATE_GAZING_ANDROID = 1,
XR_EYE_STATE_SHUT_ANDROID = 2,
XR_EYE_STATE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrEyeStateANDROID;
列挙型の意味は次のとおりです。
列挙型の説明
XR_EYE_STATE_INVALID_ANDROID
目がエラー状態であるか、存在しないことを示します。
XR_EYE_STATE_GAZING_ANDROID
目が現在注視していることを示します。
XR_EYE_STATE_SHUT_ANDROID
ウインクまたはまばたきにより、目が現在閉じていることを示します。
XrEyeIndexANDROID 列挙型は、左目または右目のインデックスを識別します。
typedef enum XrEyeIndexANDROID {
XR_EYE_INDEX_LEFT_ANDROID = 0,
XR_EYE_INDEX_RIGHT_ANDROID = 1,
XR_EYE_INDEX_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrEyeIndexANDROID;
列挙型の意味は次のとおりです。
列挙型の説明
XR_EYE_INDEX_LEFT_ANDROID
左目。
XR_EYE_INDEX_RIGHT_ANDROID
右目。
XrEyeTrackingModeANDROID 列挙型は、トラッキングされた目のさまざまな状態を識別します。
typedef enum XrEyeTrackingModeANDROID {
XR_EYE_TRACKING_MODE_NOT_TRACKING_ANDROID = 0,
XR_EYE_TRACKING_MODE_RIGHT_ANDROID = 1,
XR_EYE_TRACKING_MODE_LEFT_ANDROID = 2,
XR_EYE_TRACKING_MODE_BOTH_ANDROID = 3,
XR_EYE_TRACKING_MODE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrEyeTrackingModeANDROID;
列挙型の意味は次のとおりです。
列挙型の説明
XR_EYE_TRACKING_MODE_NOT_TRACKING_ANDROID
アイ トラッキングが現在有効になっていないことを示します。
XR_EYE_TRACKING_MODE_RIGHT_ANDROID
右目のみがトラッキングされていることを示します。
XR_EYE_TRACKING_MODE_LEFT_ANDROID
左目のみがトラッキングされていることを示します。
XR_EYE_TRACKING_MODE_BOTH_ANDROID
左右両方の目をトラッキングしていることを示します。
#define XR_EYE_MAX_ANDROID 2
XR_EYE_MAX_ANDROID は、XrEyeANDROID データが報告される目の最大数です。
アイ トラッキングのサンプルコード
次のサンプルコードは、ビュー空間を基準とした目の情報を取得する方法を示しています。
XrSession session; // previously initialized, e.g. created at app startup.
XrSpace viewSpace; // space created for XR_REFERENCE_SPACE_TYPE_VIEW.
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateEyeTrackerANDROID xrCreateEyeTrackerANDROID; // previously initialized
PFN_xrDestroyEyeTrackerANDROID xrDestroyEyeTrackerANDROID; // previously initialized
PFN_xrGetCoarseTrackingEyesInfoANDROID xrGetCoarseTrackingEyesInfoANDROID; // previously initialized
PFN_xrGetFineTrackingEyesInfoANDROID xrGetFineTrackingEyesInfoANDROID; // previously initialized
// This will use the XrSession that is bound to the eye tracker done at time of creation.
XrEyeTrackerANDROID eyeTracker;
XrEyeTrackerCreateInfoANDROID createInfo{
.type = XR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROID,
.next = nullptr};
CHK_XR(xrCreateEyeTrackerANDROID(session, &createInfo, &eyeTracker));
while (1) {
// ...
// For every frame in frame loop
// ...
XrFrameState frameState; // previously returned from xrWaitFrame
const XrTime time = frameState.predictedDisplayTime;
XrEyesANDROID fineEyesInfo{.type = XR_TYPE_EYES_ANDROID,
.next = nullptr,
.mode = XR_EYE_TRACKING_MODE_BOTH_ANDROID};
XrEyesANDROID coarseEyesInfo{.type = XR_TYPE_EYES_ANDROID,
.next = nullptr,
.mode = XR_EYE_TRACKING_MODE_BOTH_ANDROID};
XrEyesGetInfoANDROID eyesGetInfo{.type = XR_TYPE_EYES_GET_INFO_ANDROID,
.next = nullptr,
.time = time,
.baseSpace = viewSpace};
CHK_XR(xrGetCoarseTrackingEyesInfoANDROID(eyeTracker, &eyesGetInfo, &coarseEyesInfo));
CHK_XR(xrGetFineTrackingEyesInfoANDROID(eyeTracker, &eyesGetInfo, &fineEyesInfo));
// eyes tracking information is now available:
// drawLeftEye(eyesInfo.eyes[XR_EYE_INDEX_LEFT_ANDROID].eyePose);
// drawRightEye(eyesInfo.eyes[XR_EYE_INDEX_RIGHT_ANDROID].eyePose);
// ...
// Finish frame loop
// ...
}
// after usage
CHK_XR(xrDestroyEyeTrackerANDROID(eyeTracker));
新しいオブジェクト タイプ
新しいコマンド
- xrCreateEyeTrackerANDROID
- xrDestroyEyeTrackerANDROID
- xrGetCoarseTrackingEyesInfoANDROID
- xrGetFineTrackingEyesInfoANDROID
新しい構造
- XrEyeANDROID
- XrEyeTrackerCreateInfoANDROID
- XrEyesANDROID
- XrEyesGetInfoANDROID
XrSystemProperties の拡張:
新しい列挙型
新しい列挙型定数
XR_ANDROID_EYE_TRACKING_EXTENSION_NAMEXR_ANDROID_eye_tracking_SPEC_VERSIONXR_EYE_MAX_ANDROIDXrObjectType の拡張:
XR_OBJECT_TYPE_EYE_TRACKER_ANDROID
XrStructureType の拡張:
XR_TYPE_EYES_ANDROIDXR_TYPE_EYES_GET_INFO_ANDROIDXR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROIDXR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROID
問題
変更履歴
リビジョン 1、2025-01-17(Kenny Vercaemer)
- 拡張機能の初期説明