名前の文字列
XR_ANDROID_raycast
拡張機能の種類
インスタンスの拡張
登録されている電話番号
464
リビジョン
1
拡張機能とバージョンの依存関係
最終更新日
2024-10-02
IP ステータス
既知の IP に関する申し立てはありません。
寄与者
Spencer Quin、Google
Nihav Jain、Google
John Pursey、Google
Jared Finder、Google
Levana Chen、Google
Kenny Vercaemer、Google
概要
この拡張機能により、アプリケーションは環境内のトラッケーブルに対してレイキャストを実行できます。レイキャストは、レイが交差する環境内のオブジェクトを検出する場合に便利です。例:
- 浮遊オブジェクトが落下したときにどこに落ちるかを判断するには、垂直なレイキャストを使用します。
- 前方向きのレイキャストを使用して、ユーザーがどこを見ているかを判断します。
サポートされているレイキャスト機能をクエリする
xrEnumerateRaycastSupportedTrackableTypesANDROID 関数は次のように定義されます。
XrResult xrEnumerateRaycastSupportedTrackableTypesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t trackableTypeCapacityInput,
uint32_t* trackableTypeCountOutput,
XrTrackableTypeANDROID* trackableTypes);
パラメータの説明
instance
は、systemId
が取得された XrInstance です。systemId
は、レイキャスティングでサポートされているトラッキング可能なタイプが列挙されているXrSystemId
です。trackableTypeCapacityInput
はtrackableTypes
の容量です。必要な容量を取得するには 0 にします。trackableTypeCountOutput
は、配列のカウントへのポインタ、またはtrackableTypeCapacityInput
が不十分な場合に必要な容量へのポインタです。trackableTypes
は XrTrackableTypeANDROID の配列へのポインタですが、trackableTypeCapacityInput
が0
の場合はNULL
にすることができます。
- 必要な
trackableTypes
サイズの取得の詳細については、バッファサイズ パラメータのセクションをご覧ください。
xrEnumerateRaycastSupportedTrackableTypesANDROID は、現在のセッションによるレイキャスティングをサポートするトラッキング可能なタイプを列挙します。
有効な使用方法(暗黙的)
- xrEnumerateRaycastSupportedTrackableTypesANDROID を呼び出す前に、
XR_ANDROID_raycast
拡張機能を有効にする必要があります。 instance
は有効な XrInstance ハンドルである必要があります。trackableTypeCountOutput
はuint32_t
値へのポインタである必要があります。trackableTypeCapacityInput
が0
でない場合、trackableTypes
はtrackableTypeCapacityInput
XrTrackableTypeANDROID 値の配列へのポインタである必要があります。
戻りコード
XR_SUCCESS
XR_ERROR_VALIDATION_FAILURE
XR_ERROR_RUNTIME_FAILURE
XR_ERROR_HANDLE_INVALID
XR_ERROR_INSTANCE_LOST
XR_ERROR_SIZE_INSUFFICIENT
XR_ERROR_SYSTEM_INVALID
XR_ERROR_FUNCTION_UNSUPPORTED
レイキャストを実行する
xrRaycastANDROID 関数は次のように定義されます。
XrResult xrRaycastANDROID(
XrSession session,
const XrRaycastInfoANDROID* rayInfo,
XrRaycastHitResultsANDROID* results);
パラメータの説明
session
は、レイキャストを実行する XrSession です。rayInfo
は、キャストするレイを記述する XrRaycastInfoANDROID です。results
は、レイキャストの結果を受け取る XrRaycastHitResultsANDROID へのポインタです。
アプリは xrRaycastANDROID を呼び出してレイキャストを実行できます。
- レイキャストが XrRaycastHitResultsANDROID::maxResults より多くのトラッケーブルと交差する場合、ランタイムは、レイの XrRaycastHitResultsANDROID::origin に最も近いヒット結果を返す必要があります。
- レイキャストが、別のプレーンに包含されている
XR_TRACKABLE_TYPE_ANDROID_PLANE
タイプのトラッキング可能オブジェクトと交差する場合、ランタイムは、包含するプレーンのヒット結果のみを返す必要があります。 - ランタイムは、XrRaycastInfoANDROID::trajectory ベクトル沿って XrRaycastInfoANDROID::origin から最も遠い順にヒット結果を返す必要があります。
- XrRaycastInfoANDROID::trackers の XrTrackableTrackerANDROID ハンドルに対応するトラッキング可能なタイプが xrEnumerateRaycastSupportedTrackableTypesANDROID によって列挙されていない場合、ランタイムは
XR_ERROR_TRACKABLE_TYPE_NOT_SUPPORTED_ANDROID
を返す必要があります。
有効な使用方法(暗黙的)
- xrRaycastANDROID を呼び出す前に、
XR_ANDROID_raycast
拡張機能を有効にする必要があります。 session
は有効な XrSession ハンドルである必要があります。rayInfo
は、有効な XrRaycastInfoANDROID 構造体へのポインタである必要があります。results
は XrRaycastHitResultsANDROID 構造体へのポインタである必要があります。
戻りコード
XR_SUCCESS
XR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_TRACKABLE_TYPE_NOT_SUPPORTED_ANDROID
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_POSE_INVALID
XR_ERROR_TIME_INVALID
XR_ERROR_FEATURE_UNSUPPORTED
XrRaycastInfoANDROID 構造体は次のように定義されます。
typedef struct XrRaycastInfoANDROID {
XrStructureType type;
void* next;
uint32_t maxResults;
uint32_t trackerCount;
const XrTrackableTrackerANDROID* trackers;
XrVector3f origin;
XrVector3f trajectory;
XrSpace space;
XrTime time;
} XrRaycastInfoANDROID;
メンバーの説明
type
は、この構造の XrStructureType です。next
はNULL
または構造体チェーンの次の構造体へのポインタです。コア OpenXR またはこの拡張機能では、そのような構造は定義されていません。maxResults
は、返される結果の最大数です。uint32_t
trackerCount
は、trackers
配列のuint32_t
数です。trackers
は、キャストされたレイをテストする必要がある XrTrackableTrackerANDROID の配列です。origin
は、レイがキャストされる XrVector3f です。trajectory
は、レイがターゲットとする XrVector3f です。space
は、レイがキャストされる XrSpace です。time
は、レイがキャストされるXrTime
です。
XrRaycastInfoANDROID 構造体には、キャストするレイが記述されます。
- XrRaycastInfoANDROID::trackers 配列には、異なるタイプのトラッカーが含まれる可能性があります。
- XrRaycastInfoANDROID::trackers 配列には、同じタイプのトラッカーを複数含めないでください。含めると、ランタイムは
XR_ERROR_VALIDATION_FAILURE
を返します。
有効な使用方法(暗黙的)
- XrRaycastInfoANDROID を使用する前に、
XR_ANDROID_raycast
拡張機能を有効にする必要があります。 type
はXR_TYPE_RAYCAST_INFO_ANDROID
にする必要がありますnext
はNULL
であるか、構造体チェーンの次の構造体への有効なポインタである必要があります。trackers
は、trackerCount
有効な XrTrackableTrackerANDROID ハンドルの配列へのポインタである必要があります。space
は有効な XrSpace ハンドルである必要があります。trackerCount
パラメータは0
より大きい値にする必要があります。space
とtrackers
の要素の両方が、同じ XrSession から作成、割り当て、または取得されている必要があります。
XrRaycastHitResultsANDROID 構造体は次のように定義されます。
typedef struct XrRaycastHitResultsANDROID {
XrStructureType type;
void* next;
uint32_t resultsCapacityInput;
uint32_t resultsCountOutput;
XrRaycastHitResultANDROID* results;
} XrRaycastHitResultsANDROID;
メンバーの説明
type
は、この構造の XrStructureType です。next
はNULL
または構造体チェーンの次の構造体へのポインタです。コア OpenXR またはこの拡張機能では、そのような構造は定義されていません。resultsCapacityInput
はresults
配列の容量です。必要な容量を取得するリクエストを示すには 0 にします。resultsCountOutput
は、書き込まれたresults
の数へのポインタ、またはresultsCapacityInput
が不十分な場合に必要な容量へのポインタです。results
は、XrRaycastHitResultANDROID 構造の配列へのポインタです。resultsCapacityInput
が 0 の場合、NULL
にできます。- 必要な
results
サイズの取得の詳細については、バッファサイズ パラメータのセクションをご覧ください。
XrRaycastHitResultsANDROID には、レイキャストのヒットの配列が含まれます。
ランタイムは、resultsCountOutput
を XrRaycastInfoANDROID::maxResults 以下に設定する必要があります。
有効な使用方法(暗黙的)
- XrRaycastHitResultsANDROID を使用する前に、
XR_ANDROID_raycast
拡張機能を有効にする必要があります。 type
はXR_TYPE_RAYCAST_HIT_RESULTS_ANDROID
にする必要がありますnext
はNULL
であるか、構造体チェーンの次の構造体への有効なポインタである必要があります。results
は、XrRaycastHitResultANDROID ベースのresultsCapacityInput
構造の配列へのポインタである必要があります。resultsCapacityInput
パラメータは0
より大きい値にする必要があります。
XrRaycastHitResultANDROID 構造体は次のように定義されます。
typedef struct XrRaycastHitResultANDROID {
XrTrackableTypeANDROID type;
XrTrackableANDROID trackable;
XrPosef pose;
} XrRaycastHitResultANDROID;
メンバーの説明
type
は、レイキャストがヒットしたトラッケーブルの XrTrackableTypeANDROID です。trackable
は、レイキャストがヒットしたXrTrackableANDROID
です。トラッキング可能なtype
がXR_TRACKABLE_TYPE_DEPTH_ANDROID
の場合はXR_NULL_TRACKABLE_ANDROID
です。pose
は、レイキャストがヒットした XrPosef です。
XrRaycastHitResultANDROID には、レイキャスト ヒットの詳細が含まれます。
平面ヒットの XrRaycastHitResultANDROID::pose は、X 軸と Z 軸が平面に平行で、Y 軸が平面に垂直になるようにする必要があります。
トラッキング可能なヒットのタイプ |
説明 |
|
水平面または垂直面をヒットして、ポイントの正確な深さと向きを決定します。 |
|
シーン全体の深度情報を使用して、ポイントの正しい深度と向きを決定します。 |
有効な使用方法(暗黙的)
- XrRaycastHitResultANDROID を使用する前に、
XR_ANDROID_raycast
拡張機能を有効にする必要があります。 type
は有効な XrTrackableTypeANDROID 値である必要があります。
レイキャスティングのサンプルコード
次のサンプルコードは、レイキャストを実行する方法を示しています。
XrSession session; // previously initialized
XrTime updateTime; // previously initialized
XrSpace appSpace; // space created for XR_REFERENCE_SPACE_TYPE_LOCAL.
XrPosef headPose; // latest pose of the HMD.
XrTrackableTrackerANDROID planeTracker; // tracker for plane trackables.
XrTrackableTrackerANDROID depthTracker; // tracker for depth trackables.
// Perform a raycast against multiple trackers.
XrTrackableTrackerANDROID trackers[] = {
&planeTracker,
&depthTracker,
};
XrRaycastInfoANDROID rayInfo = {XR_TYPE_RAYCAST_INFO_ANDROID};
rayInfo.trackerCount = sizeof(trackers) / sizeof(XrTrackableTrackerANDROID);
rayInfo.trackers = trackers;
rayInfo.origin = headPose.position;
rayInfo.trajectory = CalculateForwardDirectionFromHeadPose(headPose);
rayInfo.space = appSpace;
rayInfo.time = updateTime;
uint32_t totalHitResults = 0;
constexpr uint32 NUM_DESIRED_RESULTS = 2;
XrRaycastHitResultANDROID hitResult[NUM_DESIRED_RESULTS];
XrRaycastHitResultsANDROID hitResults = {XR_TYPE_RAYCAST_HIT_RESULTS_ANDROID};
hitResults.maxResults = NUM_DESIRED_RESULTS;
hitResults.resultsCapacityInput = NUM_DESIRED_RESULTS;
hitResults.results = hitResult;
XrResult result = xrRaycastANDROID(session, &rayInfo, &hitResults);
if (result == XR_SUCCESS && hitResults.resultsCountOutput >= 1) {
// Hit results are returned in closest-to-farthest order in
// hitResults.results[0] .. hitResults.results[hitResults.resultsCountOutput - 1]
}
新しい列挙型定数
XrStructureType 列挙型が拡張され、次のように変更されました。
XR_TYPE_RAYCAST_INFO_ANDROID
XR_TYPE_RAYCAST_HIT_RESULTS_ANDROID
新しい構造
新機能
問題
変更履歴
- リビジョン 1、2024-10-02(Kenny Vercaemer)
- 最初の拡張機能の説明