XR_ANDROID_spatial_anchor_space
Name String
XR_ANDROID_spatial_anchor_space
拡張機能の種類
インスタンス拡張
登録済みの内線番号
796
リビジョン
1
承認ステータス
未批准
拡張機能とバージョンの依存関係
XR_EXT_spatial_anchor
最終更新日
2025-09-15
IP ステータス
既知の IP 申し立てはありません。
寄与者
YuSheng Chang、Google
Kyle Chen、Google
Levana Chen、Google
Nihav Jain、Google
Spencer Quin、Google
概要
XR_EXT_spatial_anchor 拡張機能で定義されている xrCreateSpatialAnchorEXT 関数を使用すると、アプリは XrSpatialEntityEXT ハンドルで表される空間アンカーを作成できます。一方、この拡張機能では、代わりに XrSpace ハンドルで表される空間アンカーが作成されます。これは、アプリケーションが次のことを行う場合に役立ちます。
- xrLocateSpaces を使用して、アンカーの位置を取得します。
- アンカーを基準にして他のスペースを特定する。
XR_ANDROID_anchor_sharing_exportを使用してアンカーをエクスポートします。- アプリがアンカーを配置し、アンカーの場所(仮想コンテンツをアタッチする場所)のみを考慮し、アンカーの作成に使用された XrSpatialContextEXT を介して検出された他のエンティティの他のコンポーネントを考慮しない場合、アプリは空間コンテキストを破棄できます。
この拡張機能で作成されたアンカーは、XR_ANDROID_device_anchor_persistence 拡張機能を使用して永続化することはできません。代わりに、アプリケーションは XR_EXT_spatial_persistence_operations を使用する必要があります。XrPersistedAnchorSpaceInfoANDROID :: anchor が xrCreateSpatialAnchorSpaceANDROID または xrCreateSpatialAnchorSpaceFromIdANDROID を使用して作成された場合、ランタイムは xrPersistAnchorANDROID から XR_ERROR_VALIDATION_FAILURE を返さなければなりません。
空間アンカーの XrSpace を作成する
空間アンカーと空間を作成する
xrCreateSpatialAnchorSpaceANDROID 関数は次のように定義されます。
XrResult xrCreateSpatialAnchorSpaceANDROID(
XrSession session,
XrSpatialContextEXT spatialContext,
const XrSpatialAnchorCreateInfoEXT* createInfo,
XrSpatialEntityIdEXT* anchorEntityId,
XrSpace* anchorSpace);
パラメータの説明
sessionは、以前に xrCreateSession で作成された XrSession へのハンドルです。spatialContextは、以前に xrCreateSpatialContextAsyncEXT を使用して作成された XrSpatialContextEXT です。createInfoは XrSpatialAnchorCreateInfoEXT へのポインタです。anchorEntityIdはXrSpatialEntityIdEXTへのポインタです。anchorSpaceは XrSpace へのポインタです。
xrCreateSpatialAnchorSpaceANDROID 関数は、XrSpatialEntityIdEXT と XrSpace ハンドルを出力するアンカーを作成します。xrCreateSpatialAnchorSpaceANDROID の検証要件は、xrCreateSpatialAnchorEXT と同じです。
xrCreateSpatialAnchorSpaceANDROID に渡された XrSpatialContextEXT が XR_SPATIAL_CAPABILITY_ANCHOR_EXT で構成されていない場合、ランタイムは XR_ERROR_VALIDATION_FAILURE を返さなければなりません。
xrCreateSpatialAnchorSpaceANDROID による作成されたアンカーの検出可能性については、xrCreateSpatialAnchorEXT 仕様の最後の段落が適用されます。
有効な使用方法(暗黙的)
- xrCreateSpatialAnchorSpaceANDROID を呼び出す前に、
XR_ANDROID_spatial_anchor_space拡張機能を有効にする必要があります。 -
sessionは、有効な XrSession ハンドルでなければなりません。 -
spatialContextは有効な XrSpatialContextEXT ハンドルでなければなりません -
createInfoは、有効な XrSpatialAnchorCreateInfoEXT 構造体へのポインタでなければなりません -
anchorEntityIdはXrSpatialEntityIdEXT値へのポインタでなければなりません。 -
anchorSpaceは XrSpace ハンドルへのポインタでなければなりません -
spatialContextは、sessionから作成、割り当て、または取得されている必要があります。
戻りコード
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_POSE_INVALIDXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_ANCHOR_ATTACHABLE_COMPONENT_NOT_FOUND_ANDROIDXR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
既存の空間アンカーから XrSpace を作成する
xrCreateSpatialAnchorSpaceFromIdANDROID 関数は次のように定義されます。
XrResult xrCreateSpatialAnchorSpaceFromIdANDROID(
XrSession session,
XrSpatialContextEXT spatialContext,
const XrSpatialAnchorSpaceFromIdCreateInfoANDROID* createInfo,
XrSpace* anchorSpace);
パラメータの説明
sessionは、以前に xrCreateSession で作成された XrSession へのハンドルです。spatialContextは、以前に xrCreateSpatialContextAsyncEXT を使用して作成された XrSpatialContextEXT です。createInfoは、XrSpatialAnchorSpaceFromIdCreateInfoANDROID へのポインタです。anchorSpaceは XrSpace へのポインタです。
空間アンカー エンティティがすでに存在しているシナリオ(永続性など)では、アプリは空間エンティティ ID を指定することで、これらの空間アンカーから XrSpace を作成できます。
xrCreateSpatialAnchorSpaceFromIdANDROID 関数は、XrSpatialAnchorSpaceFromIdCreateInfoANDROID ::entityId フィールドに XrSpatialEntityIdEXT を指定して、XrSpace ハンドルを作成します。
xrCreateSpatialAnchorSpaceFromIdANDROID に渡された XrSpatialContextEXT が XR_SPATIAL_CAPABILITY_ANCHOR_EXT で構成されていない場合、ランタイムは XR_ERROR_VALIDATION_FAILURE を返さなければなりません。
有効な使用方法(暗黙的)
- xrCreateSpatialAnchorSpaceFromIdANDROID を呼び出す前に、
XR_ANDROID_spatial_anchor_space拡張機能を有効にする必要があります。 -
sessionは、有効な XrSession ハンドルでなければなりません。 -
spatialContextは有効な XrSpatialContextEXT ハンドルでなければなりません createInfoは、有効な XrSpatialAnchorSpaceFromIdCreateInfoANDROID 構造体へのポインタでなければなりません。-
anchorSpaceは XrSpace ハンドルへのポインタでなければなりません -
spatialContextは、sessionから作成、割り当て、または取得されている必要があります。
戻りコード
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_ANCHOR_ENTITY_ID_INVALID_ANDROIDXR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
XrSpatialAnchorSpaceFromIdCreateInfoANDROID 構造体は次のように定義されます。
typedef struct XrSpatialAnchorSpaceFromIdCreateInfoANDROID {
XrStructureType type;
const void* next;
XrSpatialEntityIdEXT anchorEntityId;
} XrSpatialAnchorSpaceFromIdCreateInfoANDROID;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。anchorEntityIdは、XrSpace の作成元となる既存の空間アンカーのXrSpatialEntityIdEXTです。
XrSpatialAnchorSpaceFromIdCreateInfoANDROID ::entityId が spatialContext の有効な ID でない場合、ランタイムは XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT を返さなければなりません。
XrSpatialAnchorSpaceFromIdCreateInfoANDROID ::entityId がアンカーの有効なエンティティ ID でない場合、ランタイムは XR_ERROR_SPATIAL_ANCHOR_ENTITY_ID_INVALID_ANDROID を返さなければなりません。
有効な使用方法(暗黙的)
- XrSpatialAnchorSpaceFromIdCreateInfoANDROID を使用する前に、
XR_ANDROID_spatial_anchor_space拡張機能を有効にする必要があります。 -
typeはXR_TYPE_SPATIAL_ANCHOR_SPACE_FROM_ID_CREATE_INFO_ANDROIDにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタでなければなりません。
アンカーのライフサイクル
XrSpace ハンドルの親は XrSession です。つまり、アンカーを表す XrSpace ハンドルは、xrCreateSpatialAnchorSpaceFromIdANDROID :: spatialContext または xrCreateSpatialAnchorSpaceANDROID :: spatialContext が破棄された後も有効なままになります。空間エンティティ アンカーを表す XrSpace を作成すると、アプリケーションは XR_SPATIAL_CAPABILITY_ANCHOR_EXT で構成された XrSpatialContextEXT を破棄しながら、xrLocateSpaces で XrSpace を使用してアンカーの最新のポーズを取得し続けることができます。つまり、ランタイムは、アンカーを表す XrSpace ハンドルがすべて破棄されるまで、アンカーを追跡し続ける必要があります。
コード例
空間アンカーを XrSpace として作成する
次のサンプルコードは、空間アンカーを作成して XrSpace として返す方法を示しています。
XrSpatialEntityIdEXT spatialAnchorEntityId;
XrSpace spatialAnchorSpace {XR_NULL_HANDLE}; // XrSpace handle of anchor
// Spatial anchor create info
XrSpatialAnchorCreateInfoEXT createInfo{
.type = XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_EXT,
.baseSpace = localSpace,
.time = predictedDisplayTime,
.pose = {{0, 0, 0, 1}, {1, 1, 1}},
};
// Create spatial anchor using the new API
CHK_XR(xrCreateSpatialAnchorSpaceANDROID(session, spatialContext, &createInfo, &spatialAnchorEntityId, &spatialAnchorSpace));
// ...
アンカー エンティティ ID から XrSpace を作成する
次のサンプルコードは、既存のアンカー エンティティ ID から XrSpace を作成する方法を示しています。
XrSpace anchorSpace = XR_NULL_HANDLE;
// Spatial anchor from XrSpace create info
XrSpatialAnchorSpaceFromIdCreateInfoANDROID createInfoFromId{
.type = XR_TYPE_SPATIAL_ANCHOR_SPACE_FROM_ID_CREATE_INFO_ANDROID,
.anchorEntityId = spatialAnchorEntityId,
};
// Create XrSpace handle from spatial anchor ID
CHK_XR(xrCreateSpatialAnchorSpaceFromIdANDROID(session, spatialContext, &createInfoFromId, &anchorSpace));
// ...
新しいコマンド
新しい構造
新しい列挙型定数
XR_ANDROID_SPATIAL_ANCHOR_SPACE_EXTENSION_NAMEXR_ANDROID_spatial_anchor_space_SPEC_VERSIONXrResult の拡張:
XR_ERROR_SPATIAL_ANCHOR_ENTITY_ID_INVALID_ANDROID
XrStructureType の拡張:
XR_TYPE_SPATIAL_ANCHOR_SPACE_FROM_ID_CREATE_INFO_ANDROID
問題
変更履歴
リビジョン 1、2025-09-15(YuSheng Chang、Kyle Chen)
- 拡張機能の初期説明。