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 を使用する必要があります。
システムの機能を確認する
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 を受け取ります。
有効な使用方法(暗黙的)
XrSystemEyeTrackingPropertiesANDROIDを使用する前に、XR_ANDROID_eye_tracking拡張機能を有効にする必要があります。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 が返されます。
有効な使用方法(暗黙的)
xrCreateEyeTrackerANDROIDを呼び出す前に、XR_ANDROID_eye_tracking拡張機能を有効にする必要があります。sessionは有効なXrSessionハンドルである必要があります。createInfoは有効なXrEyeTrackerCreateInfoANDROID構造体へのポインタである必要があります。eyeTrackerはXrEyeTrackerANDROIDハンドルへのポインタである必要があります。
戻りコード
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_FEATURE_UNSUPPORTED
XrEyeTrackerCreateInfoANDROID 構造体は次のように定義されます。
typedef struct XrEyeTrackerCreateInfoANDROID {
XrStructureType type;
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 と基盤となるリソースを解放します。
有効な使用方法(暗黙的)
xrDestroyEyeTrackerANDROIDを呼び出す前に、XR_ANDROID_eye_tracking拡張機能を有効にする必要があります。eyeTrackerは有効なXrEyeTrackerANDROIDハンドルである必要があります。
スレッドセーフ
eyeTrackerと子ハンドルへのアクセスは、外部で同期する必要があります。
戻りコード
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
目の情報を取得する
xrGetCoarseTrackingEyesInfoANDROID 関数は次のように定義されます。
XrResult xrGetCoarseTrackingEyesInfoANDROID(
XrEyeTrackerANDROID eyeTracker,
const XrEyesGetInfoANDROID* getInfo,
XrEyesANDROID* eyesOutput);
パラメータの説明
eyeTrackerは、xrCreateEyeTrackerANDROIDによって以前に作成されたXrEyeTrackerANDROIDです。getInfoは、必要な出力を指定するために使用されるXrEyesGetInfoANDROIDへのポインタです。infoOutputは、ポーズや状態など、返された目の情報を含むXrEyesANDROIDへのポインタです。
xrGetCoarseTrackingEyesInfoANDROID 関数は、ユーザーのプライバシーを保護する方法で、目の状態とポーズに関する情報を取得します。
アプリに android.permission.EYE_TRACKING_COARSE 権限がない場合は、ランタイムが XR_ERROR_PERMISSION_INSUFFICIENT を返す必要があります。
目の情報は解決され、XrEyesGetInfoANDROID::time、XrEyesGetInfoANDROID::baseSpace を使用して xrGetCoarseTrackingEyesInfoANDROID を呼び出す時点でのベース空間を基準とします。
任意の時点で、目のポーズの位置と方向の両方がトラッキングまたはトラッキング解除されます。つまり、アプリは、指定された XrEyesANDROID::eyes で XR_SPACE_LOCATION_POSITION_TRACKED_BIT と XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT の両方が設定または消去され、XrEyesANDROID::mode がトラッキング状態を示すことを確認できます。
有効な使用方法(暗黙的)
xrGetCoarseTrackingEyesInfoANDROIDを呼び出す前に、XR_ANDROID_eye_tracking拡張機能を有効にする必要があります。eyeTrackerは有効なXrEyeTrackerANDROIDハンドルである必要があります。getInfoは有効なXrEyesGetInfoANDROID構造体へのポインタである必要があります。eyesOutputはXrEyesANDROID構造体へのポインタである必要があります
戻りコード
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_TIME_INVALIDXR_ERROR_PERMISSION_INSUFFICIENT
xrGetFineTrackingEyesInfoANDROID 関数は次のように定義されます。
{:#xrGetFineTrackingEyesInfoANDROID}
C++
XrResult xrGetFineTrackingEyesInfoANDROID(
XrEyeTrackerANDROID eyeTracker,
const XrEyesGetInfoANDROID* getInfo,
XrEyesANDROID* eyesOutput);
パラメータの説明
eyeTrackerは、xrCreateEyeTrackerANDROIDによって以前に作成されたXrEyeTrackerANDROIDです。getInfoは、必要な出力を指定するために使用されるXrEyesGetInfoANDROIDへのポインタです。infoOutputは、ポーズや状態など、返された目の情報を含むXrEyesANDROIDへのポインタです。xrGetFineTrackingEyesInfoANDROID関数は、xrGetCoarseTrackingEyesInfoANDROIDよりも高い精度で目の状態とポーズに関する情報を取得します。
アプリに android.permission.EYE_TRACKING_FINE 権限がない場合は、ランタイムが XR_ERROR_PERMISSION_INSUFFICIENT を返す必要があります。
目の情報は解決され、XrEyesGetInfoANDROID::time、XrEyesGetInfoANDROID::baseSpace を使用して xrGetFineTrackingEyesInfoANDROID を呼び出す時点でのベース空間を基準とします。
任意の時点で、目のポーズの位置と方向の両方がトラッキングまたはトラッキング解除されます。つまり、アプリは、指定された XrEyesANDROID::eyes で 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_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_TIME_INVALIDXR_ERROR_PERMISSION_INSUFFICIENT
XrEyesGetInfoANDROID 構造体には、目のポーズと状態を取得するために必要な情報が含まれています。
typedef struct XrEyesGetInfoANDROID {
XrStructureType type;
void* next;
XrTime time;
XrSpace baseSpace;
} XrEyesGetInfoANDROID;
メンバーの説明
typeは、この構造のXrStructureTypeです。nextはNULLまたは構造体チェーンの次の構造体へのポインタです。コア OpenXR またはこの拡張機能では、そのような構造は定義されていません。timeは、baseSpaceを基準として座標を評価するXrTimeです。baseSpace目のポーズは、timeのこの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の配列です。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です。poseは、対応するXrEyesGetInfoANDROID::baseSpaceの基準フレーム内の目の原点の位置と向きを定義するXrPosefです。ここでの ID の向きは、+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
} XrEyeStateANDROID;
列挙型の意味は次のとおりです。
列挙型 |
説明 |
|
目がエラー状態であるか、存在しないことを示します。 |
|
目を凝らしていることを示します。 |
|
ウィンクや瞬きによって目が閉じていることを示します。 |
XrEyeIndexANDROID 列挙型は、左目または右目のインデックスを識別します。
typedef enum XrEyeIndexANDROID {
XR_EYE_INDEX_LEFT_ANDROID = 0,
XR_EYE_INDEX_RIGHT_ANDROID = 1
} XrEyeIndexANDROID;
列挙型の意味は次のとおりです。
列挙型 |
説明 |
|
左目。 |
|
右目。 |
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
} XrEyeTrackingModeANDROID;
列挙型の意味は次のとおりです。
列挙型 |
説明 |
|
アイトラッキングが有効になっていないことを示します。 |
|
右目のみがトラッキングされていることを示します。 |
|
左目のみがトラッキングされていることを示します。 |
|
左目と右目の両方がトラッキングされていることを示します。 |
アイトラッキングのサンプルコード
次のサンプルコードは、ビュー空間を基準とした目の情報を取得する方法を示しています。
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));
新しいオブジェクト タイプ
新しい列挙型定数
XR_EYE_MAX_ANDROID
XrObjectType 列挙型が拡張され、次が追加されました。
XR_OBJECT_TYPE_EYE_TRACKER_ANDROID
XrStructureType 列挙型が拡張され、次が追加されました。
XR_TYPE_EYES_ANDROIDXR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROIDXR_TYPE_EYES_GET_INFO_ANDROIDXR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROID
新しい列挙型
新しい構造
XrEyeANDROIDXrEyesANDROIDXrEyesGetInfoANDROIDXrEyeTrackerCreateInfoANDROIDXrSystemEyeTrackingPropertiesANDROID
新機能
xrCreateEyeTrackerANDROIDxrDestroyEyeTrackerANDROIDxrGetCoarseTrackingEyesInfoANDROIDxrGetFineTrackingEyesInfoANDROID
問題
変更履歴
- リビジョン 1、2025 年 1 月 17 日(Kenny Vercaemer)
- 最初の拡張機能の説明
OpenXR™ と OpenXR のロゴは、Khronos Group Inc. が所有する商標であり、中国、欧州連合、日本、英国で商標として登録されています。