XR_EXT_spatial_entity

이름 문자열

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의 장면 이해 및 공간 추론에 관한 개념과 기초를 소개합니다. 이렇게 하면 관련이 있지만 서로 다른 여러 기능 영역이 통합되며, 이 확장 프로그램에서 정의한 대로 광범위하게 균일한 방식으로 열거, 구성, 상호작용됩니다. 이 확장 프로그램에는 이러한 기능 영역에 대한 구체적인 정의가 없으므로 공식 사양 텍스트는 다소 추상적인 경향이 있습니다. 이 확장 프로그램 사양 텍스트에 포함된 예시는 설명 목적으로 향후 또는 가상의 관련 확장 프로그램에 정의된 기능을 참조하는 경우가 있으며, 이러한 추가 기능을 본질적으로 제한하거나 지정하지 않습니다.

이 확장 프로그램의 주요 부분은 다음과 같습니다.

  • 공간 항목 : 기능은 항목을 중심으로 하며, 항목 자체는 기능을 거의 제공하지 않습니다.
  • 공간 구성요소 : 이러한 항목에는 데이터와 동작을 제공하는 구성요소가 연결되어 있습니다.
  • 공간 구성요소 유형 : 각 공간 구성요소는 특정 구성요소 유형에 속하며, 특정 항목은 특정 구성요소 유형의 구성요소를 최대 하나만 가질 수 있습니다.
  • 공간 컨텍스트 : 모든 공간 항목 상호작용은 초기화 및 구성 단계 후 컨텍스트에서 발생합니다.
  • 공간 기능 : 공간 항목 조작은 기능에 의해 광범위하게 제공됩니다. 기능은 애플리케이션 정의 앵커, 평면 감지 또는 이미지 추적과 같은 기능 단위입니다 (이에 국한되지 않음). 각 기능은 일반적으로 별도의 확장 프로그램 (평소와 같이 인스턴스 생성 시 사용 설정됨)에 정의되며 생성 시 특정 컨텍스트에 사용 설정됩니다.
  • 각 기능은 해당 기능에 의해 노출되는 모든 항목에 구성요소가 있는 일련의 구성요소 유형과 연결됩니다. 기능을 정의하는 확장 프로그램은 기능에 필수적인 구성요소 유형('보장됨')을 지정하는 반면, 동일한 확장 프로그램 또는 다른 확장 프로그램은 일부 잠재적 구현에서 제공하는 선택적 구성요소 유형을 지정할 수 있습니다. 여러 기능에서 특정 구성요소 유형의 구성요소가 있는 항목을 제공할 수 있으며, 이러한 구성요소는 이를 생성한 기능과 관계없이 균일하게 사용할 수 있습니다.
  • 공간 기능 특성 : 또한 일부 기능은 구성이 필요하므로 기능 특성에 의해 매개변수화됩니다.

이 확장 프로그램은 현재 시스템에서 지원되는 각 기능에서 제공하는 구성요소(필수 및 선택적 구성요소 모두)를 열거하는 메커니즘을 제공합니다.

일부 구현에서는 기능에 다양한 수준의 매개변수화가 필요할 수 있으므로 이 확장 프로그램은 현재 시스템에서 특정 기능과 연결된 지원되는 기능을 열거하는 메커니즘을 제공합니다.

이 확장 프로그램은 다양한 기능에서 사용될 것으로 예상되는 몇 가지 일반적인 구성요소도 정의합니다.

공간 항목

공간 항목은 특정 공간에 존재하는 항목으로, 구성요소로 구성된 다양한 관련 데이터가 있습니다. 다음 중 하나일 수 있습니다.

  • 물리적 (예: 벽, 바닥과 같은 평면, 의자, 책장과 같은 물체 등)
  • 가상 (예: 다른 애플리케이션 또는 사용자가 배치하고 공유하는 콘텐츠)
  • 앱 정의 (예: 영역을 '거실' 또는 '주방'으로 표시하거나 지점을 TV를 배치할 위치로 표시하는 애플리케이션 등)

컨트롤러나 시선과 같이 작업 시스템을 통해 노출되는 항목은 공간 항목으로 모델링되지 않습니다.

OpenXR의 공간 엔티티는 엔티티 구성요소 시스템으로 모델링됩니다. 각 공간 항목에는 구성요소 집합이 있으며, 각 구성요소는 해당 항목에 대한 고유한 데이터 및 동작 집합을 제공합니다.

공간 항목은 XrSpatialEntityIdEXT atom 또는 XrSpatialEntityEXT 핸들로 표현되며, 자세한 내용은 공간 항목 표현 섹션에 나와 있습니다.

공간 구성요소 유형

공간 엔티티에는 해당 엔티티의 데이터 또는 동작을 제공하는 하나 이상의 구성요소가 있습니다. 이 확장 프로그램에서 정의하는 몇 가지 일반적인 구성요소는 일반 구성요소를 참고하세요.

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 열거형은 런타임에서 지원할 수 있는 다양한 유형의 구성요소를 식별합니다.

나열된 모든 구성요소 유형이 이 확장 프로그램에서 자체적으로 제공되는 것은 아닙니다. 일부는 문서에 설명된 대로 인스턴스 생성 시 추가 확장 프로그램을 사용 설정해야 합니다.

열거형에는 다음 값이 있습니다.

enum 설명

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

공간 엔티티의 평면 정렬 enum을 제공하는 구성요소입니다. 상응하는 목록 구조는 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를 만들 때 공간 기능의 구성요소를 사용 설정하며, 런타임은 검색된 엔티티에서 사용 설정된 구성요소만 제공해야 합니다(must). 예를 들어 런타임이 특정 기능의 구성요소 중 하나가 '시맨틱 라벨'이라고 보고하는 경우, 이는 애플리케이션이 해당 기능의 구성을 통해 시맨틱 라벨을 사용 설정할 수 있으며(can), 런타임은 구성된 경우에만 시맨틱 라벨 구성요소를 제공해야 함(must)을 의미합니다.

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 열거형은 런타임에서 지원할 수 있는 다양한 유형의 기능을 식별합니다.

열거형에는 다음 값이 있습니다.

enum 설명

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에 확장 프로그램이 사용 설정되지 않은 공간 기능을 열거하면 안 됩니다(must).

올바른 사용 (암시적)

  • xrEnumerateSpatialCapabilitiesEXT를 호출하기 전에 XR_EXT_spatial_entity 확장 프로그램을 사용 설정해야 합니다(MUST).
  • instance는 유효한 XrInstance 핸들이어야 합니다.
  • capabilityCountOutput는 uint32_t 값에 대한 포인터여야 합니다.
  • capabilityCapacityInput가 0가 아닌 경우 capabilities는 capabilityCapacityInput XrSpatialCapabilityEXT 값 배열의 포인터여야 합니다.

반품 코드

성공

  • XR_SUCCESS

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SYSTEM_INVALID
  • XR_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에 지원하는 전체 구성요소 집합을 파악할 수 있으며, 이 목록을 사용하여 의 XrSpatialContextEXT를 만들 때 capability의 유효한 구성이 무엇인지 확인할 수 있습니다.

capability가 xrEnumerateSpatialCapabilitiesEXT에 의해 열거되지 않으면 런타임은 XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT를 반환해야 합니다(must).

런타임은 instance에 확장 프로그램이 사용 설정되지 않은 공간 구성요소 유형을 열거하면 안 됩니다(MUST).

올바른 사용 (암시적)

반품 코드

성공

  • XR_SUCCESS

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT
  • XR_ERROR_SYSTEM_INVALID
  • XR_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는 componentTypeCapacityInput XrSpatialComponentTypeEXT 값의 배열에 대한 포인터여야 합니다.

공간 기능

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에 연결되어야 합니다.

열거형에는 다음 값이 있습니다.

enum 설명

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를 반환해야 합니다(must).

런타임은 instance에 확장 프로그램이 사용 설정되지 않은 공간 기능 특성을 열거하면 안 됩니다.

올바른 사용 (암시적)

  • XR_EXT_spatial_entity 확장 프로그램은 xrEnumerateSpatialCapabilityFeaturesEXT를 호출하기 전에 사용 설정되어야 합니다(MUST).
  • instance는 유효한 XrInstance 핸들이어야 합니다.
  • capability는 유효한 XrSpatialCapabilityEXT 값이어야 합니다.
  • capabilityFeatureCountOutput는 uint32_t 값에 대한 포인터여야 합니다.
  • capabilityFeatureCapacityInput가 0가 아닌 경우 capabilityFeatures는 capabilityFeatureCapacityInput XrSpatialCapabilityFeatureEXT 값 배열의 포인터여야 합니다(MUST).

