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_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_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_UNSUPPORTED
XR_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_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
XR_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_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
XR_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_ANDROID
XR_TYPE_EYE_TRACKER_CREATE_INFO_ANDROID
XR_TYPE_EYES_GET_INFO_ANDROID
XR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_ANDROID
新しい列挙型
新しい構造
XrEyeANDROID
XrEyesANDROID
XrEyesGetInfoANDROID
XrEyeTrackerCreateInfoANDROID
XrSystemEyeTrackingPropertiesANDROID
新機能
xrCreateEyeTrackerANDROID
xrDestroyEyeTrackerANDROID
xrGetCoarseTrackingEyesInfoANDROID
xrGetFineTrackingEyesInfoANDROID
問題
変更履歴
- リビジョン 1、2025 年 1 月 17 日(Kenny Vercaemer)
- 最初の拡張機能の説明