XR_EXT_spatial_entity
Name String
XR_EXT_spatial_entity
拡張機能の種類
インスタンス拡張
登録済みの内線番号
741
リビジョン
1
承認ステータス
批准
拡張機能とバージョンの依存関係
XR_EXT_future
寄与者
Nihav Jain、Google
Jared Finder、Google
Natalie Fleury、Meta
Yuichi Taguchi、Meta
Ron Bessems、Meta
Yin Li、Microsoft
Karthik Kadappan、Magic Leap
Jimmy Alamparambil、ByteDance
Zhipeng Liu、ByteDance
Jun Yan、ByteDance
概要
この拡張機能では、OpenXR でのシーン理解と空間推論のコンセプトと基盤が導入されています。これにより、関連するものの異なるいくつかの機能領域が統合されます。これらの機能領域は、この拡張機能で定義されているように、広く統一された方法で列挙、構成、操作されます。この拡張機能には、これらの機能領域のいずれかの具体的な定義がないため、正式な仕様テキストはやや抽象的なものになる傾向があります。この拡張仕様のテキストに含まれる例は、説明を目的として、今後予定されている、または仮定の関連拡張機能で定義されている機能を参照している場合があります。このような追加機能を本質的に制限または指定するものではありません。
この拡張機能の主な構成要素は次のとおりです。
- 空間エンティティ : 機能はエンティティを中心に構成されています。エンティティ自体が提供する機能はごくわずかです。
- 空間コンポーネント : これらのエンティティには、データと動作を提供するコンポーネントが関連付けられています。
- 空間コンポーネント タイプ : 各空間コンポーネントは特定のコンポーネント タイプであり、任意のエンティティは、任意のコンポーネント タイプの単一のコンポーネントを最大で 1 つ持ちます。
- 空間コンテキスト : すべての空間エンティティのインタラクションは、初期化と構成フェーズの後にコンテキストで行われます。
- 空間機能 : 空間エンティティの操作は、機能によって広く提供されます。機能とは、アプリ定義のアンカー、平面検出、画像トラッキングなど(これらに限定されない)の機能単位です。各機能は通常、個別の拡張機能(通常どおりインスタンス作成時に有効化)で定義され、作成時に特定のコンテキストに対して有効化されます。
- 各機能は、一連のコンポーネント タイプに関連付けられています。これらのコンポーネント タイプには、その機能によって公開されるすべてのエンティティにコンポーネントが存在します。機能を定義する拡張機能は、その機能に必須のコンポーネント タイプ(「保証」)を指定します。一方、同じ拡張機能または他の拡張機能は、一部の潜在的な実装によって提供されるオプションのコンポーネント タイプを指定できます。任意の数の機能が、特定のコンポーネント タイプのコンポーネントをエンティティに提供できます。これらのコンポーネントは、それを生成した機能に関係なく、一律に使用できます。
- 空間機能の特性 : さらに、一部の機能は構成が必要なため、機能の特性によってパラメータ化されます。
この拡張機能は、現在のシステムでサポートされている各機能によって提供されるコンポーネント(必須コンポーネントとオプションのコンポーネントの両方)を列挙するメカニズムを提供します。
実装によっては、機能に対して異なる程度のパラメータ化が必要になる場合があるため、この拡張機能は、現在のシステムで特定の機能に関連付けられている、サポートされている機能の特性を列挙するメカニズムを提供します。
この拡張機能では、幅広い機能で使用されることが想定される、いくつかの一般的なコンポーネントも定義されています。
空間エンティティ
空間エンティティは、ある空間に存在するエンティティであり、コンポーネントに整理されたさまざまな関連データを持っています。次のいずれかである可能性があります。
- 物理的(壁や床などの平面、椅子や本棚などの物体など)
- 仮想(別のアプリケーションまたはユーザーによって配置、共有されたコンテンツなど)
- アプリ定義(例: アプリがエリアを「リビングルーム」や「キッチン」としてマークする、またはポイントをテレビを置く場所としてマークするなど)
コントローラや視線など、アクション システムを介して公開されるものは、空間エンティティとしてモデル化されることを意図していません。
OpenXR の空間エンティティは、エンティティ コンポーネント システムとしてモデル化されます。各空間エンティティには一連のコンポーネントがあり、各コンポーネントは、そのエンティティに固有の一連のデータと動作を提供します。
空間エンティティは、XrSpatialEntityIdEXT アトムまたは XrSpatialEntityEXT ハンドルのいずれかで表されます。詳細については、空間エンティティの表現のセクションをご覧ください。
空間コンポーネント タイプ
空間エンティティには、そのエンティティのデータや動作を提供する 1 つ以上のコンポーネントがあります。この拡張機能で定義されている一般的なコンポーネントについては、一般的なコンポーネントをご覧ください。
typedef enum XrSpatialComponentTypeEXT {
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT = 1,
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT = 2,
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT = 3,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT = 4,
XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT = 1000741000,
XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT = 1000741001,
XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT = 1000741002,
XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT = 1000741003,
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT = 1000743000,
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT = 1000744000,
XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT = 1000744001,
XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT = 1000744002,
XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT = 1000762000,
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT = 1000763000,
XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT = 1000782000,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT = 1000783000,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT = 1000783001,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT = 1000783002,
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID = 1000785000,
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID = 1000786000,
XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID = 1000791000,
XR_SPATIAL_COMPONENT_TYPE_ROOM_ANDROIDSYS = 1000792002,
XR_SPATIAL_COMPONENT_TYPE_MATERIAL_TYPE_ANDROIDSYS = 1000792003,
XR_SPATIAL_COMPONENT_TYPE_CONFIDENCE_ANDROIDSYS = 1000792004,
XR_SPATIAL_COMPONENT_TYPE_ROOM_EMPTINESS_ANDROIDSYS = 1000792005,
XR_SPATIAL_COMPONENT_TYPE_OCCUPANCY_GRID_ANDROIDX1 = 1000793000,
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID = 1000794000,
XR_SPATIAL_COMPONENT_TYPE_STREETSCAPE_GEOMETRY_METADATA_ANDROIDX2 = 1000798000,
XR_SPATIAL_COMPONENT_TYPE_GEOMETRY_POINT_ANDROID = 1000803000,
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_SCOPES_ANDROIDX1 = 1000808000,
XR_SPATIAL_COMPONENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialComponentTypeEXT;
XrSpatialComponentTypeEXT 列挙型は、ランタイムがサポートする可能性のあるさまざまなタイプのコンポーネントを識別します。
記載されているすべてのコンポーネント タイプがこの拡張機能だけで提供されるわけではありません。一部のコンポーネント タイプでは、ドキュメントに記載されているように、インスタンスの作成時に追加の拡張機能を有効にする必要があります。
列挙子には次の値があります。
列挙型の説明
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT
空間エンティティの 2D 境界を提供するコンポーネント。対応するリスト構造は XrSpatialComponentBounded2DListEXT、対応するデータ構造は XrSpatialBounded2DDataEXT です。
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT
空間エンティティの 3D 境界を提供するコンポーネント。対応するリスト構造は XrSpatialComponentBounded3DListEXT、対応するデータ構造は XrBoxf です。
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT
空間エンティティの親の XrSpatialEntityIdEXT を提供するコンポーネント。対応するリスト構造は XrSpatialComponentParentListEXT、対応するデータ構造は XrSpatialEntityIdEXT です。
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT
空間エンティティに 3D メッシュを提供するコンポーネント。対応するリスト構造は XrSpatialComponentMesh3DListEXT、対応するデータ構造は XrSpatialMeshDataEXT です。
XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT
空間エンティティの平面アライメント列挙型を提供するコンポーネント。対応するリスト構造は XrSpatialComponentPlaneAlignmentListEXT、対応するデータ構造は XrSpatialPlaneAlignmentEXT(XR_EXT_spatial_plane_tracking 拡張機能によって追加)
XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT
空間エンティティに 2D メッシュを提供するコンポーネント。対応するリスト構造は XrSpatialComponentMesh2DListEXT、対応するデータ構造は XrSpatialMeshDataEXT(XR_EXT_spatial_plane_tracking 拡張機能によって追加)
XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT
空間エンティティの 2D 境界ポリゴンを提供するコンポーネント。対応するリスト構造は XrSpatialComponentPolygon2DListEXT、対応するデータ構造は XrSpatialPolygon2DDataEXT(XR_EXT_spatial_plane_tracking 拡張機能によって追加)
XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT
平面にセマンティック ラベルを提供するコンポーネント。対応するリスト構造は XrSpatialComponentPlaneSemanticLabelListEXT、対応するデータ構造は XrSpatialPlaneSemanticLabelEXT(XR_EXT_spatial_plane_tracking 拡張機能によって追加)
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT
マーカーのタイプ、ID、場所を記述するコンポーネント。対応するリスト構造は XrSpatialComponentMarkerListEXT、対応するデータ構造は XrSpatialMarkerDataEXT(XR_EXT_spatial_marker_tracking 拡張機能によって追加)
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT
シーンのセマンティック ラベルを提供するコンポーネント。対応するリスト構造は XrSpatialComponentObjectSemanticLabelListEXT です。対応するデータ構造は XrSpatialObjectSemanticLabelEXT です。(XR_EXT_spatial_object_tracking 拡張機能によって追加)
XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT
キーボードのセマンティック ラベルを提供するコンポーネント。対応するリスト構造は XrSpatialComponentKeyboardSemanticLabelListEXT です。対応するデータ構造は XrSpatialKeyboardSemanticLabelEXT(XR_EXT_spatial_object_tracking 拡張機能によって追加)です。
XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT
マウスのセマンティック ラベルを提供するコンポーネント。対応するリスト構造は XrSpatialComponentMouseSemanticLabelListEXT です。対応するデータ構造は XrSpatialMouseSemanticLabelEXT(XR_EXT_spatial_object_tracking 拡張機能によって追加)です。
XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT
アンカーの位置を提供するコンポーネント。対応するリスト構造は XrSpatialComponentAnchorListEXT、対応するデータ構造は XrPosef(XR_EXT_spatial_anchor 拡張機能によって追加)
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT
空間エンティティの永続化された UUID を提供するコンポーネント。対応するリスト構造は XrSpatialComponentPersistenceListEXT、対応するデータ構造は XrSpatialPersistenceDataEXT(XR_EXT_spatial_persistence 拡張機能によって追加)
XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT
平面画像タイプを記述するコンポーネント。対応するリスト構造は XrSpatialComponentImage2DListEXT、対応するデータ構造は XrSpatialImageSizeEXT です。(XR_EXT_spatial_image_tracking 拡張機能によって追加)
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT
空間エンティティの 3D メッシュの法線を提供するコンポーネント。対応するリスト構造は XrSpatialComponentMesh3DNormalsListEXT、対応するデータ構造は XrSpatialBufferEXT(XR_EXT_spatial_mesh_tracking 拡張機能によって追加)
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT
空間エンティティの 3D メッシュに頂点ごとのセマンティック ラベルを提供するコンポーネント。対応するリスト構造は XrSpatialComponentMesh3DVertexSemanticLabelsListEXT、対応するデータ構造は XrSpatialBufferEXT、バッファ内のデータは XrSpatialMeshSemanticLabelEXT にマッピングされます(XR_EXT_spatial_mesh_tracking 拡張機能によって追加)。
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT
空間エンティティの 3D メッシュに三角形の面ごとのセマンティック ラベルを提供するコンポーネント。対応するリスト構造は XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT、対応するデータ構造は XrSpatialBufferEXT、バッファ内のデータは XrSpatialMeshSemanticLabelEXT にマッピングされます(XR_EXT_spatial_mesh_tracking 拡張機能によって追加)。
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID
オブジェクトのセマンティック ラベルを提供するコンポーネント。対応するリスト構造は XrSpatialComponentObjectSemanticLabelListANDROID、対応するデータ構造は XrSpatialObjectSemanticLabelANDROID(XR_ANDROID_spatial_object_tracking 拡張機能によって追加)
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID
エンティティに対するレイキャスト ヒットのポーズを提供するコンポーネント。対応するリスト構造は XrSpatialComponentRaycastResultListANDROID、対応するデータ構造は XrSpatialRaycastResultDataANDROID(XR_ANDROID_spatial_discovery_raycast 拡張機能によって追加)
XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID
アタッチされたエンティティを包含するエンティティのエンティティ ID を提供するコンポーネント。対応するリスト構造は XrSpatialComponentSubsumedByListANDROID、対応するデータ構造は XrSpatialEntityIdEXT(XR_ANDROID_spatial_component_subsumed_by 拡張機能によって追加)
XR_SPATIAL_COMPONENT_TYPE_ROOM_ANDROIDSYS
靴箱の寸法と部屋タイプを提供するコンポーネント。対応するリスト構造は XrSpatialComponentRoomListANDROIDSYS、対応するデータ構造は XrSpatialRoomDataANDROIDSYS(XR_ANDROIDSYS_spatial_room_tracking 拡張機能によって追加)
XR_SPATIAL_COMPONENT_TYPE_MATERIAL_TYPE_ANDROIDSYS
境界サーフェスのマテリアル タイプを提供するコンポーネント。対応するリスト構造は XrSpatialComponentMaterialTypeListANDROIDSYS、対応するデータ構造は XrSpatialMaterialTypeANDROIDSYS(XR_ANDROIDSYS_spatial_room_tracking 拡張機能によって追加)
XR_SPATIAL_COMPONENT_TYPE_CONFIDENCE_ANDROIDSYS
追跡可能なコンポーネントの信頼度を提供するコンポーネント。対応するリスト構造は XrSpatialComponentConfidenceListANDROIDSYS。対応するデータ構造は float(XR_ANDROIDSYS_spatial_room_tracking 拡張機能によって追加)。
XR_SPATIAL_COMPONENT_TYPE_ROOM_EMPTINESS_ANDROIDSYS
部屋の空き状況を提供するコンポーネント。対応するリスト構造は XrSpatialComponentRoomEmptinessListANDROIDSYS、対応するデータ構造は float(XR_ANDROIDSYS_spatial_room_tracking 拡張機能によって追加)
XR_SPATIAL_COMPONENT_TYPE_OCCUPANCY_GRID_ANDROIDX1
アタッチされたエンティティの占有グリッドの情報を提供するコンポーネント。対応するリスト構造は XrSpatialComponentOccupancyGridListANDROIDX1、対応するデータ構造は XrSpatialOccupancyGridDataANDROIDX1(XR_ANDROIDX1_spatial_occupancy_grid 拡張機能によって追加)
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID
クワッド アノテーションを記述するコンポーネント。対応するリスト構造は XrSpatialComponentAnnotationQuadListANDROID、対応するデータ構造は XrSpatialAnnotationQuadDataANDROID(XR_ANDROID_spatial_annotation_tracking 拡張機能によって追加)
XR_SPATIAL_COMPONENT_TYPE_STREETSCAPE_GEOMETRY_METADATA_ANDROIDX2
ストリートビュー ジオメトリのメタデータを提供するコンポーネント。対応するリスト構造は XrSpatialComponentStreetscapeGeometryMetadataListANDROIDX2、対応するデータ構造は XrSpatialStreetscapeGeometryMetadataANDROIDX2(XR_ANDROIDX2_geospatial_streetscape 拡張機能によって追加)
XR_SPATIAL_COMPONENT_TYPE_GEOMETRY_POINT_ANDROID
エンティティをジオメトリ ポイントとして識別するコンポーネント。このコンポーネント タイプに対応するリストやデータ構造はありません。このコンポーネントが存在することは、エンティティをアンカーにアタッチできることを示しているにすぎません。(XR_ANDROID_spatial_geometry_point 拡張機能によって追加)
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_SCOPES_ANDROIDX1
エンティティが永続化される永続性スコープを記述するコンポーネント。ランタイムが XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT をサポートしている場合、このコンポーネントもサポートしなければなりません。対応するデータ構造は XrSpatialBufferEXT です。対応するリスト構造は XrSpatialComponentPersistenceScopeDataListANDROIDX1 です。(XR_ANDROIDX1_spatial_anchor_cloud_sharing 拡張機能によって追加)
空間機能とセットアップ
空間機能は、保証されたコンポーネント セットを持つエンティティを検出するランタイムの機能を定義します。アプリは、XrSpatialContextEXT の作成時に空間機能のコンポーネントを有効にします。ランタイムは、検出されたエンティティで有効なコンポーネントのみを提供しなければなりません。たとえば、ランタイムが特定の機能のコンポーネントの 1 つが「セマンティック ラベル」であると報告した場合、アプリはその機能の構成を介してセマンティック ラベルを有効にでき、ランタイムは構成されている場合にのみセマンティック ラベル コンポーネントを提供しなければなりません。
typedef enum XrSpatialCapabilityEXT {
XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT = 1000741000,
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT = 1000743000,
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT = 1000743001,
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT = 1000743002,
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT = 1000743003,
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT = 1000744000,
XR_SPATIAL_CAPABILITY_ANCHOR_EXT = 1000762000,
XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT = 1000782000,
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT = 1000783000,
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID = 1000785000,
XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID = 1000786000,
XR_SPATIAL_CAPABILITY_ROOM_TRACKING_ANDROIDSYS = 1000792000,
XR_SPATIAL_CAPABILITY_ROOM_BOUNDARY_TRACKING_ANDROIDSYS = 1000792001,
XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID = 1000794000,
XR_SPATIAL_CAPABILITY_STREETSCAPE_GEOMETRY_ANDROIDX2 = 1000798000,
XR_SPATIAL_CAPABILITY_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialCapabilityEXT;
XrSpatialCapabilityEXT 列挙型は、ランタイムがサポートする可能性のあるさまざまなタイプの機能を識別します。
列挙子には次の値があります。
列挙型の説明
XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT
平面トラッキング(XR_EXT_spatial_plane_tracking 拡張機能によって追加)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT
QR コードを検出して追跡する機能。(XR_EXT_spatial_marker_tracking 拡張機能によって追加)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT
マイクロ QR コードを検出して追跡する機能。(XR_EXT_spatial_marker_tracking 拡張機能によって追加)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT
Aruco マーカーを検出して追跡する機能。(XR_EXT_spatial_marker_tracking 拡張機能によって追加)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT
AprilTag を検出して追跡する機能。(XR_EXT_spatial_marker_tracking 拡張機能によって追加)
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT
オブジェクト トラッキング(XR_EXT_spatial_object_tracking 拡張機能によって追加)
XR_SPATIAL_CAPABILITY_ANCHOR_EXT
空間アンカーを作成する機能(XR_EXT_spatial_anchor 拡張機能によって追加)
XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT
平面参照画像を検出して追跡する機能。(XR_EXT_spatial_image_tracking 拡張機能によって追加)
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT
環境のメッシュを追跡する機能。(XR_EXT_spatial_mesh_tracking 拡張機能によって追加)
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID
オブジェクト トラッキング(XR_ANDROID_spatial_object_tracking 拡張機能によって追加)
XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID
深度バッファに対するレイキャスト(XR_ANDROID_spatial_discovery_raycast 拡張機能によって追加)
XR_SPATIAL_CAPABILITY_ROOM_TRACKING_ANDROIDSYS
部屋を追跡する機能(XR_ANDROIDSYS_spatial_room_tracking 拡張機能によって追加)
XR_SPATIAL_CAPABILITY_ROOM_BOUNDARY_TRACKING_ANDROIDSYS
部屋の境界を追跡する機能(XR_ANDROIDSYS_spatial_room_tracking 拡張機能によって追加)
XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID
アノテーション トラッキング(XR_ANDROID_spatial_annotation_tracking 拡張機能によって追加)
XR_SPATIAL_CAPABILITY_STREETSCAPE_GEOMETRY_ANDROIDX2
ストリートビュー ジオメトリ(XR_ANDROIDX2_geospatial_streetscape 拡張機能によって追加)
xrEnumerateSpatialCapabilitiesEXT 関数は次のように定義されます。
XrResult xrEnumerateSpatialCapabilitiesEXT(
XrInstance instance,
XrSystemId systemId,
uint32_t capabilityCapacityInput,
uint32_t* capabilityCountOutput,
XrSpatialCapabilityEXT* capabilities);
パラメータの説明
instanceは XrInstance のハンドルです。systemIdは、空間機能が列挙されるXrSystemIdです。capabilityCapacityInputはcapabilities配列の容量です。0 の場合は、必要な容量を取得するリクエストであることを示します。capabilityCountOutputは、機能の数、またはcapabilityCapacityInputが不十分な場合の必要な容量です。capabilitiesは XrSpatialCapabilityEXT の配列です。capabilityCapacityInputが 0 の場合、NULLになることがあります。- 必要な
capabilitiesサイズの取得の詳細については、バッファサイズ パラメータのセクションをご覧ください。
アプリは、xrEnumerateSpatialCapabilitiesEXT を使用して、特定の XrSystemId でサポートされている空間機能のリストを列挙しても構いません。
ランタイムは、instance で拡張機能が有効になっていない空間機能を列挙してはなりません。
有効な使用方法(暗黙的)
-
XR_EXT_spatial_entity拡張機能は、xrEnumerateSpatialCapabilitiesEXT を呼び出す前に有効にする必要があります。 -
instanceは、有効な XrInstance ハンドルでなければなりません。 -
capabilityCountOutputはuint32_t値へのポインタでなければなりません -
capabilityCapacityInputが0でない場合、capabilitiesはcapabilityCapacityInputXrSpatialCapabilityEXT 値の配列へのポインタでなければなりません。
戻りコード
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
xrEnumerateSpatialCapabilityComponentTypesEXT 関数は次のように定義されます。
XrResult xrEnumerateSpatialCapabilityComponentTypesEXT(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
XrSpatialCapabilityComponentTypesEXT* capabilityComponents);
パラメータの説明
instanceは XrInstance のハンドルです。systemIdは、空間機能コンポーネントが列挙されるXrSystemIdです。capabilityは、コンポーネントが列挙される XrSpatialCapabilityEXT です。capabilityComponentsは XrSpatialCapabilityComponentTypesEXT へのポインタです。これは、アプリケーションによって割り当てられた配列が入力される入出力構造です。
この関数は、指定された機能がシステム内のエンティティに提供するコンポーネント タイプを、構成に従って列挙します。
アプリケーションは、XrSpatialCapabilityComponentTypesEXT :: componentTypes に列挙されているコンポーネント タイプを使用して、systemId が capability でサポートするコンポーネントの完全なセットを把握し、このリストを使用して、capability の XrSpatialContextEXT を作成する際に capability の有効な構成を判断できます。
capability が xrEnumerateSpatialCapabilitiesEXT によって列挙されていない場合、ランタイムは XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT を返さなければなりません。
ランタイムは、instance で拡張機能が有効になっていない空間コンポーネント タイプを列挙してはなりません。
有効な使用方法(暗黙的)
-
XR_EXT_spatial_entity拡張機能は、xrEnumerateSpatialCapabilityComponentTypesEXT を呼び出す前に有効にする必要があります。 -
instanceは、有効な XrInstance ハンドルでなければなりません。 -
capabilityは、有効な XrSpatialCapabilityEXT 値でなければなりません capabilityComponentsは XrSpatialCapabilityComponentTypesEXT 構造体へのポインタでなければなりません。
戻りコード
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
XrSpatialCapabilityComponentTypesEXT 構造体は次のように定義されます。
typedef struct XrSpatialCapabilityComponentTypesEXT {
XrStructureType type;
void* next;
uint32_t componentTypeCapacityInput;
uint32_t componentTypeCountOutput;
XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialCapabilityComponentTypesEXT;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。このような構造体は、コア OpenXR またはこの拡張機能では定義されていません。componentTypeCapacityInputは配列の容量です。0 の場合は、必要な容量を取得するリクエストであることを示します。componentTypeCountOutputは、コンポーネント タイプの数、またはcomponentTypeCapacityInputが不十分な場合の必要な容量です。componentTypesは XrSpatialComponentTypeEXT の配列です。componentTypeCapacityInputが 0 の場合、NULLになることがあります。- 必要な
componentTypesサイズの取得の詳細については、バッファサイズ パラメータのセクションをご覧ください。
有効な使用方法(暗黙的)
-
XR_EXT_spatial_entity拡張機能は、XrSpatialCapabilityComponentTypesEXT を使用する前に有効にする必要があります。 -
typeはXR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXTにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタでなければなりません。 -
componentTypeCapacityInputが0でない場合、componentTypesはcomponentTypeCapacityInputXrSpatialComponentTypeEXT 値の配列へのポインタでなければなりません。
空間機能
typedef enum XrSpatialCapabilityFeatureEXT {
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT = 1000743000,
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT = 1000743001,
XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT = 1000744000,
XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID = 1000761000,
XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID = 1000761001,
XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID = 1000761002,
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXT = 1000782000,
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_STATIC_IMAGES_EXT = 1000782001,
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_FIXED_SIZE_IMAGES_EXT = 1000782002,
XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT = 1000783000,
XR_SPATIAL_CAPABILITY_FEATURE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialCapabilityFeatureEXT;
一部の機能には、コンポーネント データがランタイムによってどのように計算されるかを構成するために、アプリケーションに公開されるパラメータがあります。これらのパラメータ化 / 構成可能性のディメンションは、機能特性と呼ばれます。たとえば、画像トラッキング機能の場合、ランタイムは、トラッキングされた画像が静止しているかどうかをアプリケーションが指定する機能をサポートする場合があります。
構成構造を介してこの情報をランタイムに提供する場合、関連するエンティティ(トラッキング対象の画像など)に存在するコンポーネント タイプのセットを変更してはなりません。ただし、ランタイムは、画像トラッキング機能のトラッキング機能などを最適化し、アプリケーションに優れたエクスペリエンスを提供できる場合があります。
このような機能は XrSpatialCapabilityFeatureEXT で表され、アプリは xrEnumerateSpatialCapabilityFeaturesEXT を使用してそれらを列挙します。
各機能には、それを有効にするための対応する構成構造があります。このような構成構造は、対応する機能の XrSpatialCapabilityConfigurationBaseHeaderEXT :: next にチェーンしなければなりません。
列挙子には次の値があります。
列挙型の説明
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT
アプリケーションでマーカーのサイズを指定できるようにする機能。対応する構成構造は XrSpatialMarkerSizeEXT(XR_EXT_spatial_marker_tracking 拡張機能によって追加)です。
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT
アプリでマーカーが静的かどうかを指定できるようにする機能。対応する構成構造は XrSpatialMarkerStaticOptimizationEXT(XR_EXT_spatial_marker_tracking 拡張機能によって追加)です。
XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT
アプリが XrSpatialObjectSemanticLabelEXT からラベルのサブセットを指定して、ランタイムが追跡できるようにする空間機能。対応する構成構造は XrSpatialFeatureObjectSemanticLabelSubsetEXT です。(XR_EXT_spatial_object_tracking 拡張機能によって追加)
XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID
ランタイムは、XrSpatialDiscoverySnapshotCreateInfoEXT の XrSpatialBoundsSpherefANDROID フィルタをサポートしています。これには、空間コンテキストの作成時に構成構造を含める必要はありません。(XR_ANDROID_spatial_discovery_bounds 拡張機能によって追加)
XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID
ランタイムは、XrSpatialDiscoverySnapshotCreateInfoEXT の XrSpatialBoundsBoxfANDROID フィルタをサポートしています。これには、空間コンテキストの作成時に構成構造を含める必要はありません。(XR_ANDROID_spatial_discovery_bounds 拡張機能によって追加)
XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID
ランタイムは、XrSpatialDiscoverySnapshotCreateInfoEXT の XrSpatialBoundsFrustumfANDROID フィルタをサポートしています。これには、空間コンテキストの作成時に構成構造を含める必要はありません。(XR_ANDROID_spatial_discovery_bounds 拡張機能によって追加)
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXT
ランタイムは、検出および追跡された画像の物理サイズの自動推定をサポートしています。対応する構成構造は XrSpatialImageSizeEXT(XR_EXT_spatial_image_tracking 拡張機能によって追加)です。
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_STATIC_IMAGES_EXT
ランタイムは XrSpatialImageStaticOptimizationEXT をサポートしています。対応する構成構造は XrSpatialImageStaticOptimizationEXT です。(XR_EXT_spatial_image_tracking 拡張機能によって追加)
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_FIXED_SIZE_IMAGES_EXT
ランタイムは XrSpatialImageSizeEXT をサポートしています。対応する構成構造は XrSpatialImageSizeEXT(XR_EXT_spatial_image_tracking 拡張機能によって追加)です。
XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT
環境のウォータータイト メッシュを追跡する機能。対応する構成構造は XrSpatialFeatureTrackWatertightMeshEXT です。(XR_EXT_spatial_mesh_tracking 拡張機能によって追加)
xrEnumerateSpatialCapabilityFeaturesEXT 関数は次のように定義されます。
XrResult xrEnumerateSpatialCapabilityFeaturesEXT(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
uint32_t capabilityFeatureCapacityInput,
uint32_t* capabilityFeatureCountOutput,
XrSpatialCapabilityFeatureEXT* capabilityFeatures);
パラメータの説明
instanceは XrInstance のハンドルです。systemIdは、空間機能が列挙されるXrSystemIdです。capabilityは、機能が列挙される XrSpatialCapabilityEXT です。capabilityFeatureCapacityInputは配列の容量です。0 の場合は、必要な容量を取得するリクエストであることを示します。capabilityFeatureCountOutputは、特徴の数、またはcapabilityFeatureCapacityInputが不十分な場合の必要な容量です。capabilityFeaturesは XrSpatialCapabilityFeatureEXT の配列です。capabilityFeatureCapacityInputが 0 の場合、NULLになることがあります。- 必要な
capabilityFeaturesサイズの取得の詳細については、バッファサイズ パラメータのセクションをご覧ください。
アプリは、xrEnumerateSpatialCapabilityFeaturesEXT を使用して、XrSpatialCapabilityEXT の特定のシステムでサポートされている機能を検出します。
機能が公開されている機能の場合、アプリケーションは有効にする機能を選択し、XrSpatialContextCreateInfoEXT :: capabilityConfigs の機能構成構造の次のチェーンで対応する構成構造を提供します。
capability が xrEnumerateSpatialCapabilitiesEXT で列挙された機能でない場合、ランタイムは XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT を返さなければなりません。
ランタイムは、instance で拡張機能が有効になっていない空間機能の機能を列挙してはなりません。
有効な使用方法(暗黙的)
-
XR_EXT_spatial_entity拡張機能は、xrEnumerateSpatialCapabilityFeaturesEXT を呼び出す前に有効にする必要があります。 -
instanceは、有効な XrInstance ハンドルでなければなりません。 -
capabilityは、有効な XrSpatialCapabilityEXT 値でなければなりません -
capabilityFeatureCountOutputはuint32_t値へのポインタでなければなりません -
capabilityFeatureCapacityInputが0でない場合、capabilityFeaturesはcapabilityFeatureCapacityInputXrSpatialCapabilityFeatureEXT 値の配列へのポインタでなければなりません。
戻りコード
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
空間コンテキスト
空間コンテキストを作成する
XR_DEFINE_HANDLE(XrSpatialContextEXT)
XrSpatialContextEXT ハンドルは、ユーザーの環境内のいくつかの空間エンティティを検出して更新するためのリソースを表します。アプリケーションは、このハンドルを使用して、この拡張機能の他の関数を使用して空間エンティティを検出および更新できます。
xrCreateSpatialContextAsyncEXT 関数は次のように定義されます。
XrResult xrCreateSpatialContextAsyncEXT(
XrSession session,
const XrSpatialContextCreateInfoEXT* createInfo,
XrFutureEXT* future);
パラメータの説明
sessionは、空間コンテキストがアクティブになる XrSession です。createInfoは、空間コンテキスト パラメータの指定に使用される XrSpatialContextCreateInfoEXT です。futureはXrFutureEXTへのポインタです。
アプリケーションは、次の方法で XrSpatialContextEXT ハンドルを作成できます。
- XrSpatialContextCreateInfoEXT ::
capabilityConfigsで XrSpatialCapabilityConfigurationBaseHeaderEXT 派生構造を提供して、機能を有効にし、その機能のコンポーネントを有効にします。 - XrSpatialCapabilityFeatureEXT の対応する構成構造を使用して、機能自体を構成する。
XrSpatialContextCreateInfoEXT ::capabilityConfigCount が 0 の場合、ランタイムは XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT を返さなければなりません。空間コンテキスト ハンドルには、少なくとも 1 つの機能が必要です。
XrSpatialContextCreateInfoEXT :: capabilityConfigs 配列内の機能が xrEnumerateSpatialCapabilitiesEXT によって列挙されていない場合、ランタイムは XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT を返さなければなりません。
XrSpatialContextCreateInfoEXT :: capabilityConfigs の XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponentCount が 0 の場合、ランタイムは XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT を返さなければなりません。機能構成は、その機能に対して有効にするコンポーネント タイプのリストがないと不完全になります。
XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents にリストされているコンポーネント タイプが xrEnumerateSpatialCapabilityComponentTypesEXT の XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability に列挙されていない場合、ランタイムは XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT を返さなければなりません。
XrSpatialContextCreateInfoEXT :: capabilityConfigs の次のチェーン内の構造のいずれかが、xrEnumerateSpatialCapabilityFeaturesEXT でその機能に対して列挙されていない XrSpatialCapabilityFeatureEXT に対応している場合、ランタイムはその XrSpatialCapabilityFeatureEXT 構造を無視しなければなりません。
XrSpatialContextCreateInfoEXT :: capabilityConfigs に、同じ XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability を持つ複数の構造体が含まれている場合、ランタイムは XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT を返さなければなりません。
システム リソースを最適に使用するために、ランタイムは XrSpatialContextCreateInfoEXT 配列で提供される構成を使用して、空間リクエストの受信に備える場合があります。たとえば、平面トラッキング機能をサポートするランタイムは、平面トラッキング機能を含む空間コンテキスト ハンドルがアプリケーションによって作成された場合にのみ、平面トラッキング パイプラインを開始できます。構成された機能のウォームアップ時間が長い場合、xrCreateSpatialDiscoverySnapshotAsyncEXT の呼び出しにより、空のスナップショットが生成される可能性があります。アプリは、xrCreateSpatialDiscoverySnapshotAsyncEXT を使用する前に XrEventDataSpatialDiscoveryRecommendedEXT を待機して、基盤となるトラッキング サービスがウォームアップされていることを確認できます。
ランタイムが、XrSpatialContextEXT に構成されている空間機能へのアプリケーション アクセスを制御する権限システムを適用する場合、それらの権限がこのアプリケーションに付与されていない場合、ランタイムは XR_ERROR_PERMISSION_INSUFFICIENT を返さなければなりません。
この関数は非同期オペレーションを開始し、対応する XrFutureEXT を作成します。これは xrPollFutureEXT および関連する関数で使用できます。この関数の戻り値は、パラメータが非同期オペレーションのスケジュール設定に許容されるかどうかのみを示します。対応する完了関数は xrCreateSpatialContextCompleteEXT です。この関数からの Future が READY 状態のときに使用でき、その関数によって完了構造 XrCreateSpatialContextCompletionEXT に出力が入力されます。
有効な使用方法(暗黙的)
-
XR_EXT_spatial_entity拡張機能は、xrCreateSpatialContextAsyncEXT を呼び出す前に有効にする必要があります。 -
sessionは、有効な XrSession ハンドルでなければなりません。 -
createInfoは、有効な XrSpatialContextCreateInfoEXT 構造体へのポインタでなければなりません。 -
futureはXrFutureEXT値へのポインタでなければなりません。
戻りコード
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_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXTXR_ERROR_VALIDATION_FAILUREXR_ERROR_TIME_INVALID(XR_ANDROID_spatial_annotation_trackingが有効な場合)
XrSpatialContextCreateInfoEXT 構造体は次のように定義されます。
typedef struct XrSpatialContextCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t capabilityConfigCount;
const XrSpatialCapabilityConfigurationBaseHeaderEXT* const* capabilityConfigs;
} XrSpatialContextCreateInfoEXT;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。このような構造体は、コア OpenXR またはこの拡張機能では定義されていません。capabilityConfigCountは、capabilityConfigs配列内の要素の数を表すuint32_tです。capabilityConfigsは、XrSpatialCapabilityConfigurationBaseHeaderEXT ポインタの配列へのポインタです。
XrSpatialContextCreateInfoEXT 構造体は、XrSpatialContextEXT ハンドルを作成するための情報を記述します。
有効な使用方法(暗黙的)
- XrSpatialContextCreateInfoEXT を使用する前に、
XR_EXT_spatial_entity拡張機能を有効にする必要があります。 -
typeはXR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXTにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタである必要があります。XrSpatialContextPersistenceConfigEXT もご覧ください。 -
capabilityConfigsは、capabilityConfigCount個の有効な XrSpatialCapabilityConfigurationBaseHeaderEXT ベースの構造体の配列へのポインタでなければなりません。関連情報: XrSpatialCapabilityConfigurationAnchorEXT、XrSpatialCapabilityConfigurationAnnotationTrackingANDROID、XrSpatialCapabilityConfigurationAprilTagEXT、XrSpatialCapabilityConfigurationArucoMarkerEXT、XrSpatialCapabilityConfigurationDepthRaycastANDROID、XrSpatialCapabilityConfigurationImageTrackingEXT、XrSpatialCapabilityConfigurationMeshTrackingEXT、XrSpatialCapabilityConfigurationMicroQrCodeEXT、XrSpatialCapabilityConfigurationObjectTrackingANDROID、XrSpatialCapabilityConfigurationObjectTrackingEXT、XrSpatialCapabilityConfigurationPlaneTrackingEXT、XrSpatialCapabilityConfigurationQrCodeEXT、XrSpatialCapabilityConfigurationRoomBoundaryTrackingANDROIDSYS、XrSpatialCapabilityConfigurationRoomTrackingANDROIDSYS、XrSpatialCapabilityConfigurationStreetscapeGeometryANDROIDX2 -
capabilityConfigCountパラメータは0より大きい値にする必要があります。
XrSpatialCapabilityConfigurationBaseHeaderEXT 構造体は次のように定義されます。
typedef struct XrSpatialCapabilityConfigurationBaseHeaderEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationBaseHeaderEXT;
この構造体は API で直接使用されるのではなく、その子構造体を XrSpatialContextCreateInfoEXT とともに使用して、空間機能を構成できます。
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。capabilityは XrSpatialCapabilityEXT です。enabledComponentCountは、enabledComponents配列内の要素の数を表すuint32_tです。enabledComponentsは XrSpatialComponentTypeEXT の配列へのポインタです。
capability が xrEnumerateSpatialCapabilitiesEXT によって列挙されていない場合、ランタイムは XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT を返さなければなりません。enabledComponents にリストされているコンポーネント タイプが xrEnumerateSpatialCapabilityComponentTypesEXT の capability で列挙されていない場合、ランタイムは XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT を返さなければなりません。
有効な使用方法(暗黙的)
- XrSpatialCapabilityConfigurationBaseHeaderEXT を使用する前に、
XR_EXT_spatial_entity拡張機能を有効にする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタでなければなりません。 -
capabilityは、有効な XrSpatialCapabilityEXT 値でなければなりません -
enabledComponentsは、enabledComponentCount個の有効な XrSpatialComponentTypeEXT 値の配列へのポインタでなければなりません。 -
enabledComponentCountパラメータは0より大きい値にする必要があります。
xrCreateSpatialContextCompleteEXT 関数は次のように定義されます。
XrResult xrCreateSpatialContextCompleteEXT(
XrSession session,
XrFutureEXT future,
XrCreateSpatialContextCompletionEXT* completion);
パラメータの説明
sessionは、以前に xrCreateSpatialContextAsyncEXT ::sessionに渡された XrSession です。futureは、xrCreateSpatialContextAsyncEXT から受け取ったXrFutureEXTです。completionは XrCreateSpatialContextCompletionEXT へのポインタです。
xrCreateSpatialContextCompleteEXT は、xrCreateSpatialContextAsyncEXT によって開始された非同期オペレーションを完了します。future が準備完了状態でない場合、ランタイムは XR_ERROR_FUTURE_PENDING_EXT を返さなければなりません。future がすでに完了またはキャンセルされている場合、ランタイムは XR_ERROR_FUTURE_INVALID_EXT を返さなければなりません。
有効な使用方法(暗黙的)
-
XR_EXT_spatial_entity拡張機能は、xrCreateSpatialContextCompleteEXT を呼び出す前に有効にする必要があります。 -
sessionは、有効な XrSession ハンドルでなければなりません。 -
completionは、XrCreateSpatialContextCompletionEXT 構造体へのポインタでなければなりません。
戻りコード
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_FUTURE_INVALID_EXTXR_ERROR_FUTURE_PENDING_EXTXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
XrCreateSpatialContextCompletionEXT 構造体は次のように定義されます。
typedef struct XrCreateSpatialContextCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialContextEXT spatialContext;
} XrCreateSpatialContextCompletionEXT;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。futureResultは、空間コンテキスト作成オペレーションの XrResult です。spatialContextは、xrCreateSpatialContextAsyncEXT ::createInfoのデータと構成を使用して作成された XrSpatialContextEXT です。
今後の返品コード
futureResult の値:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT
futureResult が成功コードの場合、spatialContext は有効である必要があります。spatialContext が有効な場合、xrCreateSpatialContextAsyncEXT :: session のライフサイクル内、またはアプリが xrDestroySpatialContextEXT で spatialContext を破棄するまで(どちらか早い方)のみ有効です。
有効な使用方法(暗黙的)
-
XR_EXT_spatial_entity拡張機能は、XrCreateSpatialContextCompletionEXT を使用する前に有効にしなければなりません。 -
typeはXR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXTにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタでなければなりません。 -
futureResultは有効な XrResult 値でなければなりません。 -
spatialContextが XR_NULL_HANDLE でない場合、spatialContextは有効な XrSpatialContextEXT ハンドルでなければなりません。
空間コンテキストを破棄する
xrDestroySpatialContextEXT 関数は次のように定義されます。
XrResult xrDestroySpatialContextEXT(
XrSpatialContextEXT spatialContext);
パラメータの説明
spatialContextは、以前に xrCreateSpatialContextAsyncEXT によって作成された XrSpatialContextEXT です。
アプリケーションは、空間エンティティの検出と更新タスクが完了したときに、xrDestroySpatialContextEXT 関数を呼び出して spatialContext ハンドルと基盤となるリソースを解放できます。spatialContext と同じ空間機能で作成された有効な XrSpatialContextEXT が他にない場合、この呼び出しは、システム リソースを節約するために、それらの機能に必要なトラッキング サービスを無効にするようランタイムに提案する役割を果たします。
有効な使用方法(暗黙的)
-
XR_EXT_spatial_entity拡張機能は、xrDestroySpatialContextEXT を呼び出す前に有効にする必要があります。 -
spatialContextは有効な XrSpatialContextEXT ハンドルでなければなりません
スレッドセーフ
spatialContextとその子ハンドルへのアクセスは、外部で同期する必要があります。
戻りコード
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
空間エンティティ表現
空間エンティティ ID
XR_DEFINE_ATOM(XrSpatialEntityIdEXT)
XrSpatialEntityIdEXT は、ユーザーの空間環境でランタイムによって検出されたあらゆる種類のエンティティを表すために使用されます。XrSpatialEntityIdEXT は、検出された XrSpatialContextEXT に対して有効であり、ランタイムは、同じ XrSpatialContextEXT 内の異なるエンティティに対して同じ XrSpatialEntityIdEXT を再利用してはなりません。また、ランタイムは、同じエンティティを表すか異なるエンティティを表すかにかかわらず、同じ XrSession 内の複数の XrSpatialContextEXT で同じ XrSpatialEntityIdEXT を再利用してはなりません。
#define XR_NULL_SPATIAL_ENTITY_ID_EXT 0
XR_NULL_SPATIAL_ENTITY_ID_EXT は、無効な XrSpatialEntityIdEXT を表す予約値です。API 関数に渡したり、API 関数から返したりできるのは、明示的に許可されている場合に限られます。
空間エンティティ ハンドル
XR_DEFINE_HANDLE(XrSpatialEntityEXT)
XrSpatialEntityEXT ハンドルは、空間エンティティを表します。アプリケーションは、このようなハンドルを作成して、特定のエンティティに対する関心をランタイムに伝えることができます。
ID から空間エンティティ ハンドルを作成する
xrCreateSpatialEntityFromIdEXT 関数は次のように定義されます。
XrResult xrCreateSpatialEntityFromIdEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialEntityFromIdCreateInfoEXT* createInfo,
XrSpatialEntityEXT* spatialEntity);
パラメータの説明
spatialContextは、以前に xrCreateSpatialContextAsyncEXT を使用して作成された XrSpatialContextEXT です。createInfoは、XrSpatialEntityFromIdCreateInfoEXT 構造体へのポインタです。spatialEntityは、返された XrSpatialEntityEXT ハンドルです。
アプリは、xrCreateSpatialEntityFromIdEXT を使用して、ユーザーの環境に存在するエンティティへの参照である XrSpatialEntityEXT ハンドルを作成できます。
XrSpatialEntityFromIdCreateInfoEXT :: entityId が spatialContext の有効な ID でない場合、ランタイムは XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT を返さなければなりません。
有効な使用方法(暗黙的)
-
XR_EXT_spatial_entity拡張機能は、xrCreateSpatialEntityFromIdEXT を呼び出す前に有効にする必要があります。 -
spatialContextは有効な XrSpatialContextEXT ハンドルでなければなりません -
createInfoは、有効な XrSpatialEntityFromIdCreateInfoEXT 構造体へのポインタでなければなりません。 -
spatialEntityは、XrSpatialEntityEXT ハンドルへのポインタでなければなりません
戻りコード
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_ENTITY_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
XrSpatialEntityFromIdCreateInfoEXT 構造体は次のように定義されます。
typedef struct XrSpatialEntityFromIdCreateInfoEXT {
XrStructureType type;
const void* next;
XrSpatialEntityIdEXT entityId;
} XrSpatialEntityFromIdCreateInfoEXT;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。このような構造体は、コア OpenXR またはこの拡張機能では定義されていません。entityIdは、アプリケーションがハンドルを作成するエンティティのXrSpatialEntityIdEXTです。
有効な使用方法(暗黙的)
- XrSpatialEntityFromIdCreateInfoEXT を使用する前に、
XR_EXT_spatial_entity拡張機能を有効にする必要があります。 -
typeはXR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXTにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタでなければなりません。
空間エンティティ ハンドルを破棄する
xrDestroySpatialEntityEXT 関数は次のように定義されます。
XrResult xrDestroySpatialEntityEXT(
XrSpatialEntityEXT spatialEntity);
パラメータの説明
spatialEntityは、xrCreateSpatialEntityFromIdEXT などの関数によって以前に作成された XrSpatialEntityEXT へのハンドルです。
アプリは、このハンドルによって参照されるエンティティが不要になったときに、xrDestroySpatialEntityEXT を使用して spatialEntity ハンドルを解放できます。
有効な使用方法(暗黙的)
-
XR_EXT_spatial_entity拡張機能は、xrDestroySpatialEntityEXT を呼び出す前に有効にする必要があります。 -
spatialEntityは、有効な XrSpatialEntityEXT ハンドルでなければなりません。
スレッドセーフ
spatialEntityとその子ハンドルへのアクセスは、外部で同期する必要があります。
戻りコード
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
空間スナップショット
XR_DEFINE_HANDLE(XrSpatialSnapshotEXT)
アプリは、空間エンティティを検出する目的、または既知の空間エンティティに関する情報を更新する目的で、空間スナップショットを作成できます。XrSpatialSnapshotEXT ハンドルは、検出または更新された空間エンティティの不変データと、アプリによって選択されたコンポーネントのサブセットを表します。空間スナップショットは、エンティティとそのコンポーネント データの整合性のあるビューを表します。スナップショットが作成されたら、スナップショットが有効な間、スナップショットのデータは一定に保たれる必要があります。
アプリケーションは、必要な数のスナップショットを作成できますが、新しいスナップショットごとに割り当てられるメモリに注意する必要があります。また、スナップショットが不要になったら破棄する必要があります。
検出スナップショットを作成する
xrCreateSpatialDiscoverySnapshotAsyncEXT 関数は次のように定義されます。
XrResult xrCreateSpatialDiscoverySnapshotAsyncEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialDiscoverySnapshotCreateInfoEXT* createInfo,
XrFutureEXT* future);
パラメータの説明
spatialContextは、以前に xrCreateSpatialContextAsyncEXT を使用して作成された XrSpatialContextEXT です。createInfoは XrSpatialDiscoverySnapshotCreateInfoEXT へのポインタです。futureはXrFutureEXTへのポインタです。
アプリは、xrCreateSpatialDiscoverySnapshotAsyncEXT を使用して検出スナップショットを作成することで、空間エンティティを検出できます。
この関数は非同期オペレーションを開始し、対応する XrFutureEXT を作成します。これは xrPollFutureEXT および関連する関数で使用できます。この関数の戻り値は、パラメータが非同期オペレーションのスケジュール設定に許容されるかどうかのみを示します。対応する完了関数は xrCreateSpatialDiscoverySnapshotCompleteEXT です。この関数からの Future が READY 状態のときに使用でき、その関数によって完了構造 XrCreateSpatialDiscoverySnapshotCompletionEXT に出力が入力されます。
アプリケーションは、前のリクエストの完了を待たずに、複数の検出スナップショット作成リクエストを送信できます。ランタイムは、任意の順序でスナップショットの作成を処理して完了する可能性があります。デバイスの電力、温度、その他のポリシーによりシステム リソースの使用量を削減する必要がある場合、ランタイムは、検出スナップショットの作成の完了を遅らせて、アプリケーションをスロットリングすることがあります。
アプリケーションは、XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes を使用して、ランタイムがスナップショットに含める必要があるデータを持つエンティティとコンポーネントのリストをフィルタできます。アプリケーションが XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes で空間コンポーネント タイプの有効なリストを提供する場合、ランタイムは、XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes で提供されるコンポーネントを少なくとも 1 つ持つ空間エンティティのみをスナップショットに含めなければなりません。また、ランタイムには、スナップショット内のコンポーネントのデータのみを含める必要があります。
spatialContext の作成時に XrSpatialContextCreateInfoEXT :: capabilityConfigs に渡された空間機能に対して XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes の XrSpatialComponentTypeEXT のいずれかが有効になっていない場合、ランタイムは XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT を返さなければなりません。
アプリケーションが XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes で空間コンポーネント タイプのリストを提供しない場合、ランタイムは、spatialContext 用に構成された機能の XrSpatialCapabilityConfigurationBaseHeaderEXT ::enabledComponents で列挙されたコンポーネントのセットを持つスナップショット内のすべての空間エンティティを含めなければなりません。ランタイムには、spatialContext に構成された機能の有効なすべてのコンポーネントのデータを含める必要があります。
future の完了前に XrEventDataReferenceSpaceChangePending がキューに入れられ、XrEventDataReferenceSpaceChangePending :: poseValid が false の場合、ランタイムは、エンティティのない XrSpatialSnapshotEXT を作成するか、XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace の XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time で、特定できなくなったエンティティの XrSpatialEntityTrackingStateEXT を XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT または XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT に設定しても構いません。ランタイムは、XrEventDataReferenceSpaceChangePending が原因で XrCreateSpatialContextCompletionEXT :: futureResult をエラーコードに設定してはなりません。
有効な使用方法(暗黙的)
-
XR_EXT_spatial_entity拡張機能は、xrCreateSpatialDiscoverySnapshotAsyncEXT を呼び出す前に有効にする必要があります。 -
spatialContextは有効な XrSpatialContextEXT ハンドルでなければなりません -
createInfoは、有効な XrSpatialDiscoverySnapshotCreateInfoEXT 構造体へのポインタでなければなりません -
futureはXrFutureEXT値へのポインタでなければなりません。
戻りコード
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_COMPONENT_NOT_ENABLED_EXTXR_ERROR_VALIDATION_FAILURE
XrSpatialDiscoverySnapshotCreateInfoEXT 構造体は次のように定義されます。
typedef struct XrSpatialDiscoverySnapshotCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialDiscoverySnapshotCreateInfoEXT;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。このような構造体は、コア OpenXR またはこの拡張機能では定義されていません。componentTypeCountは、componentTypes配列内の要素の数を表すuint32_tです。componentTypesは XrSpatialComponentTypeEXT の配列です。
XrSpatialDiscoverySnapshotCreateInfoEXT 構造体は、空間エンティティを検出するときに XrSpatialSnapshotEXT ハンドルを作成するための情報を記述します。
有効な使用方法(暗黙的)
- XrSpatialDiscoverySnapshotCreateInfoEXT を使用する前に、
XR_EXT_spatial_entity拡張機能を有効にする必要があります。 -
typeはXR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXTにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタである必要があります。関連情報: XrSpatialBoundsBoxfANDROID、XrSpatialBoundsFrustumfANDROID、XrSpatialBoundsSpherefANDROID、XrSpatialDiscoveryPersistenceContextFilterANDROIDX1、XrSpatialDiscoveryPersistenceUuidFilterEXT、XrSpatialDiscoveryRoomBoundaryFilterANDROIDSYS、XrSpatialDiscoveryUniqueEntitiesFilterANDROID、XrSpatialFilterTrackingStateEXT、XrSpatialRaycastInfoANDROID -
componentTypeCountが0でない場合、componentTypesはcomponentTypeCountの有効な XrSpatialComponentTypeEXT 値の配列へのポインタでなければなりません。
xrCreateSpatialDiscoverySnapshotCompleteEXT 関数は次のように定義されます。
XrResult xrCreateSpatialDiscoverySnapshotCompleteEXT(
XrSpatialContextEXT spatialContext,
const XrCreateSpatialDiscoverySnapshotCompletionInfoEXT* createSnapshotCompletionInfo,
XrCreateSpatialDiscoverySnapshotCompletionEXT* completion);
パラメータの説明
spatialContextは、以前に xrCreateSpatialDiscoverySnapshotAsyncEXT ::spatialContextに渡された XrSpatialContextEXT です。createSnapshotCompletionInfoは、検出スナップショット作成リクエストの完了に関する情報を提供する XrCreateSpatialDiscoverySnapshotCompletionInfoEXT へのポインタです。completionは XrCreateSpatialDiscoverySnapshotCompletionEXT へのポインタです。
xrCreateSpatialDiscoverySnapshotCompleteEXT は、xrCreateSpatialDiscoverySnapshotAsyncEXT によって開始された非同期オペレーションを完了します。XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future が準備完了状態でない場合、ランタイムは XR_ERROR_FUTURE_PENDING_EXT を返さなければなりません。XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future がすでに完了しているかキャンセルされている場合、ランタイムは XR_ERROR_FUTURE_INVALID_EXT を返す必要があります。
有効な使用方法(暗黙的)
- xrCreateSpatialDiscoverySnapshotCompleteEXT を呼び出す前に、
XR_EXT_spatial_entity拡張機能を有効にする必要があります。 -
spatialContextは有効な XrSpatialContextEXT ハンドルでなければなりません -
createSnapshotCompletionInfoは、有効な XrCreateSpatialDiscoverySnapshotCompletionInfoEXT 構造体へのポインタでなければなりません -
completionは XrCreateSpatialDiscoverySnapshotCompletionEXT 構造体へのポインタでなければなりません。
戻りコード
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_FUTURE_INVALID_EXTXR_ERROR_FUTURE_PENDING_EXTXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
XrCreateSpatialDiscoverySnapshotCompletionInfoEXT 構造体は次のように定義されます。
typedef struct XrCreateSpatialDiscoverySnapshotCompletionInfoEXT {
XrStructureType type;
const void* next;
XrSpace baseSpace;
XrTime time;
XrFutureEXT future;
} XrCreateSpatialDiscoverySnapshotCompletionInfoEXT;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。baseSpaceは、検出 XrSpatialSnapshotEXT のすべての位置が配置される XrSpace です。timeは、検出 XrSpatialSnapshotEXT のすべての位置が配置されるXrTimeです。futureは、xrCreateSpatialDiscoverySnapshotAsyncEXT から受け取ったXrFutureEXTです。
作成されたスナップショットに含まれるさまざまなコンポーネント データのロケーションは、time にある baseSpace で表されます。
有効な使用方法(暗黙的)
-
XR_EXT_spatial_entity拡張機能は、XrCreateSpatialDiscoverySnapshotCompletionInfoEXT を使用する前に有効にする必要があります。 -
typeはXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXTにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタでなければなりません。 -
baseSpaceは有効な XrSpace ハンドルでなければなりません
XrCreateSpatialDiscoverySnapshotCompletionEXT 構造体は次のように定義されます。
typedef struct XrCreateSpatialDiscoverySnapshotCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialSnapshotEXT snapshot;
} XrCreateSpatialDiscoverySnapshotCompletionEXT;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。futureResultは、空間検出スナップショット作成オペレーションの XrResult です。snapshotは XrSpatialSnapshotEXT で、検出された空間エンティティのコンポーネント データをクエリするために使用できます。
今後の返品コード
futureResult の値:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHED
有効な使用方法(暗黙的)
- XrCreateSpatialDiscoverySnapshotCompletionEXT を使用する前に、
XR_EXT_spatial_entity拡張機能を有効にする必要があります。 -
typeはXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXTにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタでなければなりません。 -
futureResultは有効な XrResult 値でなければなりません。 -
snapshotが XR_NULL_HANDLE でない場合、snapshotは有効な XrSpatialSnapshotEXT ハンドルでなければなりません。
検出レコメンデーション イベント
XrEventDataSpatialDiscoveryRecommendedEXT 構造体は次のように定義されます。
typedef struct XrEventDataSpatialDiscoveryRecommendedEXT {
XrStructureType type;
const void* next;
XrSpatialContextEXT spatialContext;
} XrEventDataSpatialDiscoveryRecommendedEXT;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。spatialContextは、ランタイムによって検出が推奨されている XrSpatialContextEXT です。
アプリケーションは、xrPollEvent を使用してこのイベントを取得できます。アプリは、このイベントを待機することで、空間エンティティを検出するための xrCreateSpatialDiscoverySnapshotAsyncEXT の過剰な呼び出しを回避できます。アプリケーションが 2 つの XrEventDataSpatialDiscoveryRecommendedEXT イベント間で同じ XrSpatialDiscoverySnapshotCreateInfoEXT を使用して複数の検出スナップショットを作成すると、結果のスナップショットに同じエンティティが含まれる可能性があり、スナップショットの作成とデータクエリが無駄になります。
このイベントを待ってから新しいディスカバリ スナップショットを作成することで、ランタイムが新しいデータを返さない可能性があるディスカバリ リクエストでアプリケーションがシステムに過負荷をかけることがなくなります。また、システム リソースの過剰使用のリスクを回避し、デバイスの電力ポリシーや温度ポリシーによるスロットリングを回避できます。これにより、ライブ トラッキングで空間エンティティをオンザフライで検出するランタイムと、以前に記録された状態から空間エンティティを提供するランタイム(ランタイムは、XrSpatialContextEXT ごとに 1 回だけ検出推奨イベントをキューに追加する)との間で同等性を確保できます。
ランタイムは、既存の空間エンティティのコンポーネント データに加えられた変更や調整についてアプリケーションに通知するために、このイベントをキューに入れてはなりません。アプリは、xrCreateSpatialUpdateSnapshotEXT を使用して、関心のある空間エンティティのコンポーネント データの更新を追跡できます。
ランタイムは、アプリケーションが最初に xrCreateSpatialDiscoverySnapshotAsyncEXT を呼び出すのを待たずに、検出推奨イベントをキューに追加しても構いません。たとえば、ランタイムは、XrSpatialContextEXT の構成、ユーザーの周囲の環境に関する独自の理解(新しいエンティティの検出や既存のエンティティの喪失)、またはシステム リソースに過負荷をかけないように適切な検出リクエストの頻度をアプリにヒントとして提供することに基づいて、検出推奨イベントをキューに入れるかどうかを決定できます。XrSpatialContextEXT のライフタイム全体を通じてユーザーの環境でエンティティが見つからない場合、ランタイムは XrSpatialContextEXT のこのイベントをキューに入れないことを選択する可能性があります。
ランタイムは、アプリが xrCreateSpatialContextCompleteEXT を使用して作成を完了するまで、特定の spatialContext のこのイベントをキューに入れてはなりません。
アプリケーションが xrDestroySpatialContextEXT を呼び出した後、ランタイムは、その空間コンテキストの検出レコメンデーション イベントをキューに追加してはなりません。また、xrPollEvent からそのコンテキストのイベントを返してはなりません。
有効な使用方法(暗黙的)
- XrEventDataSpatialDiscoveryRecommendedEXT を使用する前に、
XR_EXT_spatial_entity拡張機能を有効にする必要があります。 -
typeはXR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXTにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタでなければなりません。
クエリ コンポーネント データ
xrQuerySpatialComponentDataEXT 関数は次のように定義されます。
XrResult xrQuerySpatialComponentDataEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialComponentDataQueryConditionEXT* queryCondition,
XrSpatialComponentDataQueryResultEXT* queryResult);
パラメータの説明
snapshotは、以前に xrCreateSpatialDiscoverySnapshotCompleteEXT または xrCreateSpatialUpdateSnapshotEXT によって提供された XrSpatialSnapshotEXT です。queryConditionは、XrSpatialComponentDataQueryConditionEXT 構造体へのポインタです。queryResultは、XrSpatialComponentDataQueryResultEXT 構造体へのポインタです。
アプリケーションは、XrSpatialComponentDataQueryConditionEXT :: componentTypes の各 XrSpatialComponentTypeEXT に対応する XrSpatialComponentDataQueryResultEXT :: next にリスト構造をアタッチすることで、xrQuerySpatialComponentDataEXT を使用してスナップショット内のエンティティのコンポーネント データをクエリできます。
アプリケーションが、XrSpatialComponentDataQueryConditionEXT :: componentTypes にリストされているコンポーネントのいずれにも対応しないリスト構造を XrSpatialComponentDataQueryResultEXT :: next にアタッチする場合、ランタイムは XR_ERROR_VALIDATION_FAILURE を返さなければなりません。
アプリケーションは、XrSpatialComponentDataQueryConditionEXT :: componentTypes にリストされているコンポーネントのサブセットにのみ対応するリスト構造をアタッチすることを選択できます。queryCondition を満たす空間エンティティの ID とトラッキング状態のみを把握したい場合、アプリケーションはリスト構造を完全に省略できます。ランタイムは、XrSpatialComponentDataQueryResultEXT :: next チェーンにリスト構造がないことをエラーとして扱ってはなりません。
XrEventDataReferenceSpaceChangePending がキューに登録され、アプリが XrSpatialSnapshotEXT からコンポーネント データをクエリしている間に XrEventDataReferenceSpaceChangePending :: changeTime が経過した場合、アプリはイベントデータを使用してポーズを適宜調整しても構いません。
ランタイムは、XrSpatialComponentDataQueryConditionEXT :: componentTypes で指定されたすべてのコンポーネントを持つエンティティのみを XrSpatialComponentDataQueryResultEXT :: entityIds に入力しなければなりません。XrSpatialComponentDataQueryConditionEXT :: componentTypeCount が 0 の場合、ランタイムは、スナップショット内のすべてのエンティティ(およびそのトラッキング状態)を queryResult に入力しなければなりません。XrSpatialComponentDataQueryConditionEXT :: next に追加のクエリ条件が追加された場合、ランタイムは、それらをコンポーネント タイプの可用性との「AND」として扱わなければなりません。つまり、ランタイムは、提供されたすべての条件を満たすエンティティのみを XrSpatialComponentDataQueryResultEXT ::entityIds に入力しなければなりません。ランタイムは、XrSpatialComponentDataQueryResultEXT :: entityIds のエンティティと同じ順序で、リスト構造のコンポーネント データを入力しなければなりません。つまり、リスト構造配列の特定のインデックスにあるコンポーネント データは、同じインデックスのエンティティに対応しなければなりません。
エンティティのトラッキング状態が XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT でない場合、ランタイムは、XrSpatialComponentDataQueryResultEXT にアタッチされたリスト構造に含まれる配列内のそのエンティティに対応するインデックスのデータを変更してはなりません。
有効な使用方法(暗黙的)
-
XR_EXT_spatial_entity拡張機能は、xrQuerySpatialComponentDataEXT を呼び出す前に有効にする必要があります。 -
snapshotは有効な XrSpatialSnapshotEXT ハンドルでなければなりません -
queryConditionは、有効な XrSpatialComponentDataQueryConditionEXT 構造体へのポインタでなければなりません -
queryResultは XrSpatialComponentDataQueryResultEXT 構造体へのポインタでなければなりません
戻りコード
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_VALIDATION_FAILURE
たとえば、アプリが 5 つのエンティティを含む XrSpatialSnapshotEXT を作成するとします。
- エンティティ 1 と 2 にはコンポーネント
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTとXR_SPATIAL_COMPONENT_TYPE_PARENT_EXTがあります。 - エンティティ 3 と 4 にはコンポーネント
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTとXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXTがあります。 - エンティティ 5 にはコンポーネント
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTとXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXTがあります。
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
1
1
2
2
3
3
4
4
5
5
Bounded2D
Bounded2D
はい
○
○
○
いいえ
いいえ
いいえ
いいえ
○
はい
親
親
はい
○
○
○
いいえ
いいえ
いいえ
いいえ
いいえ
いいえ
Mesh3D
Mesh3D
いいえ
いいえ
いいえ
いいえ
○
○
○
○
○
はい
Bounded3D
Bounded3D
いいえ
いいえ
いいえ
いいえ
○
○
○
○
いいえ
図 20. スナップショットの例
クエリ条件に XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT を指定して、上記のスナップショットで xrQuerySpatialComponentDataEXT を実行すると、エンティティ #1、#2、#5 がアプリに返されます。アプリは、XrSpatialComponentBounded2DListEXT 構造の一部として XrSpatialBounded2DDataEXT の配列を XrSpatialComponentDataQueryResultEXT の次のチェーンにアタッチして、bounded2D データを取得できます。
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
1
1
2
2
5
5
Bounded2D
Bounded2D
entityId #1 のデータ
エンティティのデータ...
entityId #2 のデータ
エンティティのデータ...
entityId #5 のデータ
エンティティのデータ...
entityIds
entityIds
次へ
次へ
XrSpatialComponent DataQueryResultEXT
XrSpatialComponent Dat...
bounds
bounds
XrSpatialComponent Bounded2DListEXT
XrSpatialComponent Bou... テキストが SVG ではないため、表示できません
図 21. クエリ結果の例
クエリ条件に XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT コンポーネントと XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT コンポーネントをリストした上記の xrQuerySpatialComponentDataEXT スナップショットでは、エンティティ #3 と #4 がアプリに返されます。アプリは、XrSpatialComponentBounded3DListEXT 構造と XrSpatialComponentMesh3DListEXT 構造の一部として、XrBoxf と XrSpatialMeshDataEXT の配列を XrSpatialComponentDataQueryResultEXT の次のチェーンにそれぞれアタッチして、コンポーネント データを取得できます。
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
3
3
4
4
Bounded3D
Bounded3D
entityId #3 のデータ
エンティティのデータ...
entityId #4 のデータ
エンティティのデータ...
Mesh3D
Mesh3D
entityId #3 のデータ
エンティティのデータ...
entityId #4 のデータ
エンティティのデータ...
entityIds
entityIds
次へ
次へ
XrSpatialComponent DataQueryResultEXT
XrSpatialComponent Da...
bounds
bounds
次へ
次へ
XrSpatialComponent Bounded3DListEXT
XrSpatialComponent Bo...
XrSpatialComponent Mesh3DListEXT
XrSpatialComponent Me...
meshes
meshes Text is not SVG - cannot display
図 22. クエリ結果の例
XrSpatialComponentDataQueryConditionEXT 構造体は次のように定義されます。
typedef struct XrSpatialComponentDataQueryConditionEXT {
XrStructureType type;
const void* next;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialComponentDataQueryConditionEXT;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。componentTypeCountは、componentTypes配列内の要素の数を表すuint32_tです。componentTypesは、スナップショットからデータを取得する XrSpatialComponentTypeEXT の配列です。
有効な使用方法(暗黙的)
- XrSpatialComponentDataQueryConditionEXT を使用する前に、
XR_EXT_spatial_entity拡張機能を有効にする必要があります。 -
typeはXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXTにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタである必要があります。関連情報: XrSpatialDiscoveryPersistenceUuidFilterEXT、XrSpatialFilterArchetypeEXT、XrSpatialFilterTrackingStateEXT -
componentTypeCountが0でない場合、componentTypesはcomponentTypeCountの有効な XrSpatialComponentTypeEXT 値の配列へのポインタでなければなりません。
XrSpatialComponentDataQueryResultEXT 構造体は次のように定義されます。
typedef struct XrSpatialComponentDataQueryResultEXT {
XrStructureType type;
void* next;
uint32_t entityIdCapacityInput;
uint32_t entityIdCountOutput;
XrSpatialEntityIdEXT* entityIds;
uint32_t entityStateCapacityInput;
uint32_t entityStateCountOutput;
XrSpatialEntityTrackingStateEXT* entityStates;
} XrSpatialComponentDataQueryResultEXT;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。entityIdCapacityInputはentityIds配列の容量です。0 の場合は、必要な容量を取得するリクエストであることを示します。entityIdCountOutputは、entityIds内のXrSpatialEntityIdEXTの数、またはentityIdCapacityInputが不十分な場合の必要な容量です。entityIdsはXrSpatialEntityIdEXTの配列です。entityIdCapacityInputが 0 の場合、NULLになることがあります。entityStateCapacityInputはentityStates配列の容量です。0 の場合は、必要な容量を取得するリクエストであることを示します。entityStateCountOutputは、entityStates内の XrSpatialEntityTrackingStateEXT の数、またはentityStateCapacityInputが不十分な場合の必要な容量です。これは常にentityIdCountOutputと同じにする必要があります。entityStatesは XrSpatialEntityTrackingStateEXT の配列です。entityStateCapacityInputが 0 の場合、NULLになることがあります。- 必要な
entityIdsサイズの取得の詳細については、バッファサイズ パラメータのセクションをご覧ください。
アプリケーションは、xrCreateSpatialEntityFromIdEXT で entityIds を使用して、定期的な更新を取得するエンティティの XrSpatialEntityEXT ハンドルを作成できます。アプリケーションは、これらの XrSpatialEntityEXT ハンドルを xrCreateSpatialUpdateSnapshotEXT とともに使用して、提供されたエンティティのコンポーネントに関するランタイムの最新の既知のデータを含む更新スナップショットを作成できます。
有効な使用方法(暗黙的)
-
XR_EXT_spatial_entity拡張機能は、XrSpatialComponentDataQueryResultEXT を使用する前に有効にする必要があります。 -
typeはXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXTにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタである必要があります。関連情報: XrSpatialComponentAnchorListEXT、XrSpatialComponentAnnotationQuadListANDROID、XrSpatialComponentBounded2DListEXT、XrSpatialComponentBounded3DListEXT、XrSpatialComponentConfidenceListANDROIDSYS、XrSpatialComponentImage2DListEXT、XrSpatialComponentKeyboardSemanticLabelListEXT、XrSpatialComponentMarkerListEXT、XrSpatialComponentMaterialTypeListANDROIDSYS、XrSpatialComponentMesh2DListEXT、XrSpatialComponentMesh3DListEXT、XrSpatialComponentMesh3DNormalsListEXT、XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT、XrSpatialComponentMesh3DVertexSemanticLabelsListEXT、XrSpatialComponentMouseSemanticLabelListEXT、XrSpatialComponentObjectSemanticLabelListANDROID、XrSpatialComponentObjectSemanticLabelListEXT、XrSpatialComponentOccupancyGridListANDROIDX1、XrSpatialComponentParentListEXT、XrSpatialComponentPersistenceListEXT、XrSpatialComponentPersistenceScopesListANDROIDX1、XrSpatialComponentPlaneAlignmentListEXT、XrSpatialComponentPlaneSemanticLabelListEXT、XrSpatialComponentPolygon2DListEXT、XrSpatialComponentRaycastResultListANDROID、XrSpatialComponentRoomEmptinessListANDROIDSYS、XrSpatialComponentRoomListANDROIDSYS、XrSpatialComponentStreetscapeGeometryMetadataListANDROIDX2、XrSpatialComponentSubsumedByListANDROID -
entityIdCapacityInputが0でない場合、entityIdsはentityIdCapacityInputXrSpatialEntityIdEXT値の配列へのポインタでなければなりません。 -
entityStateCapacityInputが0でない場合、entityStatesはentityStateCapacityInputXrSpatialEntityTrackingStateEXT 値の配列へのポインタでなければなりません
typedef enum XrSpatialEntityTrackingStateEXT {
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT = 1,
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT = 2,
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT = 3,
XR_SPATIAL_ENTITY_TRACKING_STATE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialEntityTrackingStateEXT;
XrSpatialEntityTrackingStateEXT は、考えられる空間エンティティのトラッキング状態を列挙します。
列挙型の意味は次のとおりです。
列挙型の説明
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT
ランタイムはこのエンティティのトラッキングを停止しており、トラッキングを再開することはありません。
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT
ランタイムはこのエンティティのトラッキングを一時停止していますが、今後トラッキングを再開する可能性があります。
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT
ランタイムは現在このエンティティをトラッキングしており、そのコンポーネント データは有効です。
トラッキング
一時停止
停止
図 23. XrSpatialEntityTrackingStateEXT
- ランタイムは、空間エンティティのトラッキングを一時停止しても、将来的にトラッキングを再開する可能性がある場合は、空間エンティティの状態を
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTからXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTに変更することがあります。ランタイムがこれを行う可能性がある例としては、アプリケーションが入力フォーカスを失った場合、指定された空間エンティティがユーザーから遠すぎて正確に追跡できない場合、追跡されているエンティティが多すぎてランタイムが追跡のコストを削減したい場合などがあります(ただし、これらに限定されません)。XrSpatialEntityTrackingStateEXT は、アプリが各ランタイムの異なるトラッキング ポリシーから自身を分離するのに役立ちます。 - ランタイムは、エンティティの状態を
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTからXR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTまたはXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXTに変更してもよい。 - ランタイムは、空間エンティティが失われ、そのトラッキングが復元または再開されない場合、空間エンティティの状態を
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTまたはXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTからXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXTに変更しなければなりません。このようなケースの例としては、デバイスがトラッキングを失い、トラッキング セッションを再開したものの、環境内で再ローカライズできないため、このトラッキング セッションで検出されたエンティティを新しいエンティティとして扱う場合が挙げられます。 - エンティティのトラッキング状態が
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXTに設定されたら、ランタイムは他の状態に変更してはなりません。 - xrQuerySpatialComponentDataEXT を使用して空間エンティティのコンポーネント データをクエリする場合、エンティティの状態が
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTであれば、ランタイムは XrSpatialComponentDataQueryResultEXT の次のチェーンでアプリから提供されたバッファの内容に有効なデータを設定しなければなりません。エンティティの状態がXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXTまたはXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTの場合、ランタイムはバッファの内容を変更してはなりません。
コンポーネント データの 2 回呼び出しイディオム
XrSpatialBufferEXT 構造体は次のように定義されます。
typedef struct XrSpatialBufferEXT {
XrSpatialBufferIdEXT bufferId;
XrSpatialBufferTypeEXT bufferType;
} XrSpatialBufferEXT;
メンバーの説明
bufferId: バッファデータのXrSpatialBufferIdEXT。bufferTypeは、bufferId内のデータの種類を示す XrSpatialBufferTypeEXT です。アプリケーションは、bufferTypeを使用して、バッファの実際のデータを取得するために使用する関数を決定できます。
一部の空間コンポーネントには可変サイズのデータがあるため、データを取得するには 2 回呼び出しのイディオムを使用する必要があります。このような場合、空間コンポーネントのデータ構造は、そのコンポーネントのデータに必要な可変サイズのバッファごとに XrSpatialBufferEXT を提供します。
同じ bufferId の場合、ランタイムは、1 つのスナップショットから別のスナップショットにわたる場合でも、1 つのコンポーネント データクエリから別のコンポーネント データクエリに同じデータを提供する必要があります。コンポーネント データクエリ呼び出し間で bufferId が異なる場合、そのコンポーネントのデータが変更された可能性があることをアプリに示します。
有効な使用方法(暗黙的)
- XrSpatialBufferEXT を使用する前に、
XR_EXT_spatial_entity拡張機能を有効にする必要があります。 -
bufferTypeは、有効な XrSpatialBufferTypeEXT 値でなければなりません。
XR_DEFINE_ATOM(XrSpatialBufferIdEXT)
XrSpatialBufferIdEXT は、空間コンポーネントのあらゆる種類の可変サイズデータを表すために使用されます。
ランタイムは、少なくとも を含む XrSpatialSnapshotEXT のライフサイクル中は、XrSpatialBufferIdEXT とそのデータをメモリに保持しなければなりません。XrSpatialSnapshotEXT のライフサイクルよりも長く、ランタイムが XrSpatialBufferIdEXT とそのデータをメモリに保持する場合があります。これは、後でアプリによって作成されるスナップショットの一部として同じ ID を返すためです。同じ XrSpatialBufferIdEXT に対して、ランタイムは常に適切な xrGetSpatialBuffer* 関数を介して同じデータを返さなければなりません。
typedef enum XrSpatialBufferTypeEXT {
XR_SPATIAL_BUFFER_TYPE_UNKNOWN_EXT = 0,
XR_SPATIAL_BUFFER_TYPE_STRING_EXT = 1,
XR_SPATIAL_BUFFER_TYPE_UINT8_EXT = 2,
XR_SPATIAL_BUFFER_TYPE_UINT16_EXT = 3,
XR_SPATIAL_BUFFER_TYPE_UINT32_EXT = 4,
XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT = 5,
XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT = 6,
XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT = 7,
XR_SPATIAL_BUFFER_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialBufferTypeEXT;
XrSpatialBufferTypeEXT 列挙型は、XrSpatialBufferIdEXT で表されるバッファのさまざまなデータ型を識別します。
列挙子の説明
XR_SPATIAL_BUFFER_TYPE_STRING_EXT.XrSpatialBufferIdEXTは xrGetSpatialBufferStringEXT に渡すことができます。これにより、文字列バッファを取得できます。XR_SPATIAL_BUFFER_TYPE_UINT8_EXT.XrSpatialBufferIdEXTは xrGetSpatialBufferUint8EXT に渡してuint8_tバッファを取得できます。XR_SPATIAL_BUFFER_TYPE_UINT16_EXT.XrSpatialBufferIdEXTは xrGetSpatialBufferUint16EXT に渡してuint16_tバッファを取得できます。XR_SPATIAL_BUFFER_TYPE_UINT32_EXT.XrSpatialBufferIdEXTは xrGetSpatialBufferUint32EXT に渡してuint32_tバッファを取得できます。XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT.XrSpatialBufferIdEXTは、xrGetSpatialBufferFloatEXT に渡してfloatバッファを取得できます。XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT.XrSpatialBufferIdEXTは xrGetSpatialBufferVector2fEXT に渡して XrVector2f バッファを取得できます。XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT.XrSpatialBufferIdEXTは xrGetSpatialBufferVector3fEXT に渡して XrVector3f バッファを取得できます。
xrGetSpatialBufferStringEXT 関数は次のように定義されます。
XrResult xrGetSpatialBufferStringEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
char* buffer);
パラメータの説明
snapshotは XrSpatialSnapshotEXT へのハンドルです。infoには、クエリ対象のバッファに関する情報が保持されます。bufferCapacityInputは配列の容量です。0 の場合は、必要な容量を取得するリクエストであることを示します。bufferCountOutputは文字数、またはbufferCapacityInputが不十分な場合に必要となる容量です。bufferはcharの配列です。bufferCapacityInputが 0 の場合、NULLになることがあります。- 必要な
bufferサイズの取得の詳細については、バッファサイズ パラメータのセクションをご覧ください。
アプリケーションは、xrGetSpatialBufferStringEXT を使用して、コンポーネントによって提供される XrSpatialBufferEXT のデータを取得できます。ここで、XrSpatialBufferEXT :: bufferType は XR_SPATIAL_BUFFER_TYPE_STRING_EXT です。
XrSpatialBufferGetInfoEXT :: bufferId の XrSpatialBufferTypeEXT が XR_SPATIAL_BUFFER_TYPE_STRING_EXT でない場合、ランタイムは XR_ERROR_VALIDATION_FAILURE を返さなければなりません。
XrSpatialBufferGetInfoEXT :: bufferId が snapshot に属していない場合、ランタイムは XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT を返さなければなりません。
ランタイムによって入力される buffer は、null で終わる UTF-8 文字列である必要があります。
有効な使用方法(暗黙的)
- xrGetSpatialBufferStringEXT を呼び出す前に、
XR_EXT_spatial_entity拡張機能を有効にしなければなりません。 -
snapshotは有効な XrSpatialSnapshotEXT ハンドルでなければなりません -
infoは、有効な XrSpatialBufferGetInfoEXT 構造体へのポインタでなければなりません -
bufferCountOutputはuint32_t値へのポインタでなければなりません -
bufferCapacityInputが0でない場合、bufferはbufferCapacityInputの char 値の配列へのポインタでなければなりません。
戻りコード
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
xrGetSpatialBufferUint8EXT 関数は次のように定義されます。
XrResult xrGetSpatialBufferUint8EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint8_t* buffer);
パラメータの説明
snapshotは XrSpatialSnapshotEXT へのハンドルです。infoには、クエリ対象のバッファに関する情報が保持されます。bufferCapacityInputは配列の容量です。0 の場合は、必要な容量を取得するリクエストであることを示します。bufferCountOutputは、buffer配列内の要素数、またはbufferCapacityInputが不十分な場合に必要となる容量です。bufferはuint8_tの配列です。bufferCapacityInputが 0 の場合、NULLになることがあります。- 必要な
bufferサイズの取得の詳細については、バッファサイズ パラメータのセクションをご覧ください。
アプリケーションは、コンポーネントによって提供される XrSpatialBufferEXT のデータを取得できます。ここで、XrSpatialBufferEXT :: bufferType は、xrGetSpatialBufferUint8EXT を使用して XR_SPATIAL_BUFFER_TYPE_UINT8_EXT になります。
XrSpatialBufferGetInfoEXT :: bufferId の XrSpatialBufferTypeEXT が XR_SPATIAL_BUFFER_TYPE_UINT8_EXT でない場合、ランタイムは XR_ERROR_VALIDATION_FAILURE を返さなければなりません。
XrSpatialBufferGetInfoEXT :: bufferId が snapshot に属していない場合、ランタイムは XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT を返さなければなりません。
有効な使用方法(暗黙的)
-
XR_EXT_spatial_entity拡張機能は、xrGetSpatialBufferUint8EXT を呼び出す前に有効にする必要があります。 -
snapshotは有効な XrSpatialSnapshotEXT ハンドルでなければなりません -
infoは、有効な XrSpatialBufferGetInfoEXT 構造体へのポインタでなければなりません -
bufferCountOutputはuint32_t値へのポインタでなければなりません -
bufferCapacityInputが0でない場合、bufferはbufferCapacityInputuint8_t値の配列へのポインタでなければなりません。
戻りコード
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
xrGetSpatialBufferUint16EXT 関数は次のように定義されます。
XrResult xrGetSpatialBufferUint16EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint16_t* buffer);
パラメータの説明
snapshotは XrSpatialSnapshotEXT へのハンドルです。infoには、クエリ対象のバッファに関する情報が保持されます。bufferCapacityInputは配列の容量です。0 の場合は、必要な容量を取得するリクエストであることを示します。bufferCountOutputは、buffer配列内の要素数、またはbufferCapacityInputが不十分な場合に必要となる容量です。bufferはuint16_tの配列です。bufferCapacityInputが 0 の場合、NULLになることがあります。- 必要な
bufferサイズの取得の詳細については、バッファサイズ パラメータのセクションをご覧ください。
アプリケーションは、xrGetSpatialBufferUint16EXT を使用して、コンポーネントによって提供される XrSpatialBufferEXT のデータを取得できます。ここで、XrSpatialBufferEXT :: bufferType は XR_SPATIAL_BUFFER_TYPE_UINT16_EXT です。
XrSpatialBufferGetInfoEXT :: bufferId の XrSpatialBufferTypeEXT が XR_SPATIAL_BUFFER_TYPE_UINT16_EXT でない場合、ランタイムは XR_ERROR_VALIDATION_FAILURE を返さなければなりません。
XrSpatialBufferGetInfoEXT :: bufferId が snapshot に属していない場合、ランタイムは XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT を返さなければなりません。
有効な使用方法(暗黙的)
- xrGetSpatialBufferUint16EXT を呼び出す前に、
XR_EXT_spatial_entity拡張機能を有効にする必要があります。 -
snapshotは有効な XrSpatialSnapshotEXT ハンドルでなければなりません -
infoは、有効な XrSpatialBufferGetInfoEXT 構造体へのポインタでなければなりません -
bufferCountOutputはuint32_t値へのポインタでなければなりません -
bufferCapacityInputが0でない場合、bufferはbufferCapacityInputuint16_t値の配列へのポインタでなければなりません。
戻りコード
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
xrGetSpatialBufferUint32EXT 関数は次のように定義されます。
XrResult xrGetSpatialBufferUint32EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint32_t* buffer);
パラメータの説明
snapshotは XrSpatialSnapshotEXT へのハンドルです。infoには、クエリ対象のバッファに関する情報が保持されます。bufferCapacityInputは配列の容量です。0 の場合は、必要な容量を取得するリクエストであることを示します。bufferCountOutputは、buffer配列内の要素数、またはbufferCapacityInputが不十分な場合に必要となる容量です。bufferはuint32_tの配列です。bufferCapacityInputが 0 の場合、NULLになることがあります。- 必要な
bufferサイズの取得の詳細については、バッファサイズ パラメータのセクションをご覧ください。
アプリケーションは、xrGetSpatialBufferUint32EXT を使用して、コンポーネントによって提供される XrSpatialBufferEXT のデータを取得できます。ここで、XrSpatialBufferEXT :: bufferType は XR_SPATIAL_BUFFER_TYPE_UINT32_EXT です。
XrSpatialBufferGetInfoEXT :: bufferId の XrSpatialBufferTypeEXT が XR_SPATIAL_BUFFER_TYPE_UINT32_EXT でない場合、ランタイムは XR_ERROR_VALIDATION_FAILURE を返さなければなりません。
XrSpatialBufferGetInfoEXT :: bufferId が snapshot に属していない場合、ランタイムは XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT を返さなければなりません。
有効な使用方法(暗黙的)
- xrGetSpatialBufferUint32EXT を呼び出す前に、
XR_EXT_spatial_entity拡張機能を有効にする必要があります。 -
snapshotは有効な XrSpatialSnapshotEXT ハンドルでなければなりません -
infoは、有効な XrSpatialBufferGetInfoEXT 構造体へのポインタでなければなりません -
bufferCountOutputはuint32_t値へのポインタでなければなりません -
bufferCapacityInputが0でない場合、bufferはbufferCapacityInputuint32_t値の配列へのポインタでなければなりません。
戻りコード
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
xrGetSpatialBufferFloatEXT 関数は次のように定義されます。
XrResult xrGetSpatialBufferFloatEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
float* buffer);
パラメータの説明
snapshotは XrSpatialSnapshotEXT へのハンドルです。infoには、クエリ対象のバッファに関する情報が保持されます。bufferCapacityInputは配列の容量です。0 の場合は、必要な容量を取得するリクエストであることを示します。bufferCountOutputは、buffer配列内の要素数、またはbufferCapacityInputが不十分な場合に必要となる容量です。bufferはfloatの配列です。bufferCapacityInputが 0 の場合、NULLになることがあります。- 必要な
bufferサイズの取得の詳細については、バッファサイズ パラメータのセクションをご覧ください。
アプリケーションは、コンポーネントによって提供される XrSpatialBufferEXT のデータを取得できます。ここで、XrSpatialBufferEXT :: bufferType は、xrGetSpatialBufferFloatEXT を使用して XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT になります。
XrSpatialBufferGetInfoEXT :: bufferId の XrSpatialBufferTypeEXT が XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT でない場合、ランタイムは XR_ERROR_VALIDATION_FAILURE を返さなければなりません。
XrSpatialBufferGetInfoEXT :: bufferId が snapshot に属していない場合、ランタイムは XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT を返さなければなりません。
有効な使用方法(暗黙的)
- xrGetSpatialBufferFloatEXT を呼び出す前に、
XR_EXT_spatial_entity拡張機能を有効にする必要があります。 -
snapshotは有効な XrSpatialSnapshotEXT ハンドルでなければなりません -
infoは、有効な XrSpatialBufferGetInfoEXT 構造体へのポインタでなければなりません -
bufferCountOutputはuint32_t値へのポインタでなければなりません -
bufferCapacityInputが0でない場合、bufferはbufferCapacityInputfloat値の配列へのポインタでなければなりません。
戻りコード
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
xrGetSpatialBufferVector2fEXT 関数は次のように定義されます。
XrResult xrGetSpatialBufferVector2fEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
XrVector2f* buffer);
パラメータの説明
snapshotは XrSpatialSnapshotEXT へのハンドルです。infoには、クエリ対象のバッファに関する情報が保持されます。bufferCapacityInputは配列の容量です。0 の場合は、必要な容量を取得するリクエストであることを示します。bufferCountOutputは、buffer配列内の要素数、またはbufferCapacityInputが不十分な場合に必要となる容量です。bufferは XrVector2f の配列です。bufferCapacityInputが 0 の場合、NULLになることがあります。- 必要な
bufferサイズの取得の詳細については、バッファサイズ パラメータのセクションをご覧ください。
アプリケーションは、xrGetSpatialBufferVector2fEXT を使用して、コンポーネントによって提供される XrSpatialBufferEXT のデータを取得できます。ここで、XrSpatialBufferEXT :: bufferType は XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT です。
XrSpatialBufferGetInfoEXT :: bufferId の XrSpatialBufferTypeEXT が XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT でない場合、ランタイムは XR_ERROR_VALIDATION_FAILURE を返さなければなりません。
XrSpatialBufferGetInfoEXT :: bufferId が snapshot に属していない場合、ランタイムは XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT を返さなければなりません。
有効な使用方法(暗黙的)
- xrGetSpatialBufferVector2fEXT を呼び出す前に、
XR_EXT_spatial_entity拡張機能を有効にする必要があります。 -
snapshotは有効な XrSpatialSnapshotEXT ハンドルでなければなりません -
infoは、有効な XrSpatialBufferGetInfoEXT 構造体へのポインタでなければなりません -
bufferCountOutputはuint32_t値へのポインタでなければなりません -
bufferCapacityInputが0でない場合、bufferはbufferCapacityInputXrVector2f 構造体の配列へのポインタでなければなりません。
戻りコード
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
xrGetSpatialBufferVector3fEXT 関数は次のように定義されます。
XrResult xrGetSpatialBufferVector3fEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
XrVector3f* buffer);
パラメータの説明
snapshotは XrSpatialSnapshotEXT へのハンドルです。infoには、クエリ対象のバッファに関する情報が保持されます。bufferCapacityInputは配列の容量です。0 の場合は、必要な容量を取得するリクエストであることを示します。bufferCountOutputは、buffer配列内の要素数、またはbufferCapacityInputが不十分な場合に必要となる容量です。bufferは XrVector3f の配列です。bufferCapacityInputが 0 の場合、NULLになることがあります。- 必要な
bufferサイズの取得の詳細については、バッファサイズ パラメータのセクションをご覧ください。
アプリケーションは、xrGetSpatialBufferVector3fEXT を使用して、コンポーネントによって提供される XrSpatialBufferEXT のデータを取得できます。ここで、XrSpatialBufferEXT :: bufferType は XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT です。
XrSpatialBufferGetInfoEXT :: bufferId の XrSpatialBufferTypeEXT が XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT でない場合、ランタイムは XR_ERROR_VALIDATION_FAILURE を返さなければなりません。
XrSpatialBufferGetInfoEXT :: bufferId が snapshot に属していない場合、ランタイムは XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT を返さなければなりません。
有効な使用方法(暗黙的)
-
XR_EXT_spatial_entity拡張機能は、xrGetSpatialBufferVector3fEXT を呼び出す前に有効にする必要があります。 -
snapshotは有効な XrSpatialSnapshotEXT ハンドルでなければなりません -
infoは、有効な XrSpatialBufferGetInfoEXT 構造体へのポインタでなければなりません -
bufferCountOutputはuint32_t値へのポインタでなければなりません -
bufferCapacityInputが0でない場合、bufferはbufferCapacityInputXrVector3f 構造体の配列へのポインタでなければなりません。
戻りコード
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
XrSpatialBufferGetInfoEXT 構造体は次のように定義されます。
typedef struct XrSpatialBufferGetInfoEXT {
XrStructureType type;
const void* next;
XrSpatialBufferIdEXT bufferId;
} XrSpatialBufferGetInfoEXT;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。bufferId: データを取得するバッファのXrSpatialBufferIdEXT。
有効な使用方法(暗黙的)
-
XR_EXT_spatial_entity拡張機能は、XrSpatialBufferGetInfoEXT を使用する前に有効にする必要があります。 -
typeはXR_TYPE_SPATIAL_BUFFER_GET_INFO_EXTにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタでなければなりません。
#define XR_NULL_SPATIAL_BUFFER_ID_EXT 0
XR_NULL_SPATIAL_BUFFER_ID_EXT は、無効な XrSpatialBufferIdEXT を表す予約値です。API 関数に渡したり、API 関数から返したりできるのは、明示的に許可されている場合に限られます。
更新スナップショットを作成する
xrCreateSpatialUpdateSnapshotEXT 関数は次のように定義されます。
XrResult xrCreateSpatialUpdateSnapshotEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialUpdateSnapshotCreateInfoEXT* createInfo,
XrSpatialSnapshotEXT* snapshot);
パラメータの説明
spatialContextは、以前に xrCreateSpatialContextAsyncEXT を使用して作成された XrSpatialContextEXT です。createInfoは、XrSpatialUpdateSnapshotCreateInfoEXT へのポインタです。snapshotは、結果 XrSpatialSnapshotEXT へのポインタです。
アプリケーションは、xrCreateSpatialUpdateSnapshotEXT を使用してスナップショットを作成し、ランタイムが認識している特定のエンティティの最新のコンポーネント データを取得できます。アプリは、スナップショットの作成時に、XrSpatialEntityEXT ハンドルと、関心のあるコンポーネント タイプを提供できます。
アプリケーションは、XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes を使用して、スナップショットに含める必要があるデータのコンポーネントのリストをフィルタできます。アプリケーションが XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes で空間コンポーネント タイプの有効なリストを提供する場合、ランタイムは、XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes で提供されるコンポーネントを少なくとも 1 つ持つ空間エンティティのみをスナップショットに含める必要があります。また、ランタイムには、スナップショット内のコンポーネントのデータのみを含める必要があります。
spatialContext の作成時に XrSpatialContextCreateInfoEXT :: capabilityConfigs に渡された空間機能に対して XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes の XrSpatialComponentTypeEXT のいずれかが有効になっていない場合、ランタイムは XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT を返す必要があります。
アプリケーションが XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes で空間コンポーネント タイプのリストを提供しない場合、ランタイムは、XrSpatialUpdateSnapshotCreateInfoEXT :: entities にリストされているすべての空間エンティティをスナップショットに含め、spatialContext 用に構成された機能の有効なすべてのコンポーネントのデータを含めなければなりません。
ランタイムは、snapshot の XrSpatialUpdateSnapshotCreateInfoEXT :: entities に記載されていない空間エンティティを含めてはなりません。
アプリケーションは、必要な数のスナップショットを作成できますが、新しいスナップショットごとに割り当てられるメモリに注意する必要があります。また、スナップショットが不要になったら破棄する必要があります。
有効な使用方法(暗黙的)
-
XR_EXT_spatial_entity拡張機能は、xrCreateSpatialUpdateSnapshotEXT を呼び出す前に有効にする必要があります。 -
spatialContextは有効な XrSpatialContextEXT ハンドルでなければなりません -
createInfoは、有効な XrSpatialUpdateSnapshotCreateInfoEXT 構造体へのポインタでなければなりません -
snapshotは、XrSpatialSnapshotEXT ハンドルへのポインタでなければ
戻りコード
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_COMPONENT_NOT_ENABLED_EXTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
XrSpatialUpdateSnapshotCreateInfoEXT 構造体は次のように定義されます。
typedef struct XrSpatialUpdateSnapshotCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t entityCount;
const XrSpatialEntityEXT* entities;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
XrSpace baseSpace;
XrTime time;
} XrSpatialUpdateSnapshotCreateInfoEXT;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。このような構造体は、コア OpenXR またはこの拡張機能では定義されていません。entityCountは、entities配列内の要素の数を表すuint32_tです。entitiesは XrSpatialEntityEXT の配列です。ランタイムは、スナップショットにコンポーネント データを含める必要があります。componentTypeCountは、componentTypes配列内の要素の数を表すuint32_tです。componentTypesは XrSpatialComponentTypeEXT の配列です。ランタイムは、この配列のデータをスナップショットに含める必要があります。baseSpaceは、更新 XrSpatialSnapshotEXT のすべての位置が配置される XrSpace です。timeは、更新 XrSpatialSnapshotEXT のすべての位置が配置されるXrTimeです。
有効な使用方法(暗黙的)
-
XR_EXT_spatial_entity拡張機能は、XrSpatialUpdateSnapshotCreateInfoEXT を使用する前に有効にしなければなりません。 -
typeはXR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXTにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタでなければなりません。 -
entitiesは、entityCount個の有効な XrSpatialEntityEXT ハンドルの配列へのポインタでなければなりません -
componentTypeCountが0でない場合、componentTypesはcomponentTypeCountの有効な XrSpatialComponentTypeEXT 値の配列へのポインタでなければなりません。 -
baseSpaceは有効な XrSpace ハンドルでなければなりません -
entityCountパラメータは0より大きい値にする必要があります。 -
baseSpaceとentitiesの要素は、同じ XrSession から作成、割り当て、または取得されている必要があります。
スナップショットを破棄する
xrDestroySpatialSnapshotEXT 関数は次のように定義されます。
XrResult xrDestroySpatialSnapshotEXT(
XrSpatialSnapshotEXT snapshot);
パラメータの説明
snapshotは、以前に xrCreateSpatialDiscoverySnapshotCompleteEXT または xrCreateSpatialUpdateSnapshotEXT によって提供された XrSpatialSnapshotEXT です。
アプリは、xrDestroySpatialSnapshotEXT を呼び出して、XrSpatialSnapshotEXT ハンドルとそれに関連付けられたリソースを破棄できます。
有効な使用方法(暗黙的)
- xrDestroySpatialSnapshotEXT を呼び出す前に、
XR_EXT_spatial_entity拡張機能を有効にする必要があります。 -
snapshotは有効な XrSpatialSnapshotEXT ハンドルでなければなりません
スレッドセーフ
snapshotとその子ハンドルへのアクセスは、外部で同期する必要があります。
戻りコード
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
共通コンポーネント
境界付き 2D
コンポーネント データ
XrSpatialBounded2DDataEXT 構造体は次のように定義されます。
typedef struct XrSpatialBounded2DDataEXT {
XrPosef center;
XrExtent2Df extents;
} XrSpatialBounded2DDataEXT;
メンバーの説明
centerは、境界付き 2D コンポーネントの幾何学的中心を定義する XrPosef です。extentsは、centerを中心とする、x 軸(extents.width)と y 軸(extents.height)に沿った境界付き 2D コンポーネントの範囲です。
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT の extents は、平面の座標系の x-y 平面におけるエンティティのサイズを指します。位置が {0, 0, 0}、回転が {0, 0, 0, 1}(回転なし)、範囲が {1, 1} の平面は、{0, 0, 0} を中心とする 1 m x 1 m の平面を指し、その前面の法線ベクトルはコンポーネントの空間で +Z 方向を指します。
X X Y Y Z Z 高さ 高さ Y Y Z Z X X 垂直面 垂直面 水平面 水平面 幅 幅 幅 幅 高さ 高さ
図 24. Bounded2D コンポーネントの座標系
注
OpenXR は、+Z を平面法線とする X-Y 平面を使用しますが、他の API は +Y を平面法線とする X-Z 平面を使用する場合があります。X-Y 平面は、+X 軸を中心に -π/2 ラジアン回転させることで、X-Z 平面に変換できます。
有効な使用方法(暗黙的)
- XrSpatialBounded2DDataEXT を使用する前に、
XR_EXT_spatial_entity拡張機能を有効にしなければなりません。
データをクエリするコンポーネント リストの構造
XrSpatialComponentBounded2DListEXT 構造体は次のように定義されます。
typedef struct XrSpatialComponentBounded2DListEXT {
XrStructureType type;
void* next;
uint32_t boundCount;
XrSpatialBounded2DDataEXT* bounds;
} XrSpatialComponentBounded2DListEXT;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。このような構造体は、コア OpenXR またはこの拡張機能では定義されていません。boundCountは、bounds配列内の要素の数を表すuint32_tです。boundsは XrSpatialBounded2DDataEXT の配列です。
XrSpatialComponentBounded2DListEXT が XrSpatialComponentDataQueryResultEXT :: next の次のチェーンにあり、XrSpatialComponentDataQueryConditionEXT ::componentTypeCount がゼロではなく、XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT が XrSpatialComponentDataQueryConditionEXT :: componentTypes に含まれていない場合、ランタイムは xrQuerySpatialComponentDataEXT から XR_ERROR_VALIDATION_FAILURE を返さなければなりません。
boundCount が XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput より小さい場合、ランタイムは xrQuerySpatialComponentDataEXT から XR_ERROR_SIZE_INSUFFICIENT を返さなければなりません。
xrQuerySpatialComponentDataEXT :: snapshot が xrCreateSpatialDiscoverySnapshotCompleteEXT から作成された場合、ランタイムは XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace と XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time で XrSpatialBounded2DDataEXT :: center を提供しなければなりません。
xrQuerySpatialComponentDataEXT :: snapshot が xrCreateSpatialUpdateSnapshotEXT から作成された場合、ランタイムは XrSpatialBounded2DDataEXT :: center を XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace と XrSpatialUpdateSnapshotCreateInfoEXT :: time で提供しなければなりません。
有効な使用方法(暗黙的)
- XrSpatialComponentBounded2DListEXT を使用する前に、
XR_EXT_spatial_entity拡張機能を有効にしなければなりません。 -
typeはXR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXTにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタでなければなりません。 -
boundsは、boundCountXrSpatialBounded2DDataEXT 構造の配列へのポインタでなければなりません。 -
boundCountパラメータは0より大きい値にする必要があります。
構成
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT が、ある機能の XrSpatialCapabilityComponentTypesEXT :: componentTypes で列挙されている場合、アプリは、XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents リストに列挙値を含めることで、その機能を有効にできます。このコンポーネントでは、XrSpatialCapabilityConfigurationBaseHeaderEXT の次のチェーンに含めるための特別な構成は必要ありません。
境界付き 3D
コンポーネント データ
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT は、データに XrBoxf を使用します。
データをクエリするコンポーネント リストの構造
XrSpatialComponentBounded3DListEXT 構造体は次のように定義されます。
typedef struct XrSpatialComponentBounded3DListEXT {
XrStructureType type;
void* next;
uint32_t boundCount;
XrBoxf* bounds;
} XrSpatialComponentBounded3DListEXT;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。このような構造体は、コア OpenXR またはこの拡張機能では定義されていません。boundCountは、bounds配列内の要素の数を表すuint32_tです。boundsは XrBoxf の配列です。
XrSpatialComponentBounded3DListEXT が XrSpatialComponentDataQueryResultEXT :: next の次のチェーンにあり、XrSpatialComponentDataQueryConditionEXT ::componentTypeCount がゼロではなく、XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT が XrSpatialComponentDataQueryConditionEXT :: componentTypes に含まれていない場合、ランタイムは xrQuerySpatialComponentDataEXT から XR_ERROR_VALIDATION_FAILURE を返さなければなりません。
boundCount が XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput より小さい場合、ランタイムは xrQuerySpatialComponentDataEXT から XR_ERROR_SIZE_INSUFFICIENT を返さなければなりません。
xrQuerySpatialComponentDataEXT :: snapshot が xrCreateSpatialDiscoverySnapshotCompleteEXT から作成された場合、ランタイムは XrBoxf :: center を XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace の XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time に提供しなければなりません。
xrQuerySpatialComponentDataEXT :: snapshot が xrCreateSpatialUpdateSnapshotEXT から作成された場合、ランタイムは XrBoxf :: center を XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace の XrSpatialUpdateSnapshotCreateInfoEXT :: time に提供しなければなりません。
有効な使用方法(暗黙的)
- XrSpatialComponentBounded3DListEXT を使用する前に、
XR_EXT_spatial_entity拡張機能を有効にしなければなりません。 -
typeはXR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXTにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタでなければなりません。 -
boundsは、boundCountXrBoxf 構造の配列へのポインタでなければなりません。 -
boundCountパラメータは0より大きい値にする必要があります。
構成
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT が XrSpatialCapabilityComponentTypesEXT :: componentTypes で列挙されている場合、アプリは XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents リストに列挙型を含めることで、その機能を有効にできます。このコンポーネントでは、XrSpatialCapabilityConfigurationBaseHeaderEXT の次のチェーンに含めるための特別な構成は必要ありません。
親
コンポーネント データ
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT はデータに XrSpatialEntityIdEXT を使用します。
データをクエリするコンポーネント リストの構造
XrSpatialComponentParentListEXT 構造体は次のように定義されます。
typedef struct XrSpatialComponentParentListEXT {
XrStructureType type;
void* next;
uint32_t parentCount;
XrSpatialEntityIdEXT* parents;
} XrSpatialComponentParentListEXT;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。このような構造体は、コア OpenXR またはこの拡張機能では定義されていません。parentCountは、parents配列内の要素の数を表すuint32_tです。parentsはXrSpatialEntityIdEXTの配列です。
XrSpatialComponentParentListEXT が XrSpatialComponentDataQueryResultEXT :: next の次のチェーンにあり、XrSpatialComponentDataQueryConditionEXT ::componentTypeCount がゼロではなく、XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT が XrSpatialComponentDataQueryConditionEXT :: componentTypes に含まれていない場合、ランタイムは xrQuerySpatialComponentDataEXT から XR_ERROR_VALIDATION_FAILURE を返さなければなりません。
parentCount が XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput より小さい場合、ランタイムは xrQuerySpatialComponentDataEXT から XR_ERROR_SIZE_INSUFFICIENT を返さなければなりません。
有効な使用方法(暗黙的)
- XrSpatialComponentParentListEXT を使用する前に、
XR_EXT_spatial_entity拡張機能を有効にする必要があります。 -
typeはXR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXTにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタでなければなりません。 -
parentsは、parentCountXrSpatialEntityIdEXT値の配列へのポインタでなければなりません -
parentCountパラメータは0より大きい値にする必要があります。
構成
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT が XrSpatialCapabilityComponentTypesEXT :: componentTypes で列挙されている場合、アプリは XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents リストに列挙型を含めることで、その機能を有効にできます。このコンポーネントでは、XrSpatialCapabilityConfigurationBaseHeaderEXT の次のチェーンに含めるための特別な構成は必要ありません。
メッシュ 3D
コンポーネント データ
XrSpatialMeshDataEXT 構造体は次のように定義されます。
typedef struct XrSpatialMeshDataEXT {
XrPosef origin;
XrSpatialBufferEXT vertexBuffer;
XrSpatialBufferEXT indexBuffer;
} XrSpatialMeshDataEXT;
メンバーの説明
originは、メッシュの原点を定義する XrPosef です。メッシュのすべての頂点は、この原点からの相対位置にする必要があります。vertexBufferは XrSpatialBufferEXT で、このコンポーネントが配置されているエンティティの頂点バッファを表すバッファの ID を提供します。頂点の位置はoriginを基準とする必要があります。indexBufferは XrSpatialBufferEXT で、三角形インデックスの配列を表すバッファの ID を提供し、vertexBuffer内のメッシュ頂点のインデックスを指定します。三角形のインデックスは反時計回りの順序で返す必要があります。3 つのインデックスが 1 つの三角形を表します。
XrSpatialMeshDataEXT を使用するコンポーネント タイプは、vertexBuffer と indexBuffer の XrSpatialBufferTypeEXT を指定しなければなりません。
有効な使用方法(暗黙的)
- XrSpatialMeshDataEXT を使用する前に、
XR_EXT_spatial_entity拡張機能を有効にする必要があります。 -
vertexBufferは、有効な XrSpatialBufferEXT 構造体でなければなりません。 -
indexBufferは、有効な XrSpatialBufferEXT 構造体でなければなりません。
データをクエリするコンポーネント リストの構造
XrSpatialComponentMesh3DListEXT 構造体は次のように定義されます。
typedef struct XrSpatialComponentMesh3DListEXT {
XrStructureType type;
void* next;
uint32_t meshCount;
XrSpatialMeshDataEXT* meshes;
} XrSpatialComponentMesh3DListEXT;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。meshCountは、meshes配列内の要素の数を表すuint32_tです。meshesは XrSpatialMeshDataEXT の配列です。
アプリは、XrSpatialComponentDataQueryConditionEXT :: componentTypes に XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT を追加し、XrSpatialComponentDataQueryResultEXT の次のポインタ チェーンに XrSpatialComponentMesh3DListEXT を追加することで、XrSpatialSnapshotEXT 内の空間エンティティのメッシュ 3D コンポーネントをクエリできます。
XrSpatialComponentMesh3DListEXT が XrSpatialComponentDataQueryResultEXT :: next の次のチェーンにあり、XrSpatialComponentDataQueryConditionEXT ::componentTypeCount がゼロではなく、XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT が XrSpatialComponentDataQueryConditionEXT :: componentTypes に含まれていない場合、ランタイムは xrQuerySpatialComponentDataEXT から XR_ERROR_VALIDATION_FAILURE を返さなければなりません。
meshCount が XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput より小さい場合、ランタイムは xrQuerySpatialComponentDataEXT から XR_ERROR_SIZE_INSUFFICIENT を返さなければなりません。
meshes 配列でランタイムによって入力された XrSpatialMeshDataEXT の場合、XrSpatialMeshDataEXT :: vertexBuffer の XrSpatialBufferEXT :: bufferType は XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT でなければならず、XrSpatialMeshDataEXT :: indexBuffer の XrSpatialBufferEXT :: bufferType は XR_SPATIAL_BUFFER_TYPE_UINT32_EXT でなければなりません。
有効な使用方法(暗黙的)
- XrSpatialComponentMesh3DListEXT を使用する前に、
XR_EXT_spatial_entity拡張機能を有効にしなければなりません。 -
typeはXR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXTにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタでなければなりません。 -
meshesは、meshCountXrSpatialMeshDataEXT 構造体の配列へのポインタでなければなりません。 -
meshCountパラメータは0より大きい値にする必要があります。
構成
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT が XrSpatialCapabilityComponentTypesEXT :: componentTypes で列挙されている場合、アプリケーションは、このコンポーネントをサポートする機能の XrSpatialCapabilityConfigurationBaseHeaderEXT 派生構造の XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents リストに列挙型を含めることで、この機能を有効にできます。
このコンポーネントでは、XrSpatialCapabilityConfigurationBaseHeaderEXT の次のチェーンに含めるための特別な構成は必要ありません。
トラッキング状態フィルタ
XrSpatialFilterTrackingStateEXT 構造体は次のように定義されます。
typedef struct XrSpatialFilterTrackingStateEXT {
XrStructureType type;
const void* next;
XrSpatialEntityTrackingStateEXT trackingState;
} XrSpatialFilterTrackingStateEXT;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。trackingStateは、アプリがフィルタを適用する XrSpatialEntityTrackingStateEXT です。
アプリは、XrSpatialDiscoverySnapshotCreateInfoEXT の次のチェーンで XrSpatialFilterTrackingStateEXT を使用して、トラッキング状態が trackingState であるエンティティのみに検出を限定できます。
アプリは、XrSpatialComponentDataQueryConditionEXT の次のチェーンで XrSpatialFilterTrackingStateEXT を使用して、スナップショットからのコンポーネント データクエリを、トラッキング状態が trackingState のエンティティのみに限定できます。
有効な使用方法(暗黙的)
-
XR_EXT_spatial_entity拡張機能は、XrSpatialFilterTrackingStateEXT を使用する前に有効にしなければなりません。 -
typeはXR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXTにする必要があります。 -
nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタでなければなりません。 -
trackingStateは、有効な XrSpatialEntityTrackingStateEXT 値でなければなりません。
コード例
アプリケーションの使用状況
アプリケーションは通常、次のパターンで空間エンティティ拡張機能を使用します。
- アプリはまず、xrEnumerateSpatialCapabilitiesEXT を使用してシステムの空間機能を列挙します。次に、返された XrSpatialCapabilityEXT の配列を検査し、xrEnumerateSpatialCapabilityComponentTypesEXT と xrEnumerateSpatialCapabilityFeaturesEXT をそれぞれ使用して、各機能でサポートされているコンポーネントと機能を列挙します。これにより、アプリケーションは、有効にできるコンポーネントと、その機能が受け入れる構成の全体像を把握できます。
- 次に、アプリケーションは、特定の空間機能構成を持つ 1 つまたは複数の XrSpatialContextEXT ハンドルを作成します。この構成により、空間コンテキストで特定の機能が有効化および構成され、それらの機能のコンポーネントが有効化および構成されます。
- 各 XrSpatialContextEXT について、アプリは xrCreateSpatialDiscoverySnapshotAsyncEXT を使用して空間エンティティを検出する前に、その XrSpatialContextEXT の XrEventDataSpatialDiscoveryRecommendedEXT イベントを受信するまで待機します。この非同期オペレーションが完了すると、アプリは XrSpatialSnapshotEXT ハンドルを受け取ります。
- アプリは、xrQuerySpatialComponentDataEXT を使用して、この XrSpatialSnapshotEXT に含まれるエンティティとコンポーネント データをクエリします。エンティティの状態が
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTの場合、アプリケーションは、XrSpatialComponentDataQueryResultEXT の次のチェーンにアタッチされた構造から、クエリされたエンティティの最新のコンポーネント データを読み取ります。 - アプリケーションが関心のある特定のエンティティを識別し、時間の経過とともに更新を取得したい場合は、xrCreateSpatialEntityFromIdEXT を使用して、それらのエンティティの XrSpatialEntityEXT ハンドルを作成します。アプリケーションは、xrCreateSpatialUpdateSnapshotEXT を使用して、関心のあるエンティティの更新を取得し、新しく作成された XrSpatialSnapshotEXT で同じ xrQuerySpatialComponentDataEXT 関数を使用して、それらのエンティティの最新のコンポーネント データを取得します。
空間エンティティとクエリ コンポーネント データを検出する
次のサンプルコードは、機能「Foo」の空間エンティティを検出し、そのコンポーネント データをクエリする方法を示しています。
/****************************/
/* Capability definition */
/****************************/
// Foo capability has the following components -
// - XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT
#define XR_SPATIAL_CAPABILITY_FOO ((XrSpatialCapabilityEXT)1000740000U)
#define XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_FOO_EXT ((XrStructureType)1000740000U)
// Derives from XrSpatialCapabilityConfigurationBaseHeaderEXT
typedef struct XrSpatialCapabilityConfigurationFooEXT {
XrStructureType type;
const void* XR_MAY_ALIAS next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationFooEXT;
/******************************/
/* End capability definition */
/******************************/
auto waitUntilReady = [](XrFutureEXT future) {
XrFuturePollInfoEXT pollInfo{XR_TYPE_FUTURE_POLL_INFO_EXT};
XrFuturePollResultEXT pollResult{XR_TYPE_FUTURE_POLL_RESULT_EXT};
pollInfo.future = future;
do {
// sleep(1);
CHK_XR(xrPollFutureEXT(instance, &pollInfo, &pollResult));
} while (pollResult.state != XR_FUTURE_STATE_READY_EXT);
};
// Create a spatial spatial context
XrSpatialContextEXT spatialContext{};
{
const std::array<XrSpatialComponentTypeEXT, 1> enabledComponents = {
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT,
};
// Configure Foo capability for the spatial context
XrSpatialCapabilityConfigurationFooEXT fooConfig{XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_FOO_EXT};
fooConfig.capability = XR_SPATIAL_CAPABILITY_FOO;
fooConfig.enabledComponentCount = enabledComponents.size();
fooConfig.enabledComponents = enabledComponents.data();
std::vector<XrSpatialCapabilityConfigurationBaseHeaderEXT*> capabilityConfigs;
capabilityConfigs.push_back(reinterpret_cast<XrSpatialCapabilityConfigurationBaseHeaderEXT*>(&fooConfig));
XrSpatialContextCreateInfoEXT spatialContextCreateInfo{XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT};
spatialContextCreateInfo.capabilityConfigCount = capabilityConfigs.size();
spatialContextCreateInfo.capabilityConfigs = capabilityConfigs.data();
XrFutureEXT createContextFuture;
CHK_XR(xrCreateSpatialContextAsyncEXT(session, &spatialContextCreateInfo, &createContextFuture));
waitUntilReady(createContextFuture);
XrCreateSpatialContextCompletionEXT completion{XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT};
CHK_XR(xrCreateSpatialContextCompleteEXT(session, createContextFuture, &completion));
if (completion.futureResult != XR_SUCCESS) {
return;
}
spatialContext = completion.spatialContext;
}
auto discoverSpatialEntities = [&](XrSpatialContextEXT spatialContext, XrTime time) {
// We want to look for entities that have the following components.
std::array<XrSpatialComponentTypeEXT, 1> snapshotComponents {XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT};
XrSpatialDiscoverySnapshotCreateInfoEXT snapshotCreateInfo{XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT};
snapshotCreateInfo.componentTypeCount = snapshotComponents.size();
snapshotCreateInfo.componentTypes = snapshotComponents.data();
XrFutureEXT future = XR_NULL_FUTURE_EXT;
CHK_XR(xrCreateSpatialDiscoverySnapshotAsyncEXT(spatialContext, &snapshotCreateInfo, &future));
waitUntilReady(future);
XrCreateSpatialDiscoverySnapshotCompletionInfoEXT completionInfo{XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT};
completionInfo.baseSpace = localSpace;
completionInfo.time = time;
completionInfo.future = future;
XrCreateSpatialDiscoverySnapshotCompletionEXT completion{XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT};
CHK_XR(xrCreateSpatialDiscoverySnapshotCompleteEXT(spatialContext, &completionInfo, &completion));
if (completion.futureResult == XR_SUCCESS) {
// Query for the bounded2d component data
XrSpatialComponentTypeEXT componentToQuery = XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT;
XrSpatialComponentDataQueryConditionEXT queryCond{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT};
queryCond.componentTypes = &componentToQuery;
XrSpatialComponentDataQueryResultEXT queryResult{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT};
queryResult.entityIdCapacityInput = 0;
queryResult.entityIds = nullptr;
queryResult.entityStateCapacityInput = 0;
queryResult.entityStates = nullptr;
CHK_XR(xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond, &queryResult));
std::vector<XrSpatialEntityIdEXT> entityIds(queryResult.entityIdCountOutput);
std::vector<XrSpatialEntityTrackingStateEXT> entityStates(queryResult.entityStateCountOutput);
queryResult.entityIdCapacityInput = entityIds.size();
queryResult.entityIds = entityIds.data();
queryResult.entityStateCapacityInput = entityStates.size();
queryResult.entityStates = entityStates.data();
std::vector<XrSpatialBounded2DDataEXT> bounded2d(queryResult.entityIdCountOutput);
XrSpatialComponentBounded2DListEXT boundsList{XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT};
boundsList.boundCount = bounded2d.size();
boundsList.bounds = bounded2d.data();
queryResult.next = &boundsList;
CHK_XR(xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond, &queryResult));
for (int32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
if (entityStates[i] == XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT) {
// 2D extents for entity entityIds[i] is bounded2d[i].extents.
}
}
CHK_XR(xrDestroySpatialSnapshotEXT(completion.snapshot));
}
};
while (1) {
// ...
// For every frame in frame loop
// ...
XrFrameState frameState; // previously returned from xrWaitFrame
const XrTime time = frameState.predictedDisplayTime;
// Poll for the XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT event
XrEventDataBuffer event = {XR_TYPE_EVENT_DATA_BUFFER};
XrResult result = xrPollEvent(instance, &event);
if (result == XR_SUCCESS) {
switch (event.type) {
case XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT: {
const XrEventDataSpatialDiscoveryRecommendedEXT& eventdata =
*reinterpret_cast<XrEventDataSpatialDiscoveryRecommendedEXT*>(&event);
// Discover spatial entities for the context that we received the "discovery
// recommended" event for.
discoverSpatialEntities(eventdata.spatialContext, time);
break;
}
}
}
// ...
// Finish frame loop
// ...
}
CHK_XR(xrDestroySpatialContextEXT(spatialContext));
バッファデータをクエリする
次のサンプルコードは、XrSpatialBufferEXT を提供するコンポーネントのデータを取得する方法を示しています。
/****************************/
/* Component definition */
/****************************/
// Foo component that provides an XrVector3f buffer
#define XR_SPATIAL_COMPONENT_TYPE_FOO_EXT ((XrSpatialComponentTypeEXT)1000740000U)
#define XR_TYPE_SPATIAL_COMPONENT_FOO_LIST_EXT ((XrStructureType)1000740000U)
// XrSpatialComponentFooListEXT extends XrSpatialComponentDataQueryResultEXT
typedef struct XrSpatialComponentFooListEXT {
XrStructureType type;
void* XR_MAY_ALIAS next;
uint32_t fooCount;
XrSpatialBufferEXT* foo;
} XrSpatialComponentFooListEXT;
/******************************/
/* End Component definition */
/******************************/
// Query for the foo component data
XrSpatialComponentTypeEXT componentToQuery = XR_SPATIAL_COMPONENT_TYPE_FOO_EXT;
XrSpatialComponentDataQueryConditionEXT queryCond{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT};
queryCond.componentTypeCount = 1;
queryCond.componentTypes = &componentToQuery;
XrSpatialComponentDataQueryResultEXT queryResult{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT};
CHK_XR(xrQuerySpatialComponentDataEXT(snapshot, &queryCond, &queryResult));
std::vector<XrSpatialEntityIdEXT> entityIds(queryResult.entityIdCountOutput);
queryResult.entityIdCapacityInput = entityIds.size();
queryResult.entityIds = entityIds.data();
std::vector<XrSpatialBufferEXT> fooBuffers(queryResult.entityIdCountOutput);
XrSpatialComponentFooListEXT fooList{XR_TYPE_SPATIAL_COMPONENT_FOO_LIST_EXT};
fooList.fooCount = fooBuffers.size();
fooList.foo = fooBuffers.data();
queryResult.next = &fooList;
CHK_XR(xrQuerySpatialComponentDataEXT(snapshot, &queryCond, &queryResult));
for (int32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
// foo component data for entity entityIds[i]
if (fooBuffers[i].bufferType == XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT) {
XrSpatialBufferGetInfoEXT getInfo{XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT};
getInfo.bufferId = fooBuffers[i].bufferId;
uint32_t bufferCountOutput;
CHK_XR(xrGetSpatialBufferVector3fEXT(snapshot, &getInfo, 0, &bufferCountOutput, nullptr));
std::vector<XrVector3f> vertexBuffer(bufferCountOutput);
CHK_XR(xrGetSpatialBufferVector3fEXT(snapshot, &getInfo, bufferCountOutput, &bufferCountOutput, vertexBuffer.data()));
// XrVertex3f buffer for entity entityIds[i] is now available in vertexBuffer vector.
}
}
拡張機能のガイドライン
拡張機能が、空間エンティティに関する追加データを提供する新しい XrSpatialComponentTypeEXT を定義している場合、
- 拡張機能は、そのコンポーネントのリスト構造も定義しなければなりません。これにより、アプリケーションは、xrQuerySpatialComponentDataEXT ::
queryConditionを満たす各空間エンティティのデータを入力するために、配列をランタイムに渡すことができます。このようなリスト構造の例としては、XrSpatialComponentParentListEXT や XrSpatialComponentBounded2DListEXT などがあります。コンポーネントのデータサイズが可変で、アプリが 2 回呼び出しのイディオムを使用してクエリする必要がある場合、コンポーネント データは、リスト構造内の可変サイズのデータごとに XrSpatialBufferEXT を提供すべきであり、バッファごとに XrSpatialBufferTypeEXT を指定しなければなりません。アプリケーションは、コンポーネント データの 2 回呼び出しイディオムで定義された関数を使用して、バッファデータをクエリできます。このような構造の例として、XrSpatialComponentMesh3DListEXT に含まれる XrSpatialMeshDataEXT があります。 - この拡張機能は、アプリケーションが XrSpatialComponentDataQueryConditionEXT ::
nextにチェーンして、このコンポーネントのデータに関連するクエリに追加のフィルタを提供できる構造も提供できます。
- 拡張機能は、そのコンポーネントのリスト構造も定義しなければなりません。これにより、アプリケーションは、xrQuerySpatialComponentDataEXT ::
拡張機能は、XrSpatialDiscoverySnapshotCreateInfoEXT を拡張する構造を定義して、検出用の追加フィルタを提供できます。スナップショットを作成するためのフィルタは、空間コンテキストの構成に影響を与えてはなりません。代わりに、空間コンテキストの現在の構成(したがって、基盤となるサービスの現在の構成)によって追跡されるスナップショットに含めるエンティティとデータに関するヒントをランタイムに提供するために使用されます。
拡張機能が新しい XrSpatialCapabilityEXT を定義する場合、
- また、ランタイムがその機能のエンティティで提供しなければならない XrSpatialComponentTypeEXT のリストを指定すべきです。
- また、その機能の構成を可能にする XrSpatialCapabilityConfigurationBaseHeaderEXT から派生した構造を提供しなければなりません。
拡張機能が新しい XrSpatialCapabilityFeatureEXT を定義する場合、XrSpatialCapabilityConfigurationBaseHeaderEXT の次のポインタにチェーンできる対応する構成構造も定義しなければなりません。アプリは、XrSpatialContextEXT の作成時にこの構成構造を使用して機能を有効にできます。
新しい XrSpatialCapabilityEXT を定義する拡張機能は、仕様について次のテンプレートに従うべきです。
- 概要
- ランタイム サポート
- 構成
- 保証対象のコンポーネント
- コード例
新しい XrSpatialComponentTypeEXT を定義する拡張機能は、仕様のこのテンプレートに従うべきです。
- コンポーネント データ
- データをクエリするコンポーネント リストの構造
- 構成
アプリケーションに
XrSpatialBufferIdEXTを提供する API を作成する場合は、XrSpatialBufferTypeEXT を付随させて、バッファのデータ型をアプリケーションに通知しなければなりません。アプリケーションは、適切なxrGetSpatialBuffer*関数を使用してバッファの実際の内容を取得できます。
セマンティック ラベルのデザインと拡張のガイドライン
この拡張機能は、エンティティのセマンティック ラベル情報を伝達するコンポーネントを定義するものではありませんが、そのようなコンポーネントを定義する拡張機能の設計ルールとガイドラインを定めています。以下のテキストでは、「すべき」と「しなければならない」は、ランタイム実装や API を使用するアプリケーションを制約するのではなく、そのような機能の作成者を制約します。
- 拡張機能が XrSpatialCapabilityEXT のセマンティック ラベルを定義している場合、新しい XrSpatialComponentTypeEXT と、そのコンポーネントのデータとなるラベルのセット(「セマンティック ラベルセット」)を含む新しい列挙型を定義すべきです。
- セマンティック ラベルセットを表す列挙型には、エンティティがこのセットのラベルのいずれにも分類されていないことを示す値が必要です。この列挙子の名前には、
XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXTなどの「UNCATEGORIZED」を含める必要があります。この値は、ランタイムがこのエンティティを認識しているものの、このエンティティが分類されている他のセマンティック ラベルセットがあることをアプリケーションに示します。 - xrEnumerateSpatialCapabilityComponentTypesEXT でこの新しく定義された XrSpatialComponentTypeEXT を列挙することは、ランタイムがそのコンポーネント タイプに対応するセマンティック ラベルセット(したがって、セットで定義されたラベル)をサポートしていることを意味します。
- アプリケーションは、このセマンティック ラベルセットに属するラベルを持つエンティティを検出したいという意向を、対応する XrSpatialComponentTypeEXT を XrSpatialCapabilityConfigurationBaseHeaderEXT ::
enabledComponents配列に含めることで表現します。この配列は、コンポーネント タイプが列挙されている機能の構成構造体です。 - 1 つの空間エンティティに複数のコンポーネントがあり、それぞれが独自のセマンティック ラベルセットからラベルを提供している場合があります。次の例では、いくつかの仮定的なセマンティック ラベルセット(
XrSpatialObjectSemanticLabel)を考えてみましょう。これには、椅子、ソファ、テーブルなどの値が含まれる可能性があります。XrSpatialSofaBrand(IKEA、Wayfair などの値)とXrSpatialIkeaSofa(IKEA のソファの特定のモデル名など)です。このシナリオでは、同じソファ エンティティに 3 つのコンポーネント(3 つのセマンティック ラベルセットのラベル)がすべて含まれており、それぞれがエンティティに関する異なる粒度の情報を提供します。 - 拡張機能が、
UNCATEGORIZEDラベルに加えて複数のラベルを含む新しいセマンティック ラベルセットを提供する新しい XrSpatialComponentTypeEXT を定義している場合、拡張機能は、アプリケーションがそのコンポーネント タイプに対応するセマンティック ラベルセットで定義されたラベルのサブセットのみを有効にできるようにする XrSpatialCapabilityFeatureEXT の定義を検討すべきです。このサブセットは、機能構成の次のチェーンで提供され、ランタイムがトラッキング パイプラインを最適化し、提供されたサブセットのみをトラッキングするためのヒントとして機能します。このような特徴構造体の例を以下に示します。 - 拡張機能は、既存のセマンティック ラベルセットの列挙にラベルを追加してはなりません。代わりに、同じセマンティクスを持つ同等の列挙子と、他のセットの値と等しい値を含む新しい列挙を、新しく追加された列挙子に加えて定義する必要があります。新しく定義されたセマンティック ラベルセットの仕様では、古いラベルセットと新しいラベルセットのマッピングも確立しなければなりません。以下の例をご覧ください。
セマンティック ラベル サブセットの空間特徴定義の例
// New example semantic label set.
typedef enum XrSpatialExampleSemanticLabelEXT {
// ... label values
} XrSpatialExampleSemanticLabelEXT;
/*
typedef enum XrSpatialCapabilityFeatureEXT {
// .. existing values
// new spatial feature value
XR_SPATIAL_CAPABILITY_FEATURE_EXAMPLE_SEMANTIC_LABEL_SUBSET_EXT
// .. existing values
} XrSpatialCapabilityFeatureEXT;
*/
// New spatial feaure configuration structure
typedef struct XrSpatialFeatureExampleSemanticLabelSubsetEXT {
XrStructureType type;
const void* XR_MAY_ALIAS next;
uint32_t semanticLabelCount;
const XrSpatialExampleSemanticLabelEXT* semanticLabels;
} XrSpatialFeatureExampleSemanticLabelSubsetEXT;
空間セマンティック ラベル拡張機能の例
typedef enum XrSpatialExamplePlaneSemanticLabelExtensionEXT {
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_UNCATEGORIZED_EXT = 1,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_FLOOR_EXT = 2,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_WALL_EXT = 3,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_CEILING_EXT = 4,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_TABLE_EXT = 5,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_DOOR_EXT = 6,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_WINDOW_EXT = 7,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialExamplePlaneSemanticLabelExtensionEXT;
上記の例では、拡張機能が列挙型 XrSpatialExamplePlaneSemanticLabelExtensionEXT を定義して、既存の XrSpatialPlaneSemanticLabelEXT をドアと窓を表す値で拡張しています。新しい列挙型の仕様には、次の形式のテキストを含める必要があります。
For all non-UNCATEGORIZED label enumerants in elink:XrSpatialPlaneSemanticLabelEXT,
the runtime must: return that enumerant if and only if it returns the corresponding
label enumerant from elink:XrSpatialExamplePlaneSemanticLabelExtensionEXT with the same value
i.e.
the ename:XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT value for that entity must:
correspond with the ename:XR_SPATIAL_COMPONENT_TYPE_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_EXT values
according to the following table -
[width="100%",options="header"]
|====
| XrSpatialExamplePlaneSemanticLabelExtensionEXT | XrSpatialPlaneSemanticLabelEXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_FLOOR_EXT | XR_SPATIAL_PLANE_SEMANTIC_LABEL_FLOOR_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_WALL_EXT | XR_SPATIAL_PLANE_SEMANTIC_LABEL_WALL_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_CEILING_EXT | XR_SPATIAL_PLANE_SEMANTIC_LABEL_CEILING_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_TABLE_EXT | XR_SPATIAL_PLANE_SEMANTIC_LABEL_TABLE_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_DOOR_EXT | XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_WINDOW_EXT | XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT
|====
新しいマクロ
新しい基本タイプ
XrSpatialBufferIdEXTXrSpatialEntityIdEXT
新しいオブジェクト タイプ
新しいコマンド
- xrCreateSpatialContextAsyncEXT
- xrCreateSpatialContextCompleteEXT
- xrCreateSpatialDiscoverySnapshotAsyncEXT
- xrCreateSpatialDiscoverySnapshotCompleteEXT
- xrCreateSpatialEntityFromIdEXT
- xrCreateSpatialUpdateSnapshotEXT
- xrDestroySpatialContextEXT
- xrDestroySpatialEntityEXT
- xrDestroySpatialSnapshotEXT
- xrEnumerateSpatialCapabilitiesEXT
- xrEnumerateSpatialCapabilityComponentTypesEXT
- xrEnumerateSpatialCapabilityFeaturesEXT
- xrGetSpatialBufferFloatEXT
- xrGetSpatialBufferStringEXT
- xrGetSpatialBufferUint16EXT
- xrGetSpatialBufferUint32EXT
- xrGetSpatialBufferUint8EXT
- xrGetSpatialBufferVector2fEXT
- xrGetSpatialBufferVector3fEXT
- xrQuerySpatialComponentDataEXT
新しい構造
- XrCreateSpatialContextCompletionEXT
- XrCreateSpatialDiscoverySnapshotCompletionEXT
- XrCreateSpatialDiscoverySnapshotCompletionInfoEXT
- XrEventDataSpatialDiscoveryRecommendedEXT
- XrSpatialBounded2DDataEXT
- XrSpatialBufferEXT
- XrSpatialBufferGetInfoEXT
- XrSpatialCapabilityComponentTypesEXT
- XrSpatialCapabilityConfigurationBaseHeaderEXT
- XrSpatialComponentDataQueryConditionEXT
- XrSpatialComponentDataQueryResultEXT
- XrSpatialContextCreateInfoEXT
- XrSpatialDiscoverySnapshotCreateInfoEXT
- XrSpatialEntityFromIdCreateInfoEXT
- XrSpatialMeshDataEXT
- XrSpatialUpdateSnapshotCreateInfoEXT
XrSpatialDiscoverySnapshotCreateInfoEXT、XrSpatialComponentDataQueryConditionEXT を拡張します。
新しい列挙型
- XrSpatialBufferTypeEXT
- XrSpatialCapabilityEXT
- XrSpatialCapabilityFeatureEXT
- XrSpatialComponentTypeEXT
- XrSpatialEntityTrackingStateEXT
新しい列挙型定数
XR_EXT_SPATIAL_ENTITY_EXTENSION_NAMEXR_EXT_spatial_entity_SPEC_VERSIONXrObjectType の拡張:
XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXTXR_OBJECT_TYPE_SPATIAL_ENTITY_EXTXR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT
XrResult の拡張:
XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXTXR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXTXR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT
XrStructureType の拡張:
XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXTXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXTXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXTXR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXTXR_TYPE_SPATIAL_BUFFER_GET_INFO_EXTXR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXTXR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXTXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXTXR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXTXR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXTXR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXTXR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXTXR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXTXR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT
問題
1 つのエンティティは常に 1 つの機能のみから派生しますか?
- 解決済み
- 回答: いいえ。これは、独自のトラッキング機能と、検出されたエンティティをどのように表現するかによって、完全にランタイムに依存します。この仕様では、特定の機能の保証されたコンポーネントを除き、空間エンティティの特定の表現を規定していません。ランタイムは、別々の機能によって検出されたエンティティをマージし、そのエンティティの識別に使用されたすべての機能の保証されたコンポーネントを含む単一のエンティティとして表すことができます。たとえば、テーブルは平面トラッキング機能とオブジェクト トラッキング機能の両方で検出できます。平面トラッキングはエンティティに
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTコンポーネントを提供し、オブジェクト トラッキングはXR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTを提供します。特定のランタイムは、テーブルを 2 つの別個のエンティティとして提供し、それぞれに独自の保証されたコンポーネントのセットがある場合があります。一方、特定のランタイムは、テーブルを表す 1 つのエンティティのみを提供し、同じエンティティにXR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTとXR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTの両方がある場合があります。ここで重要なのは、特定の空間エンティティは、特定のコンポーネント タイプのコンポーネントを最大 1 つしか持てないということです。したがって、異なる機能によって生成されたコンポーネント データが特定のエンティティで競合する場合、ランタイムはそれらを 2 つの別個のエンティティとして表さなければなりません。
変更履歴
リビジョン 1、2024-04-12(Nihav Jain、Google)
- 拡張機能の初期説明