반품 코드

성공

  • XR_SUCCESS

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT
  • XR_ERROR_SYSTEM_INVALID
  • XR_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 ::capabilityConfigCount가 0인 경우 런타임은 XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT를 반환해야 합니다(MUST). 공간 컨텍스트 핸들에는 기능이 하나 이상 필요합니다.

XrSpatialContextCreateInfoEXT :: capabilityConfigs 배열의 기능이 xrEnumerateSpatialCapabilitiesEXT에 의해 열거되지 않으면 런타임은 XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT를 반환해야 합니다(must).

XrSpatialContextCreateInfoEXT :: capabilityConfigs의 XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponentCount가 0인 경우 런타임은 XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT를 반환해야 합니다(must). 기능 구성은 해당 기능에 사용 설정할 구성요소 유형 목록이 없으면 완료되지 않습니다.

XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents에 나열된 구성요소 유형이 xrEnumerateSpatialCapabilityComponentTypesEXT의 XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability에 열거되지 않은 경우 런타임은 XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT를 반환해야 합니다(must).

XrSpatialContextCreateInfoEXT :: capabilityConfigs의 다음 체인에 있는 구조가 xrEnumerateSpatialCapabilityFeaturesEXT에서 해당 기능에 대해 열거되지 않은 XrSpatialCapabilityFeatureEXT에 해당하는 경우 런타임은 해당 XrSpatialCapabilityFeatureEXT 구조를 무시해야 합니다(must).

XrSpatialContextCreateInfoEXT :: capabilityConfigs에 동일한 XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability가 있는 여러 구조가 포함된 경우 런타임은 XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT를 반환해야 합니다(must).

시스템 리소스를 최적으로 사용하기 위해 런타임은 XrSpatialContextCreateInfoEXT 배열에 제공된 구성을 사용하여 공간 요청에 대비할 수 있습니다. 예를 들어 평면 추적 기능을 지원하는 런타임은 평면 추적 기능이 포함된 공간 컨텍스트 핸들이 애플리케이션에 의해 생성된 경우에만 평면 추적 파이프라인을 시작할 수 있습니다. 구성된 기능의 준비 시간이 긴 경우 xrCreateSpatialDiscoverySnapshotAsyncEXT를 호출하면 빈 스냅샷이 생성될 수 있습니다. 애플리케이션은 xrCreateSpatialDiscoverySnapshotAsyncEXT를 사용하기 전에 XrEventDataSpatialDiscoveryRecommendedEXT를 기다려 기본 추적 서비스가 준비되었는지 확인할 수 있습니다.

런타임이 XrSpatialContextEXT에 구성되는 공간 기능에 대한 애플리케이션 액세스를 제어하기 위해 권한 시스템을 적용하는 경우, 이러한 권한이 이 애플리케이션에 부여되지 않았다면 런타임은 XR_ERROR_PERMISSION_INSUFFICIENT를 반환해야 합니다(must).

이 함수는 비동기 작업을 시작하고 xrPollFutureEXT 및 관련 함수와 함께 사용할 수 있는 상응하는 XrFutureEXT를 만듭니다. 이 함수의 반환 값은 매개변수가 비동기 작업을 예약하는 데 허용되는지 여부만 나타냅니다. 해당 완료 함수는 xrCreateSpatialContextCompleteEXT이며, 이 함수의 Future가 READY 상태일 때 사용할 수 있으며, 완료 구조 XrCreateSpatialContextCompletionEXT에서 해당 함수에 의해 채워진 출력이 있습니다.

올바른 사용 (암시적)

  • xrCreateSpatialContextAsyncEXT를 호출하기 전에 XR_EXT_spatial_entity 확장 프로그램을 사용 설정해야 합니다.
  • session는 유효한 XrSession 핸들이어야 합니다.
  • createInfo는 유효한 XrSpatialContextCreateInfoEXT 구조에 대한 포인터여야 합니다.
  • future는 XrFutureEXT 값에 대한 포인터여야 합니다.

반품 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_PERMISSION_INSUFFICIENT
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT
  • XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT
  • XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT
  • XR_ERROR_VALIDATION_FAILURE
  • XR_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 핸들을 만드는 정보를 설명합니다.

올바른 사용 (암시적)

XrSpatialCapabilityConfigurationBaseHeaderEXT 구조는 다음과 같이 정의됩니다.

typedef struct XrSpatialCapabilityConfigurationBaseHeaderEXT {
    XrStructureType                     type;
    const void*                         next;
    XrSpatialCapabilityEXT              capability;
    uint32_t                            enabledComponentCount;
    const XrSpatialComponentTypeEXT*    enabledComponents;
} XrSpatialCapabilityConfigurationBaseHeaderEXT;

이 구조는 API에서 직접 사용되지 않지만 하위 구조를 XrSpatialContextCreateInfoEXT와 함께 사용하여 공간 기능을 구성할 수 있습니다.

회원 설명

  • type는 이 구조의 XrStructureType입니다.
  • next는 NULL 또는 구조 체인의 다음 구조에 대한 포인터입니다.
  • thought capability는 XrSpatialCapabilityEXT입니다.
  • enabledComponentCount은 enabledComponents 배열의 요소 수를 설명하는 uint32_t입니다.
  • enabledComponents는 XrSpatialComponentTypeEXT 배열의 포인터입니다.

capability가 xrEnumerateSpatialCapabilitiesEXT에 의해 열거되지 않으면 런타임은 XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT를 반환해야 합니다(must). enabledComponents에 나열된 구성요소 유형이 xrEnumerateSpatialCapabilityComponentTypesEXT에서 capability에 대해 열거되지 않은 경우 런타임은 XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT를 반환해야 합니다(must).

올바른 사용 (암시적)

xrCreateSpatialContextCompleteEXT 함수는 다음과 같이 정의됩니다.

XrResult xrCreateSpatialContextCompleteEXT(
    XrSession                                   session,
    XrFutureEXT                                 future,
    XrCreateSpatialContextCompletionEXT*        completion);

파라미터 설명

xrCreateSpatialContextCompleteEXT는 xrCreateSpatialContextAsyncEXT에서 시작한 비동기 작업을 완료합니다. future가 준비 상태가 아니면 런타임은 XR_ERROR_FUTURE_PENDING_EXT를 반환해야 합니다(MUST). future가 이미 완료되었거나 취소된 경우 런타임은 XR_ERROR_FUTURE_INVALID_EXT를 반환해야 합니다(MUST).

올바른 사용 (암시적)

반품 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_FUTURE_INVALID_EXT
  • XR_ERROR_FUTURE_PENDING_EXT
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_VALIDATION_FAILURE

XrCreateSpatialContextCompletionEXT 구조는 다음과 같이 정의됩니다.

typedef struct XrCreateSpatialContextCompletionEXT {
    XrStructureType        type;
    void*                  next;
    XrResult               futureResult;
    XrSpatialContextEXT    spatialContext;
} XrCreateSpatialContextCompletionEXT;

회원 설명

향후 반품 코드

futureResult 값:

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT

futureResult가 성공 코드인 경우 spatialContext는 유효해야 합니다. spatialContext가 유효한 경우 xrCreateSpatialContextAsyncEXT :: session의 수명 주기 내에서만 또는 애플리케이션이 xrDestroySpatialContextEXT를 사용하여 spatialContext를 소멸시킬 때까지(둘 중 먼저 발생하는 시점) 유효합니다.

올바른 사용 (암시적)

공간 컨텍스트 폐기

xrDestroySpatialContextEXT 함수는 다음과 같이 정의됩니다.

XrResult xrDestroySpatialContextEXT(
    XrSpatialContextEXT                         spatialContext);

파라미터 설명

애플리케이션은 공간 엔티티 검색 및 업데이트 작업을 완료한 후 xrDestroySpatialContextEXT 함수를 호출하여 spatialContext 핸들과 기본 리소스를 해제할 수 있습니다. spatialContext와 동일한 공간 기능으로 생성된 다른 유효한 XrSpatialContextEXT가 없는 경우 이 호출은 시스템 리소스를 절약하기 위해 해당 기능에 필요한 추적 서비스를 사용 중지하도록 런타임에 제안하는 역할을 합니다.

올바른 사용 (암시적)

스레드 안전

  • spatialContext 및 모든 하위 핸들에 대한 액세스는 외부에서 동기화되어야 합니다(must).

반품 코드

성공

  • XR_SUCCESS

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_RUNTIME_FAILURE

공간 항목 표현

공간 엔티티 ID

XR_DEFINE_ATOM(XrSpatialEntityIdEXT)

XrSpatialEntityIdEXT는 사용자의 공간 환경에서 런타임에 의해 발견된 모든 종류의 항목을 나타내는 데 사용됩니다. XrSpatialEntityIdEXT는 발견된 XrSpatialContextEXT에 유효하며 런타임은 동일한 XrSpatialContextEXT 내의 다른 항목에 동일한 XrSpatialEntityIdEXT를 재사용해서는 안 됩니다. 또한 런타임은 동일한 항목을 나타내는지 여부와 관계없이 동일한 XrSession 내에서 여러 XrSpatialContextEXT에 걸쳐 동일한 XrSpatialEntityIdEXT를 재사용하면 안 됩니다(must).

#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);

파라미터 설명

애플리케이션은 xrCreateSpatialEntityFromIdEXT를 사용하여 사용자의 환경에 존재하는 항목에 대한 참조인 XrSpatialEntityEXT 핸들을 만들 수 있습니다.

XrSpatialEntityFromIdCreateInfoEXT :: entityId가 spatialContext의 유효한 ID가 아닌 경우 런타임은 XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT를 반환해야 합니다(must).

올바른 사용 (암시적)

반품 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT
  • XR_ERROR_VALIDATION_FAILURE

XrSpatialEntityFromIdCreateInfoEXT 구조는 다음과 같이 정의됩니다.

typedef struct XrSpatialEntityFromIdCreateInfoEXT {
    XrStructureType         type;
    const void*             next;
    XrSpatialEntityIdEXT    entityId;
} XrSpatialEntityFromIdCreateInfoEXT;

회원 설명

  • type는 이 구조의 XrStructureType입니다.
  • next는 NULL 또는 구조 체인의 다음 구조에 대한 포인터입니다. 핵심 OpenXR 또는 이 확장 프로그램에는 이러한 구조가 정의되어 있지 않습니다.
  • entityId는 애플리케이션에서 핸들을 만들려는 항목의 XrSpatialEntityIdEXT입니다.

올바른 사용 (암시적)

공간 엔티티 핸들 폐기

xrDestroySpatialEntityEXT 함수는 다음과 같이 정의됩니다.

XrResult xrDestroySpatialEntityEXT(
    XrSpatialEntityEXT                          spatialEntity);

파라미터 설명

애플리케이션은 이 핸들에서 참조하는 항목에 더 이상 관심이 없는 경우 xrDestroySpatialEntityEXT를 사용하여 spatialEntity 핸들을 해제할 수 있습니다.

올바른 사용 (암시적)

스레드 안전

  • spatialEntity 및 모든 하위 핸들에 대한 액세스는 외부에서 동기화되어야 합니다(must).

반품 코드

성공

  • XR_SUCCESS

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_RUNTIME_FAILURE

공간 스냅샷

XR_DEFINE_HANDLE(XrSpatialSnapshotEXT)

애플리케이션은 공간 항목을 검색하거나 알려진 공간 항목에 관한 정보를 업데이트하기 위해 공간 스냅샷을 만들 수 있습니다. XrSpatialSnapshotEXT 핸들은 검색되거나 업데이트된 공간 항목의 변경 불가능한 데이터와 애플리케이션에서 선택한 구성요소의 하위 집합을 나타냅니다. 공간 스냅샷은 항목과 구성요소 데이터의 일관된 뷰를 나타냅니다. 스냅샷이 생성되면 스냅샷이 유효한 동안 스냅샷의 데이터가 일정하게 유지되어야 합니다.

애플리케이션은 원하는 만큼 스냅샷을 만들 수 있지만 새 스냅샷마다 할당되는 메모리에 유의해야 하며 더 이상 필요하지 않은 스냅샷은 소멸시켜야 합니다.

탐색 스냅샷 만들기

xrCreateSpatialDiscoverySnapshotAsyncEXT 함수는 다음과 같이 정의됩니다.

XrResult xrCreateSpatialDiscoverySnapshotAsyncEXT(
    XrSpatialContextEXT                         spatialContext,
    const XrSpatialDiscoverySnapshotCreateInfoEXT* createInfo,
    XrFutureEXT*                                future);

파라미터 설명

애플리케이션은 xrCreateSpatialDiscoverySnapshotAsyncEXT를 사용하여 탐색 스냅샷을 만들어 공간 엔티티를 탐색할 수 있습니다.

이 함수는 비동기 작업을 시작하고 xrPollFutureEXT 및 관련 함수와 함께 사용할 수 있는 상응하는 XrFutureEXT를 만듭니다. 이 함수의 반환 값은 매개변수가 비동기 작업을 예약하는 데 허용되는지 여부만 나타냅니다. 해당 완료 함수는 xrCreateSpatialDiscoverySnapshotCompleteEXT이며, 이 함수의 Future가 READY 상태일 때 사용할 수 있으며, 완료 구조 XrCreateSpatialDiscoverySnapshotCompletionEXT에서 해당 함수에 의해 채워진 출력이 있습니다.

애플리케이션은 이전 요청이 완료될 때까지 기다릴 필요 없이 여러 탐색 스냅샷 생성 요청을 제출할 수 있습니다. 런타임은 순서와 상관없이 스냅샷 생성을 처리하고 완료할 수 있습니다. 런타임은 기기의 전원, 열 또는 기타 정책으로 인해 시스템 리소스 사용을 줄여야 하는 경우 애플리케이션을 제한하기 위해 검색 스냅샷 생성 완료를 지연할 수 있습니다(may).

애플리케이션은 XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes를 사용하여 런타임이 스냅샷에 포함해야 하는 데이터가 있는 항목 및 구성요소 목록을 필터링할 수 있습니다. 애플리케이션이 XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes에서 유효한 공간 구성요소 유형 목록을 제공하는 경우 런타임은 XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes에서 제공된 구성요소 중 하나 이상이 있는 스냅샷에 공간 항목만 포함해야 합니다(must). 또한 런타임에는 스냅샷에 있는 구성요소의 데이터만 포함되어야 합니다.

spatialContext을 만들 때 XrSpatialContextCreateInfoEXT :: capabilityConfigs에 전달된 공간 기능에 대해 XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes의 XrSpatialComponentTypeEXT 중 하나라도 사용 설정되지 않은 경우 런타임은 XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT를 반환해야 합니다(must).

애플리케이션이 XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes에서 공간 구성요소 유형 목록을 제공하지 않는 경우 런타임은 spatialContext에 구성된 기능의 XrSpatialCapabilityConfigurationBaseHeaderEXT ::enabledComponents에 열거된 구성요소 집합이 있는 스냅샷의 모든 공간 항목을 포함해야 합니다(must). 런타임은 spatialContext에 구성된 기능의 사용 설정된 모든 구성요소에 관한 데이터를 포함해야 합니다(must).

future가 완료되기 전에 XrEventDataReferenceSpaceChangePending이 큐에 추가되고 XrEventDataReferenceSpaceChangePending :: poseValid가 false인 경우 런타임은 항목이 없는 XrSpatialSnapshotEXT를 만들거나 XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace에서 더 이상 찾을 수 없는 항목의 XrSpatialEntityTrackingStateEXT를 XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time에서 XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT 또는 XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT로 설정할 수 있습니다(may). 런타임은 XrEventDataReferenceSpaceChangePending으로 인해 XrCreateSpatialContextCompletionEXT :: futureResult를 오류 코드로 설정하면 안 됩니다.

올바른 사용 (암시적)

반품 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT
  • XR_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 핸들을 만드는 정보를 설명합니다.

올바른 사용 (암시적)

xrCreateSpatialDiscoverySnapshotCompleteEXT 함수는 다음과 같이 정의됩니다.

XrResult xrCreateSpatialDiscoverySnapshotCompleteEXT(
    XrSpatialContextEXT                         spatialContext,
    const XrCreateSpatialDiscoverySnapshotCompletionInfoEXT* createSnapshotCompletionInfo,
    XrCreateSpatialDiscoverySnapshotCompletionEXT* completion);

파라미터 설명

xrCreateSpatialDiscoverySnapshotCompleteEXT는 xrCreateSpatialDiscoverySnapshotAsyncEXT에서 시작한 비동기 작업을 완료합니다. XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future가 준비 상태가 아닌 경우 런타임은 XR_ERROR_FUTURE_PENDING_EXT를 반환해야 합니다(must). XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future가 이미 완료되었거나 취소된 경우 런타임은 XR_ERROR_FUTURE_INVALID_EXT를 반환해야 합니다(must).

올바른 사용 (암시적)

반품 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_FUTURE_INVALID_EXT
  • XR_ERROR_FUTURE_PENDING_EXT
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_TIME_INVALID
  • XR_ERROR_VALIDATION_FAILURE

XrCreateSpatialDiscoverySnapshotCompletionInfoEXT 구조는 다음과 같이 정의됩니다.

typedef struct XrCreateSpatialDiscoverySnapshotCompletionInfoEXT {
    XrStructureType    type;
    const void*        next;
    XrSpace            baseSpace;
    XrTime             time;
    XrFutureEXT        future;
} XrCreateSpatialDiscoverySnapshotCompletionInfoEXT;

회원 설명

생성된 스냅샷에 포함된 다양한 구성요소 데이터의 위치는 time에 있는 baseSpace에 표시됩니다.

올바른 사용 (암시적)

XrCreateSpatialDiscoverySnapshotCompletionEXT 구조는 다음과 같이 정의됩니다.

typedef struct XrCreateSpatialDiscoverySnapshotCompletionEXT {
    XrStructureType         type;
    void*                   next;
    XrResult                futureResult;
    XrSpatialSnapshotEXT    snapshot;
} XrCreateSpatialDiscoverySnapshotCompletionEXT;

회원 설명

  • type는 이 구조의 XrStructureType입니다.
  • next는 NULL 또는 구조 체인의 다음 구조에 대한 포인터입니다.
  • futureResult는 공간 탐색 스냅샷 생성 작업의 XrResult입니다.
  • snapshot는 발견된 공간 엔티티의 구성요소 데이터를 쿼리하는 데 사용할 수 있는 XrSpatialSnapshotEXT입니다.

향후 반품 코드

futureResult 값:

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_LIMIT_REACHED

올바른 사용 (암시적)

디스커버리 추천 이벤트

XrEventDataSpatialDiscoveryRecommendedEXT 구조는 다음과 같이 정의됩니다.

typedef struct XrEventDataSpatialDiscoveryRecommendedEXT {
    XrStructureType        type;
    const void*            next;
    XrSpatialContextEXT    spatialContext;
} XrEventDataSpatialDiscoveryRecommendedEXT;

회원 설명

  • type는 이 구조의 XrStructureType입니다.
  • next는 NULL 또는 구조 체인의 다음 구조에 대한 포인터입니다.
  • spatialContext는 런타임에서 탐색을 권장하는 XrSpatialContextEXT입니다.

애플리케이션은 xrPollEvent를 사용하여 이 이벤트를 가져올 수 있습니다. 애플리케이션은 이 이벤트를 기다려 공간 항목을 검색하기 위해 xrCreateSpatialDiscoverySnapshotAsyncEXT를 과도하게 호출하는 것을 방지할 수 있습니다. 애플리케이션이 두 XrEventDataSpatialDiscoveryRecommendedEXT 이벤트 간에 동일한 XrSpatialDiscoverySnapshotCreateInfoEXT를 사용하여 여러 탐색 스냅샷을 만드는 경우 결과 스냅샷에 동일한 항목이 포함될 수 있으므로 스냅샷 생성 및 데이터 쿼리가 낭비됩니다.

이 이벤트가 새 검색 스냅샷을 만들 때까지 기다리면 애플리케이션이 런타임에서 새 데이터를 반환하지 않을 수도 있는 검색 요청으로 시스템에 과부하를 주지 않으며 시스템 리소스를 과도하게 사용하고 기기의 전원 또는 열 정책으로 인해 제한될 위험을 방지할 수 있습니다. 또한 실시간 추적을 통해 즉석에서 공간 엔티티를 검색하는 런타임과 이전에 기록된 상태에서 공간 엔티티를 제공하는 런타임 간의 동등성을 만드는 데 도움이 됩니다 (런타임은 각 XrSpatialContextEXT에 대해 검색 추천 이벤트를 한 번만 큐에 추가할 수 있음).

런타임은 기존 공간 항목의 구성요소 데이터에 대한 변경 또는 조정에 관해 애플리케이션에 알리기 위해 이 이벤트를 큐에 추가하면 안 됩니다(MUST). 애플리케이션은 xrCreateSpatialUpdateSnapshotEXT를 사용하여 관심 있는 공간 항목의 구성요소 데이터 업데이트를 추적할 수 있습니다(can).

런타임은 애플리케이션이 먼저 xrCreateSpatialDiscoverySnapshotAsyncEXT를 호출할 때까지 기다리지 않고 탐색 추천 이벤트를 큐에 추가할 수 있습니다(may). 예를 들어 런타임은 XrSpatialContextEXT의 구성, 사용자 주변 환경에 대한 자체 이해 (새 항목 검색 또는 기존 항목 손실)를 기반으로 검색 추천 이벤트를 큐에 추가할지 결정할 수 있습니다. 또는 시스템 리소스에 과부하가 걸리지 않도록 애플리케이션에 적절한 검색 요청 주기를 힌트로 제공할 수 있습니다. XrSpatialContextEXT의 전체 기간 동안 사용자의 환경에서 항목이 발견되지 않으면 런타임은 XrSpatialContextEXT에 대해 이 이벤트를 큐에 추가하지 않도록 선택할 수 있습니다.

런타임은 애플리케이션이 xrCreateSpatialContextCompleteEXT를 사용하여 생성을 완료할 때까지 지정된 spatialContext에 대해 이 이벤트를 큐에 추가하면 안 됩니다.

애플리케이션이 xrDestroySpatialContextEXT를 호출한 후 런타임은 해당 공간 컨텍스트에 대한 탐색 추천 이벤트를 더 이상 큐에 추가하지 않아야 하며 xrPollEvent에서 해당 컨텍스트에 대한 이벤트를 반환하지 않아야 합니다.

올바른 사용 (암시적)

구성요소 데이터 쿼리

xrQuerySpatialComponentDataEXT 함수는 다음과 같이 정의됩니다.

XrResult xrQuerySpatialComponentDataEXT(
    XrSpatialSnapshotEXT                        snapshot,
    const XrSpatialComponentDataQueryConditionEXT* queryCondition,
    XrSpatialComponentDataQueryResultEXT*       queryResult);

파라미터 설명

애플리케이션은 XrSpatialComponentDataQueryConditionEXT :: componentTypes의 각 XrSpatialComponentTypeEXT에 해당하는 XrSpatialComponentDataQueryResultEXT :: next에 목록 구조를 연결하여 xrQuerySpatialComponentDataEXT를 사용해 스냅샷에 있는 항목의 구성요소 데이터를 쿼리할 수 있습니다.

애플리케이션이 XrSpatialComponentDataQueryConditionEXT :: componentTypes에 나열된 구성요소에 상응하지 않는 목록 구조를 XrSpatialComponentDataQueryResultEXT :: next에 연결하는 경우 런타임은 XR_ERROR_VALIDATION_FAILURE를 반환해야 합니다(must).

애플리케이션은 XrSpatialComponentDataQueryConditionEXT :: componentTypes에 나열된 구성요소의 하위 집합에만 해당하는 목록 구조를 연결하도록 선택할 수 있습니다. 애플리케이션은 queryCondition를 충족하는 공간 항목의 ID와 추적 상태만 알고자 하는 경우 목록 구조를 완전히 생략하도록 선택할 수 있습니다. 런타임은 XrSpatialComponentDataQueryResultEXT :: next 체인에 목록 구조가 없는 것을 실패로 처리하면 안 됩니다(MUST).

XrEventDataReferenceSpaceChangePending이 큐에 추가되고 애플리케이션이 XrSpatialSnapshotEXT에서 구성요소 데이터를 쿼리하는 동안 XrEventDataReferenceSpaceChangePending :: changeTime가 경과한 경우 애플리케이션은 이벤트 데이터를 사용하여 그에 따라 포즈를 조정할 수 있습니다(may).

런타임은 XrSpatialComponentDataQueryConditionEXT :: componentTypes에 지정된 모든 구성요소가 있는 항목으로만 XrSpatialComponentDataQueryResultEXT :: entityIds를 채워야 합니다. XrSpatialComponentDataQueryConditionEXT :: componentTypeCount가 0인 경우 런타임은 스냅샷에 있는 모든 항목(및 추적 상태)으로 queryResult를 채워야 합니다(must). 추가 쿼리 조건이 XrSpatialComponentDataQueryConditionEXT :: next에 추가되면 런타임은 이를 구성요소 유형 가용성과 함께 'AND'로 처리해야 합니다. 즉, 런타임은 제공된 모든 조건을 충족하는 항목으로만 XrSpatialComponentDataQueryResultEXT ::entityIds를 채워야 합니다. 런타임은 XrSpatialComponentDataQueryResultEXT :: entityIds의 항목과 동일한 순서로 목록 구조의 구성요소 데이터를 채워야 합니다. 즉, 목록 구조 배열의 특정 색인에 있는 구성요소 데이터는 동일한 색인의 항목에 상응해야 합니다.

항목의 추적 상태가 XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT가 아닌 경우 런타임은 XrSpatialComponentDataQueryResultEXT에 연결된 목록 구조에 포함된 배열에서 해당 항목에 해당하는 색인의 데이터를 변경해서는 안 됩니다(MUST).

올바른 사용 (암시적)

반품 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_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

아니요

아니요

아니요

아니요

예

예

예

예

아니요

아니요 텍스트가 SVG가 아니므로 표시할 수 없음

그림 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가 애플리케이션에 반환되고 애플리케이션은 XrBoxf 및 XrSpatialMeshDataEXT 배열을 각각 XrSpatialComponentBounded3DListEXT 및 XrSpatialComponentMesh3DListEXT 구조의 일부로 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의 배열입니다.

올바른 사용 (암시적)

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 핸들을 만들 수 있습니다. 그러면 애플리케이션은 xrCreateSpatialUpdateSnapshotEXT와 함께 이러한 XrSpatialEntityEXT 핸들을 사용하여 제공된 항목의 구성요소에 관한 런타임의 최신 알려진 데이터가 포함된 업데이트 스냅샷을 만들 수 있습니다.

올바른 사용 (암시적)

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는 가능한 공간 엔티티 추적 상태를 열거합니다.

enum의 의미는 다음과 같습니다.

enum 설명

XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT

런타임이 이 항목의 추적을 중지했으며 추적을 재개하지 않습니다.

XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT

런타임에서 이 항목의 추적을 일시중지했지만 향후 추적을 재개할 수 있습니다.

XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT

런타임이 현재 이 항목을 추적하고 있으며 구성요소 데이터가 유효합니다.

추적

일시중지됨

STOPPED

그림 23. XrSpatialEntityTrackingStateEXT

  • 런타임은 공간 항목의 추적을 정지하지만 향후 추적을 재개할 가능성이 있는 경우 공간 항목의 상태를 XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT에서 XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT로 변경할 수 있습니다(may). 런타임이 이 작업을 수행할 수 있는 경우의 예로는 애플리케이션이 입력 포커스를 잃는 경우, 지정된 공간 항목이 사용자로부터 너무 멀리 떨어져 있어 정확하게 추적할 수 없는 경우, 추적 중인 항목이 너무 많아 런타임이 추적 비용을 줄이려는 경우 등이 있습니다 (이에 국한되지 않음). 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로 변경해야 합니다(must). 이러한 사례의 예로는 기기가 추적을 손실하고 추적 세션을 다시 시작하지만 환경에서 다시 현지화할 수 없으므로 이 추적 세션의 발견된 항목을 새 항목으로 처리하는 경우가 있습니다.
  • 항목의 추적 상태가 XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT로 설정되면 런타임은 이를 다른 상태로 변경해서는 안 됩니다.
  • xrQuerySpatialComponentDataEXT를 사용하여 공간 엔티티의 구성요소 데이터를 쿼리할 때 엔티티 상태가 XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT인 경우 런타임은 XrSpatialComponentDataQueryResultEXT의 다음 체인에서 애플리케이션이 제공하는 버퍼의 콘텐츠에 유효한 데이터를 설정해야 합니다(must). 항목 상태가 XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT 또는 XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT인 경우 런타임은 버퍼의 콘텐츠를 변경하면 안 됩니다.

구성요소 데이터의 두 호출 관용구

XrSpatialBufferEXT 구조는 다음과 같이 정의됩니다.

typedef struct XrSpatialBufferEXT {
    XrSpatialBufferIdEXT      bufferId;
    XrSpatialBufferTypeEXT    bufferType;
} XrSpatialBufferEXT;

회원 설명

  • bufferId: 버퍼 데이터의 XrSpatialBufferIdEXT입니다.
  • bufferType는 bufferId의 데이터 유형을 나타내는 XrSpatialBufferTypeEXT입니다. 애플리케이션은 bufferType를 사용하여 버퍼의 실제 데이터를 검색하는 데 사용할 함수를 결정할 수 있습니다.

일부 공간 구성요소에는 가변 크기 데이터가 있으므로 데이터를 검색하려면 두 번 호출 관용구를 사용해야 합니다. 이러한 경우 공간 구성요소 데이터 구조는 해당 구성요소의 데이터에 필요한 각 가변 크기 버퍼에 대해 XrSpatialBufferEXT를 제공합니다.

동일한 bufferId의 경우 런타임은 한 스냅샷에서 다른 스냅샷으로 이동하는 경우에도 한 구성요소 데이터 쿼리에서 다른 구성요소 데이터 쿼리로 동일한 데이터를 제공해야 합니다(MUST). 구성요소 데이터 쿼리 호출 간에 bufferId가 다르면 해당 구성요소의 데이터가 변경되었을 수 있음을 애플리케이션에 나타냅니다.

올바른 사용 (암시적)

XR_DEFINE_ATOM(XrSpatialBufferIdEXT)

XrSpatialBufferIdEXT는 공간 구성요소의 모든 종류의 가변 크기 데이터를 나타내는 데 사용됩니다.

런타임은 XrSpatialBufferIdEXT 및 해당 데이터를 최소한 이를 포함하는 XrSpatialSnapshotEXT의 수명 주기 동안 메모리에 보관해야 합니다(must). 런타임은 애플리케이션에서 나중에 생성하는 스냅샷의 일부로 동일한 ID를 반환하기 위해 XrSpatialSnapshotEXT의 수명 주기보다 오랫동안 XrSpatialBufferIdEXT 및 해당 데이터를 메모리에 보관할 수 있습니다. 동일한 XrSpatialBufferIdEXT의 경우 런타임은 항상 적절한 xrGetSpatialBuffer* 함수를 통해 동일한 데이터를 반환해야 합니다(must).

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의 데이터를 가져올 수 있습니다(can). 여기서 XrSpatialBufferEXT :: bufferType는 XR_SPATIAL_BUFFER_TYPE_STRING_EXT입니다.

XrSpatialBufferGetInfoEXT :: bufferId의 XrSpatialBufferTypeEXT가 XR_SPATIAL_BUFFER_TYPE_STRING_EXT가 아닌 경우 런타임은 XR_ERROR_VALIDATION_FAILURE를 반환해야 합니다(must).

XrSpatialBufferGetInfoEXT :: bufferId가 snapshot에 속하지 않는 경우 런타임은 XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT를 반환해야 합니다(must).

런타임에서 채운 buffer는 null로 끝나는 UTF-8 문자열이어야 합니다.

올바른 사용 (암시적)

  • XR_EXT_spatial_entity 확장 프로그램은 xrGetSpatialBufferStringEXT를 호출하기 전에 사용 설정해야 합니다.
  • snapshot은 유효한 XrSpatialSnapshotEXT 핸들이어야 합니다.
  • info는 유효한 XrSpatialBufferGetInfoEXT 구조에 대한 포인터여야 합니다.
  • bufferCountOutput는 uint32_t 값에 대한 포인터여야 합니다.
  • bufferCapacityInput가 0가 아닌 경우 buffer는 bufferCapacityInput char 값 배열의 포인터여야 합니다.

반품 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_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 크기를 가져오는 방법에 관한 자세한 설명은 버퍼 크기 매개변수 섹션을 참고하세요.

애플리케이션은 xrGetSpatialBufferUint8EXT를 사용하여 구성요소에서 제공하는 XrSpatialBufferEXT의 데이터를 가져올 수 있습니다. 여기서 XrSpatialBufferEXT :: bufferType는 XR_SPATIAL_BUFFER_TYPE_UINT8_EXT입니다.

XrSpatialBufferGetInfoEXT :: bufferId의 XrSpatialBufferTypeEXT가 XR_SPATIAL_BUFFER_TYPE_UINT8_EXT가 아닌 경우 런타임은 XR_ERROR_VALIDATION_FAILURE를 반환해야 합니다(must).

XrSpatialBufferGetInfoEXT :: bufferId가 snapshot에 속하지 않는 경우 런타임은 XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT를 반환해야 합니다(must).

올바른 사용 (암시적)

  • XR_EXT_spatial_entity 확장 프로그램은 xrGetSpatialBufferUint8EXT를 호출하기 전에 사용 설정해야 합니다.
  • snapshot은 유효한 XrSpatialSnapshotEXT 핸들이어야 합니다.
  • info는 유효한 XrSpatialBufferGetInfoEXT 구조에 대한 포인터여야 합니다.
  • bufferCountOutput는 uint32_t 값에 대한 포인터여야 합니다.
  • bufferCapacityInput가 0가 아닌 경우 buffer는 bufferCapacityInput uint8_t 값 배열의 포인터여야 합니다.

반품 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_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를 반환해야 합니다(must).

XrSpatialBufferGetInfoEXT :: bufferId가 snapshot에 속하지 않는 경우 런타임은 XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT를 반환해야 합니다(must).

올바른 사용 (암시적)

  • XR_EXT_spatial_entity 확장 프로그램은 xrGetSpatialBufferUint16EXT를 호출하기 전에 사용 설정해야 합니다.
  • snapshot은 유효한 XrSpatialSnapshotEXT 핸들이어야 합니다.
  • info는 유효한 XrSpatialBufferGetInfoEXT 구조에 대한 포인터여야 합니다.
  • bufferCountOutput는 uint32_t 값에 대한 포인터여야 합니다.
  • bufferCapacityInput가 0가 아닌 경우 buffer는 bufferCapacityInput uint16_t 값 배열의 포인터여야 합니다.

반품 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_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를 반환해야 합니다(must).

XrSpatialBufferGetInfoEXT :: bufferId가 snapshot에 속하지 않는 경우 런타임은 XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT를 반환해야 합니다(must).

올바른 사용 (암시적)

  • xrGetSpatialBufferUint32EXT를 호출하기 전에 XR_EXT_spatial_entity 확장 프로그램을 사용 설정해야 합니다(MUST).
  • snapshot은 유효한 XrSpatialSnapshotEXT 핸들이어야 합니다.
  • info는 유효한 XrSpatialBufferGetInfoEXT 구조에 대한 포인터여야 합니다.
  • bufferCountOutput는 uint32_t 값에 대한 포인터여야 합니다.
  • bufferCapacityInput가 0가 아닌 경우 buffer는 bufferCapacityInput uint32_t 값 배열의 포인터여야 합니다.

반품 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_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 크기를 가져오는 방법에 관한 자세한 설명은 버퍼 크기 매개변수 섹션을 참고하세요.

애플리케이션은 xrGetSpatialBufferFloatEXT를 사용하여 구성요소에서 제공하는 XrSpatialBufferEXT의 데이터를 가져올 수 있습니다. 여기서 XrSpatialBufferEXT :: bufferType는 XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT입니다.

XrSpatialBufferGetInfoEXT :: bufferId의 XrSpatialBufferTypeEXT가 XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT가 아닌 경우 런타임은 XR_ERROR_VALIDATION_FAILURE를 반환해야 합니다(must).

XrSpatialBufferGetInfoEXT :: bufferId가 snapshot에 속하지 않는 경우 런타임은 XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT를 반환해야 합니다(must).

올바른 사용 (암시적)

  • XR_EXT_spatial_entity 확장 프로그램은 xrGetSpatialBufferFloatEXT를 호출하기 전에 사용 설정해야 합니다.
  • snapshot은 유효한 XrSpatialSnapshotEXT 핸들이어야 합니다.
  • info는 유효한 XrSpatialBufferGetInfoEXT 구조에 대한 포인터여야 합니다.
  • bufferCountOutput는 uint32_t 값에 대한 포인터여야 합니다.
  • bufferCapacityInput가 0가 아닌 경우 buffer는 bufferCapacityInput float 값 배열의 포인터여야 합니다.

반품 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_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를 반환해야 합니다(must).

XrSpatialBufferGetInfoEXT :: bufferId가 snapshot에 속하지 않는 경우 런타임은 XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT를 반환해야 합니다(must).

올바른 사용 (암시적)

  • xrGetSpatialBufferVector2fEXT를 호출하기 전에 XR_EXT_spatial_entity 확장 프로그램을 사용 설정해야 합니다.
  • snapshot은 유효한 XrSpatialSnapshotEXT 핸들이어야 합니다.
  • info는 유효한 XrSpatialBufferGetInfoEXT 구조에 대한 포인터여야 합니다.
  • bufferCountOutput는 uint32_t 값에 대한 포인터여야 합니다.
  • bufferCapacityInput가 0가 아닌 경우 buffer는 bufferCapacityInput XrVector2f 구조의 배열에 대한 포인터여야 합니다.

반품 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_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를 반환해야 합니다(must).

XrSpatialBufferGetInfoEXT :: bufferId가 snapshot에 속하지 않는 경우 런타임은 XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT를 반환해야 합니다(must).

올바른 사용 (암시적)

  • xrGetSpatialBufferVector3fEXT를 호출하기 전에 XR_EXT_spatial_entity 확장 프로그램을 사용 설정해야 합니다.
  • snapshot은 유효한 XrSpatialSnapshotEXT 핸들이어야 합니다.
  • info는 유효한 XrSpatialBufferGetInfoEXT 구조에 대한 포인터여야 합니다.
  • bufferCountOutput는 uint32_t 값에 대한 포인터여야 합니다.
  • bufferCapacityInput가 0가 아닌 경우 buffer는 bufferCapacityInput XrVector3f 구조의 배열에 대한 포인터여야 합니다.

반품 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
  • XR_ERROR_VALIDATION_FAILURE

XrSpatialBufferGetInfoEXT 구조는 다음과 같이 정의됩니다.

typedef struct XrSpatialBufferGetInfoEXT {
    XrStructureType         type;
    const void*             next;
    XrSpatialBufferIdEXT    bufferId;
} XrSpatialBufferGetInfoEXT;

회원 설명

  • type는 이 구조의 XrStructureType입니다.
  • next는 NULL 또는 구조 체인의 다음 구조에 대한 포인터입니다.
  • bufferId: 데이터를 가져올 버퍼의 XrSpatialBufferIdEXT입니다.

올바른 사용 (암시적)

  • XrSpatialBufferGetInfoEXT를 사용하기 전에 XR_EXT_spatial_entity 확장 프로그램을 사용 설정해야 합니다(must).
  • 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);

파라미터 설명

애플리케이션은 xrCreateSpatialUpdateSnapshotEXT를 사용하여 스냅샷을 만들고 런타임에서 알려진 특정 항목의 최신 구성요소 데이터를 가져올 수 있습니다. 애플리케이션은 스냅샷을 만들 때 XrSpatialEntityEXT 핸들과 관심 있는 구성요소 유형을 제공할 수 있습니다.

애플리케이션은 XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes를 사용하여 데이터가 스냅샷에 포함되어야 하는 구성요소 목록을 필터링할 수 있습니다. 애플리케이션이 XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes에서 유효한 공간 구성요소 유형 목록을 제공하는 경우 런타임은 XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes에 제공된 구성요소 중 하나 이상이 있는 스냅샷에 공간 항목만 포함해야 합니다(must). 또한 런타임은 스냅샷에 있는 구성요소의 데이터만 포함해야 합니다.

spatialContext을 만들 때 XrSpatialContextCreateInfoEXT :: capabilityConfigs에 전달된 공간 기능에 대해 XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes의 XrSpatialComponentTypeEXT 중 하나라도 사용 설정되지 않은 경우 런타임은 XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT를 반환해야 합니다(must).

애플리케이션이 XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes에서 공간 구성요소 유형 목록을 제공하지 않는 경우 런타임은 XrSpatialUpdateSnapshotCreateInfoEXT :: entities에 나열된 모든 공간 항목을 스냅샷에 포함해야 하며(must) spatialContext에 구성된 기능의 사용 설정된 모든 구성요소에 관한 데이터를 포함해야 합니다(must).

런타임은 snapshot의 XrSpatialUpdateSnapshotCreateInfoEXT :: entities에 나열되지 않은 공간 항목을 포함하지 않아야 합니다(MUST).

애플리케이션은 원하는 만큼 스냅샷을 만들 수 있지만 새 스냅샷마다 할당되는 메모리에 유의해야 하며 더 이상 필요하지 않은 스냅샷은 소멸시켜야 합니다.

올바른 사용 (암시적)

반품 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT
  • XR_ERROR_TIME_INVALID
  • XR_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는 런타임이 스냅샷에 구성요소 데이터를 포함해야 하는(must) 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는 유효한 XrSpatialComponentTypeEXT 값 componentTypeCount개의 배열에 대한 포인터여야 합니다.
  • baseSpace는 유효한 XrSpace 핸들이어야 합니다(must).
  • entityCount 매개변수는 0보다 커야 합니다.
  • baseSpace와 entities의 요소는 모두 동일한 XrSession에서 생성, 할당 또는 검색해야 합니다.

스냅샷 폐기

xrDestroySpatialSnapshotEXT 함수는 다음과 같이 정의됩니다.

XrResult xrDestroySpatialSnapshotEXT(
    XrSpatialSnapshotEXT                        snapshot);

파라미터 설명

애플리케이션은 xrDestroySpatialSnapshotEXT를 호출하여 XrSpatialSnapshotEXT 핸들과 이와 연결된 리소스를 폐기할 수 있습니다.

올바른 사용 (암시적)

스레드 안전

  • snapshot 및 모든 하위 핸들에 대한 액세스는 외부에서 동기화되어야 합니다(must).

반품 코드

성공

  • XR_SUCCESS

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_RUNTIME_FAILURE

공통 구성요소

제한된 2D

구성요소 데이터

XrSpatialBounded2DDataEXT 구조는 다음과 같이 정의됩니다.

typedef struct XrSpatialBounded2DDataEXT {
    XrPosef        center;
    XrExtent2Df    extents;
} XrSpatialBounded2DDataEXT;

회원 설명

  • center는 경계가 지정된 2D 구성요소의 기하학적 중심을 정의하는 XrPosef입니다.
  • extents는 x축 (extents.width), y축 (extents.height)을 따라 경계가 지정된 2D 구성요소의 범위이며 center를 중심으로 합니다.

XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT의 extents는 평면 좌표계의 x-y 평면에서 항목의 크기를 나타냅니다. 위치가 {0, 0, 0}, 회전이 {0, 0, 0, 1} (회전 없음), 범위가 {1, 1}인 평면은 {0, 0, 0}을 중심으로 하는 1m x 1m 평면을 나타내며, 전면 법선 벡터는 구성요소 공간에서 +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가 0이 아니고 XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT가 XrSpatialComponentDataQueryConditionEXT :: componentTypes에 포함되지 않은 경우 런타임은 xrQuerySpatialComponentDataEXT에서 XR_ERROR_VALIDATION_FAILURE를 반환해야 합니다(must).

boundCount가 XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput보다 작은 경우 런타임은 xrQuerySpatialComponentDataEXT에서 XR_ERROR_SIZE_INSUFFICIENT를 반환해야 합니다(must).

xrQuerySpatialComponentDataEXT :: snapshot가 xrCreateSpatialDiscoverySnapshotCompleteEXT에서 생성된 경우 런타임은 XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace 및 XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time에서 XrSpatialBounded2DDataEXT :: center를 제공해야 합니다(must).

xrQuerySpatialComponentDataEXT :: snapshot가 xrCreateSpatialUpdateSnapshotEXT에서 생성된 경우 런타임은 XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace 및 XrSpatialUpdateSnapshotCreateInfoEXT :: time에서 XrSpatialBounded2DDataEXT :: center를 제공해야 합니다(MUST).

올바른 사용 (암시적)

  • XrSpatialComponentBounded2DListEXT를 사용하기 전에 XR_EXT_spatial_entity 확장 프로그램을 사용 설정해야 합니다(MUST).
  • type은(는) XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT여야 합니다.
  • next는 NULL 또는 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다.
  • bounds는 boundCount XrSpatialBounded2DDataEXT 구조의 배열에 대한 포인터여야 합니다(must).
  • boundCount 매개변수는 0보다 커야 합니다.
구성

일부 기능의 XrSpatialCapabilityComponentTypesEXT :: componentTypes에 XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT가 열거된 경우 애플리케이션은 XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents 목록에 enum 값을 포함하여 이를 사용 설정할 수 있습니다. 이 구성요소는 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가 0이 아니고 XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT가 XrSpatialComponentDataQueryConditionEXT :: componentTypes에 포함되지 않은 경우 런타임은 xrQuerySpatialComponentDataEXT에서 XR_ERROR_VALIDATION_FAILURE를 반환해야 합니다(must).

boundCount가 XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput보다 작은 경우 런타임은 xrQuerySpatialComponentDataEXT에서 XR_ERROR_SIZE_INSUFFICIENT를 반환해야 합니다(must).

xrQuerySpatialComponentDataEXT :: snapshot가 xrCreateSpatialDiscoverySnapshotCompleteEXT에서 생성된 경우 런타임은 XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace의 XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time에서 XrBoxf :: center를 제공해야 합니다(must).

xrQuerySpatialComponentDataEXT :: snapshot가 xrCreateSpatialUpdateSnapshotEXT에서 생성된 경우 런타임은 must XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace의 XrBoxf :: center를 XrSpatialUpdateSnapshotCreateInfoEXT :: time에 제공해야 합니다.

올바른 사용 (암시적)

  • XrSpatialComponentBounded3DListEXT를 사용하기 전에 XR_EXT_spatial_entity 확장 프로그램을 사용 설정해야 합니다.
  • type은(는) XR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT여야 합니다.
  • next는 NULL 또는 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다.
  • bounds는 boundCount XrBoxf 구조의 배열에 대한 포인터여야 합니다(MUST).
  • boundCount 매개변수는 0보다 커야 합니다.
구성

일부 기능의 XrSpatialCapabilityComponentTypesEXT :: componentTypes에 XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT가 열거된 경우 애플리케이션은 XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents 목록에 enum을 포함하여 이를 사용 설정할 수 있습니다(can). 이 구성요소는 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가 0이 아니고 XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT가 XrSpatialComponentDataQueryConditionEXT :: componentTypes에 포함되지 않은 경우 런타임은 xrQuerySpatialComponentDataEXT에서 XR_ERROR_VALIDATION_FAILURE를 반환해야 합니다(must).

parentCount가 XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput보다 작은 경우 런타임은 xrQuerySpatialComponentDataEXT에서 XR_ERROR_SIZE_INSUFFICIENT를 반환해야 합니다(must).

올바른 사용 (암시적)

  • XrSpatialComponentParentListEXT를 사용하기 전에 XR_EXT_spatial_entity 확장 프로그램을 사용 설정해야 합니다.
  • type은(는) XR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT여야 합니다.
  • next는 NULL 또는 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다.
  • parents는 parentCount XrSpatialEntityIdEXT 값 배열에 대한 포인터여야 합니다.
  • parentCount 매개변수는 0보다 커야 합니다.
구성

일부 기능의 XrSpatialCapabilityComponentTypesEXT :: componentTypes에 XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT가 열거된 경우 애플리케이션은 XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents 목록에 enum을 포함하여 이를 사용 설정할 수 있습니다(can). 이 구성요소는 XrSpatialCapabilityConfigurationBaseHeaderEXT의 다음 체인에 포함하기 위해 특별한 구성이 필요하지 않습니다.

메시 3D

구성요소 데이터

XrSpatialMeshDataEXT 구조는 다음과 같이 정의됩니다.

typedef struct XrSpatialMeshDataEXT {
    XrPosef               origin;
    XrSpatialBufferEXT    vertexBuffer;
    XrSpatialBufferEXT    indexBuffer;
} XrSpatialMeshDataEXT;

회원 설명

  • origin은 메시의 원점을 정의하는 XrPosef입니다. 메시의 모든 꼭짓점은 이 원점을 기준으로 해야 합니다.
  • vertexBuffer는 이 구성요소가 있는 항목의 꼭짓점 버퍼를 나타내는 버퍼의 ID를 제공하는 XrSpatialBufferEXT입니다. 꼭짓점의 위치는 origin에 상대적이어야 합니다.
  • indexBuffer는 삼각형 색인 배열을 나타내는 버퍼의 ID를 제공하는 XrSpatialBufferEXT로, vertexBuffer에서 메시 꼭짓점의 색인을 지정합니다. 삼각형 색인은 시계 반대 방향으로 반환되어야 하며 세 개의 색인은 하나의 삼각형을 나타냅니다.

XrSpatialMeshDataEXT를 사용하는 구성요소 유형은 vertexBuffer 및 indexBuffer의 XrSpatialBufferTypeEXT를 지정해야 합니다(must).

올바른 사용 (암시적)

데이터를 쿼리하는 구성요소 목록 구조

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가 0이 아니고 XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT가 XrSpatialComponentDataQueryConditionEXT :: componentTypes에 포함되지 않은 경우 런타임은 xrQuerySpatialComponentDataEXT에서 XR_ERROR_VALIDATION_FAILURE를 반환해야 합니다(must).

meshCount가 XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput보다 작은 경우 런타임은 xrQuerySpatialComponentDataEXT에서 XR_ERROR_SIZE_INSUFFICIENT를 반환해야 합니다(must).

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는 meshCount XrSpatialMeshDataEXT 구조의 배열에 대한 포인터여야 합니다(must).
  • meshCount 매개변수는 0보다 커야 합니다.
구성

일부 기능의 XrSpatialCapabilityComponentTypesEXT :: componentTypes에 XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT가 열거된 경우 애플리케이션은 이 구성요소를 지원하는 기능의 XrSpatialCapabilityConfigurationBaseHeaderEXT 파생 구조의 XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents 목록에 enum을 포함하여 이를 사용 설정할 수 있습니다.

이 구성요소는 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인 항목으로만 범위 지정할 수 있습니다.

올바른 사용 (암시적)

예시 코드

애플리케이션 사용

애플리케이션은 일반적으로 다음 패턴으로 공간 항목 확장 프로그램을 사용합니다.

공간 항목 검색 및 구성요소 데이터 쿼리

다음 예시 코드는 '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를 정의하는 경우,

  • 확장 프로그램은 XrSpatialDiscoverySnapshotCreateInfoEXT를 확장하는 구조를 정의하여 탐색을 위한 추가 필터를 제공할 수 있습니다. 스냅샷을 만들기 위한 필터는 공간 컨텍스트의 구성에 영향을 미치지 않아야 하며, 대신 공간 컨텍스트의 현재 구성 (따라서 기본 서비스의 현재 구성)에 의해 추적되는 스냅샷에 포함할 항목과 데이터에 관한 힌트를 런타임에 제공하는 데 사용됩니다.

  • 확장 프로그램이 새로운 XrSpatialCapabilityEXT를 정의하는 경우

  • 확장 프로그램이 새 XrSpatialCapabilityFeatureEXT를 정의하는 경우 XrSpatialCapabilityConfigurationBaseHeaderEXT의 다음 포인터에 연결할 수 있는 상응하는 구성 구조도 정의해야 합니다. 이 구조는 애플리케이션이 XrSpatialContextEXT를 만들 때 기능을 사용 설정하는 데 사용할 수 있습니다.

  • 새 XrSpatialCapabilityEXT를 정의하는 확장 프로그램은 사양에 대해 이 템플릿을 따라야 합니다.

    • 개요
    • 런타임 지원
    • 구성
    • 보장된 구성요소
    • 예제 코드
  • 새 XrSpatialComponentTypeEXT를 정의하는 확장 프로그램은 사양에 대해 이 템플릿을 따라야 합니다.

    • 구성요소 데이터
    • 데이터를 쿼리하는 구성요소 목록 구조
    • 구성
  • 애플리케이션에 XrSpatialBufferIdEXT를 제공하는 API를 작성할 때는 XrSpatialBufferTypeEXT를 함께 제공하여 애플리케이션에 버퍼의 데이터 유형을 알려야 하며, 애플리케이션은 적절한 xrGetSpatialBuffer* 함수를 사용하여 버퍼의 실제 콘텐츠를 가져올 수 있습니다.

시맨틱 라벨 디자인 및 확장 프로그램 가이드라인

이 확장 프로그램은 항목의 시맨틱 라벨 정보를 전달하는 구성요소를 정의하지 않지만, 이러한 구성요소를 정의하는 확장 프로그램의 설계 규칙과 가이드라인을 제시합니다. 다음 텍스트에서 '해야 한다' 및 '해야만 한다'는 API를 사용하는 런타임 구현 또는 애플리케이션을 제한하는 것이 아니라 이러한 기능의 작성자를 제한합니다.

  • 확장 프로그램이 XrSpatialCapabilityEXT의 시맨틱 라벨을 정의하는 경우 새 XrSpatialComponentTypeEXT와 해당 구성요소의 데이터가 될 라벨 집합('시맨틱 라벨 집합')이 포함된 새 열거형을 정의하여 이를 실행해야 합니다(should).
  • 시맨틱 라벨 세트를 나타내는 열거형에는 항목이 이 세트의 라벨로 분류되지 않음을 나타내는 값이 있어야 합니다. 이 열거자의 이름에는 'UNCATEGORIZED'가 포함되어야 합니다(예: XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT). 이 값은 런타임이 이 항목을 인식하지만 이 항목이 분류되는 다른 시맨틱 라벨 집합이 있음을 애플리케이션에 나타냅니다.
  • xrEnumerateSpatialCapabilityComponentTypesEXT에서 새로 정의된 이 XrSpatialComponentTypeEXT를 열거하면 런타임이 해당 구성요소 유형에 상응하는 시맨틱 라벨 세트 (따라서 세트에 정의된 라벨)를 지원한다는 의미입니다.
  • 애플리케이션은 구성요소 유형이 열거된 기능의 구성 구조체의 XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents 배열에 상응하는 XrSpatialComponentTypeEXT를 포함하여 이 시맨틱 라벨 세트에 속하는 라벨이 있는 항목을 검색하려는 의도를 표현합니다.
  • 단일 공간 항목에 여러 구성요소가 있을 수 있으며, 각 구성요소는 자체 시맨틱 라벨 세트의 라벨을 제공합니다. 가상의 시맨틱 라벨 세트 XrSpatialObjectSemanticLabel(의자, 소파, 테이블 등의 값을 가질 수 있음)가 있는 다음 예를 살펴보겠습니다. XrSpatialSofaBrand(IKEA, Wayfair 등의 값을 가질 수 있음) 및 XrSpatialIkeaSofa(소파의 특정 IKEA 모델 이름을 가질 수 있음) 이 시나리오에서는 동일한 소파 항목에 세 가지 구성요소 (세 가지 시맨틱 라벨 세트의 라벨)가 모두 있으며, 각 구성요소는 항목에 관한 다양한 세부정보를 제공합니다.
  • 확장 프로그램이 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;

위의 예에서 확장 프로그램은 문과 창문을 나타내는 값으로 기존 XrSpatialPlaneSemanticLabelEXT를 확장하기 위해 열거형 XrSpatialExamplePlaneSemanticLabelExtensionEXT를 정의합니다. 새 열거형의 사양에는 다음 형식의 텍스트가 포함되어야 합니다.

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
|====

새로운 매크로

새로운 기본 유형

  • XrSpatialBufferIdEXT
  • XrSpatialEntityIdEXT

새 객체 유형

새 명령어

새로운 구조

새 enum

새 enum 상수

  • XR_EXT_SPATIAL_ENTITY_EXTENSION_NAME
  • XR_EXT_spatial_entity_SPEC_VERSION
  • XrObjectType 확장:

    • XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXT
    • XR_OBJECT_TYPE_SPATIAL_ENTITY_EXT
    • XR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT
  • XrResult 확장:

    • XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT
    • XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT
    • XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT
    • XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT
    • XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT
    • XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT
  • XrStructureType 확장:

    • XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT
    • XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT
    • XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT
    • XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT
    • XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT
    • XR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT
    • XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT
    • XR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT
    • XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT
    • XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT
    • XR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXT
    • XR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT
    • XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT
    • XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT
    • XR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXT
    • XR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXT
    • XR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT

문제

  • 단일 항목은 항상 단일 기능에서만 파생되나요?

    • 해결됨
    • 답변: 아니요. 이는 자체 추적 기능과 감지된 항목을 표현하는 방식에 따라 전적으로 런타임에 달려 있습니다. 사양은 최소 기대치를 설정하기 위해 특정 기능의 보장된 구성요소를 제외하고 공간 항목의 특정 표현을 규정하지 않습니다. 런타임은 별도의 기능으로 감지된 항목을 병합하고 이를 식별하는 데 도움이 된 모든 기능의 보장된 구성요소와 함께 단일 항목으로 나타낼 수 있습니다. 예를 들어 평면 추적 기능과 객체 추적 기능 모두에서 테이블을 감지할 수 있으며, 평면 추적은 항목에 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를 모두 포함할 수 있습니다. 여기서 중요한 점은 특정 공간 항목이 특정 구성요소 유형의 구성요소를 최대 하나만 가질 수 있다는 것입니다. 따라서 서로 다른 기능에서 생성된 구성요소 데이터가 특정 항목과 충돌하는 경우 런타임은 이를 두 개의 개별 항목으로 표현해야 합니다(MUST).

버전 기록

  • 버전 1, 2024년 4월 12일 (니하브 자인, Google)

    • 초기 확장 프로그램 설명