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는capabilityCapacityInputXrSpatialCapabilityEXT 값 배열의 포인터여야 합니다.
반품 코드
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
xrEnumerateSpatialCapabilityComponentTypesEXT 함수는 다음과 같이 정의됩니다.
XrResult xrEnumerateSpatialCapabilityComponentTypesEXT(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
XrSpatialCapabilityComponentTypesEXT* capabilityComponents);
파라미터 설명
instance은 XrInstance의 핸들입니다.systemId는 공간 기능 구성요소가 열거될XrSystemId입니다.capability는 구성요소가 열거될 XrSpatialCapabilityEXT입니다.capabilityComponents는 애플리케이션에서 할당한 배열이 채워지는 입력/출력 구조인 XrSpatialCapabilityComponentTypesEXT에 대한 포인터입니다.
이 함수는 지정된 기능이 시스템의 항목에 제공하는 구성요소 유형을 구성된 대로 열거합니다.
애플리케이션은 XrSpatialCapabilityComponentTypesEXT :: componentTypes에 열거된 구성요소 유형을 사용하여 systemId가 capability에 지원하는 전체 구성요소 집합을 파악할 수 있으며, 이 목록을 사용하여 의 XrSpatialContextEXT를 만들 때 capability의 유효한 구성이 무엇인지 확인할 수 있습니다.
capability가 xrEnumerateSpatialCapabilitiesEXT에 의해 열거되지 않으면 런타임은 XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT를 반환해야 합니다(must).
런타임은 instance에 확장 프로그램이 사용 설정되지 않은 공간 구성요소 유형을 열거하면 안 됩니다(MUST).
올바른 사용 (암시적)
-
XR_EXT_spatial_entity확장 프로그램은 xrEnumerateSpatialCapabilityComponentTypesEXT를 호출하기 전에 사용 설정해야 합니다(MUST). -
instance는 유효한 XrInstance 핸들이어야 합니다. -
capability는 유효한 XrSpatialCapabilityEXT 값이어야 합니다. -
capabilityComponents는 XrSpatialCapabilityComponentTypesEXT 구조에 대한 포인터여야 합니다.
반품 코드
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
XrSpatialCapabilityComponentTypesEXT 구조는 다음과 같이 정의됩니다.
typedef struct XrSpatialCapabilityComponentTypesEXT {
XrStructureType type;
void* next;
uint32_t componentTypeCapacityInput;
uint32_t componentTypeCountOutput;
XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialCapabilityComponentTypesEXT;
회원 설명
type는 이 구조의 XrStructureType입니다.next는NULL또는 구조 체인의 다음 구조에 대한 포인터입니다. 핵심 OpenXR 또는 이 확장 프로그램에는 이러한 구조가 정의되어 있지 않습니다.componentTypeCapacityInput는 배열의 용량입니다. 필요한 용량을 가져오라는 요청을 나타내려면 0을 사용합니다.componentTypeCountOutput는 구성요소 유형 수 또는componentTypeCapacityInput가 부족한 경우 필요한 용량입니다.componentTypes는 XrSpatialComponentTypeEXT의 배열입니다.componentTypeCapacityInput가 0인 경우NULL일 수 있습니다.- 필요한
componentTypes크기를 가져오는 방법에 관한 자세한 설명은 버퍼 크기 매개변수 섹션을 참고하세요.
올바른 사용 (암시적)
-
XR_EXT_spatial_entity확장 프로그램은 XrSpatialCapabilityComponentTypesEXT를 사용하기 전에 사용 설정해야 합니다. -
type은(는)XR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT여야 합니다. -
next는NULL또는 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다. -
componentTypeCapacityInput가0가 아닌 경우componentTypes는componentTypeCapacityInputXrSpatialComponentTypeEXT 값의 배열에 대한 포인터여야 합니다.
공간 기능
typedef enum XrSpatialCapabilityFeatureEXT {
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT = 1000743000,
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT = 1000743001,
XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT = 1000744000,
XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID = 1000761000,
XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID = 1000761001,
XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID = 1000761002,
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXT = 1000782000,
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_STATIC_IMAGES_EXT = 1000782001,
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_FIXED_SIZE_IMAGES_EXT = 1000782002,
XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT = 1000783000,
XR_SPATIAL_CAPABILITY_FEATURE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialCapabilityFeatureEXT;
일부 기능에는 런타임에서 구성요소 데이터가 계산되는 방식을 구성하기 위해 애플리케이션에 노출되는 매개변수가 있습니다. 이러한 매개변수화/구성 가능성 측정기준을 기능 특성이라고 합니다. 예를 들어 이미지 추적 기능의 경우 런타임은 애플리케이션이 추적된 이미지가 고정되어 있는지 여부를 지정하는 기능을 지원할 수 있습니다.
구성 구조를 통해 이 정보를 런타임에 제공해도 연결된 항목(예: 추적된 이미지)에 있는 구성요소 유형 집합이 변경되지 않아야 합니다. 그러나 런타임은 이미지 추적 기능의 추적 기능 등을 최적화하고 애플리케이션에 더 나은 환경을 제공할 수 있습니다.
이러한 기능은 XrSpatialCapabilityFeatureEXT로 표현되며 애플리케이션은 xrEnumerateSpatialCapabilityFeaturesEXT를 사용하여 이를 열거합니다.
각 기능에는 이를 사용 설정하는 구성 구조가 있습니다. 이러한 구성 구조는 해당 기능의 XrSpatialCapabilityConfigurationBaseHeaderEXT :: next에 연결되어야 합니다.
열거형에는 다음 값이 있습니다.
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는capabilityFeatureCapacityInputXrSpatialCapabilityFeatureEXT 값 배열의 포인터여야 합니다(MUST).
반품 코드
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
공간 컨텍스트
공간 컨텍스트 만들기
XR_DEFINE_HANDLE(XrSpatialContextEXT)
XrSpatialContextEXT 핸들은 사용자 환경에서 여러 공간 항목을 검색하고 업데이트하는 리소스를 나타냅니다. 애플리케이션은 이 핸들을 사용하여 이 확장 프로그램의 다른 함수를 통해 공간 항목을 검색하고 업데이트할 수 있습니다.
xrCreateSpatialContextAsyncEXT 함수는 다음과 같이 정의됩니다.
XrResult xrCreateSpatialContextAsyncEXT(
XrSession session,
const XrSpatialContextCreateInfoEXT* createInfo,
XrFutureEXT* future);
파라미터 설명
session는 공간 컨텍스트가 활성화되는 XrSession입니다.createInfo는 공간 컨텍스트 매개변수를 지정하는 데 사용되는 XrSpatialContextCreateInfoEXT입니다.future는XrFutureEXT에 대한 포인터입니다.
애플리케이션은 다음을 통해 XrSpatialContextEXT 핸들을 만들 수 있습니다.
- XrSpatialContextCreateInfoEXT ::
capabilityConfigs에서 XrSpatialCapabilityConfigurationBaseHeaderEXT 파생 구조를 제공하여 기능을 사용 설정하고 해당 기능의 구성요소를 사용 설정합니다. - XrSpatialCapabilityFeatureEXT의 해당 구성 구조를 사용하여 기능 자체를 구성합니다.
XrSpatialContextCreateInfoEXT ::capabilityConfigCount가 0인 경우 런타임은 XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT를 반환해야 합니다(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_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXTXR_ERROR_VALIDATION_FAILUREXR_ERROR_TIME_INVALID(XR_ANDROID_spatial_annotation_tracking이 사용 설정된 경우)
XrSpatialContextCreateInfoEXT 구조는 다음과 같이 정의됩니다.
typedef struct XrSpatialContextCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t capabilityConfigCount;
const XrSpatialCapabilityConfigurationBaseHeaderEXT* const* capabilityConfigs;
} XrSpatialContextCreateInfoEXT;
회원 설명
type는 이 구조의 XrStructureType입니다.next는NULL또는 구조 체인의 다음 구조에 대한 포인터입니다. 핵심 OpenXR 또는 이 확장 프로그램에는 이러한 구조가 정의되어 있지 않습니다.capabilityConfigCount은capabilityConfigs배열의 요소 수를 설명하는uint32_t입니다.capabilityConfigs는 XrSpatialCapabilityConfigurationBaseHeaderEXT 포인터 배열의 포인터입니다.
XrSpatialContextCreateInfoEXT 구조는 XrSpatialContextEXT 핸들을 만드는 정보를 설명합니다.
올바른 사용 (암시적)
- XrSpatialContextCreateInfoEXT를 사용하기 전에
XR_EXT_spatial_entity확장 프로그램을 사용 설정해야 합니다. -
type은(는)XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT여야 합니다. -
next는NULL또는 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다. 참고: XrSpatialContextPersistenceConfigEXT -
capabilityConfigs는 유효한 XrSpatialCapabilityConfigurationBaseHeaderEXT 기반 구조capabilityConfigCount개의 배열에 대한 포인터여야 합니다(must). 참고: XrSpatialCapabilityConfigurationAnchorEXT , XrSpatialCapabilityConfigurationAnnotationTrackingANDROID , XrSpatialCapabilityConfigurationAprilTagEXT , XrSpatialCapabilityConfigurationArucoMarkerEXT , XrSpatialCapabilityConfigurationDepthRaycastANDROID , XrSpatialCapabilityConfigurationImageTrackingEXT , XrSpatialCapabilityConfigurationMeshTrackingEXT , XrSpatialCapabilityConfigurationMicroQrCodeEXT , XrSpatialCapabilityConfigurationObjectTrackingANDROID , XrSpatialCapabilityConfigurationObjectTrackingEXT , XrSpatialCapabilityConfigurationPlaneTrackingEXT , XrSpatialCapabilityConfigurationQrCodeEXT , XrSpatialCapabilityConfigurationRoomBoundaryTrackingANDROIDSYS , XrSpatialCapabilityConfigurationRoomTrackingANDROIDSYS , XrSpatialCapabilityConfigurationStreetscapeGeometryANDROIDX2 -
capabilityConfigCount매개변수는0보다 커야 합니다.
XrSpatialCapabilityConfigurationBaseHeaderEXT 구조는 다음과 같이 정의됩니다.
typedef struct XrSpatialCapabilityConfigurationBaseHeaderEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationBaseHeaderEXT;
이 구조는 API에서 직접 사용되지 않지만 하위 구조를 XrSpatialContextCreateInfoEXT와 함께 사용하여 공간 기능을 구성할 수 있습니다.
회원 설명
type는 이 구조의 XrStructureType입니다.next는NULL또는 구조 체인의 다음 구조에 대한 포인터입니다.- 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).
올바른 사용 (암시적)
-
XR_EXT_spatial_entity확장 프로그램은 XrSpatialCapabilityConfigurationBaseHeaderEXT를 사용하기 전에 사용 설정해야 합니다. -
next는NULL또는 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다. -
capability는 유효한 XrSpatialCapabilityEXT 값이어야 합니다. -
enabledComponents는 유효한 XrSpatialComponentTypeEXT 값enabledComponentCount개의 배열에 대한 포인터여야 합니다. -
enabledComponentCount매개변수는0보다 커야 합니다.
xrCreateSpatialContextCompleteEXT 함수는 다음과 같이 정의됩니다.
XrResult xrCreateSpatialContextCompleteEXT(
XrSession session,
XrFutureEXT future,
XrCreateSpatialContextCompletionEXT* completion);
파라미터 설명
session는 이전에 xrCreateSpatialContextAsyncEXT ::session에 전달된 XrSession입니다.future는 xrCreateSpatialContextAsyncEXT에서 수신된XrFutureEXT입니다.completion는 XrCreateSpatialContextCompletionEXT에 대한 포인터입니다.
xrCreateSpatialContextCompleteEXT는 xrCreateSpatialContextAsyncEXT에서 시작한 비동기 작업을 완료합니다. future가 준비 상태가 아니면 런타임은 XR_ERROR_FUTURE_PENDING_EXT를 반환해야 합니다(MUST). future가 이미 완료되었거나 취소된 경우 런타임은 XR_ERROR_FUTURE_INVALID_EXT를 반환해야 합니다(MUST).
올바른 사용 (암시적)
- xrCreateSpatialContextCompleteEXT를 호출하기 전에
XR_EXT_spatial_entity확장 프로그램을 사용 설정해야 합니다. -
session는 유효한 XrSession 핸들이어야 합니다. -
completion는 XrCreateSpatialContextCompletionEXT 구조체에 대한 포인터여야 합니다(MUST).
반품 코드
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_FUTURE_INVALID_EXTXR_ERROR_FUTURE_PENDING_EXTXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
XrCreateSpatialContextCompletionEXT 구조는 다음과 같이 정의됩니다.
typedef struct XrCreateSpatialContextCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialContextEXT spatialContext;
} XrCreateSpatialContextCompletionEXT;
회원 설명
type는 이 구조의 XrStructureType입니다.next는NULL또는 구조 체인의 다음 구조에 대한 포인터입니다.futureResult는 공간 컨텍스트 생성 작업의 XrResult입니다.spatialContext는 xrCreateSpatialContextAsyncEXT ::createInfo의 데이터와 구성을 사용하여 생성된 XrSpatialContextEXT입니다.
향후 반품 코드
futureResult 값:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT
futureResult가 성공 코드인 경우 spatialContext는 유효해야 합니다. spatialContext가 유효한 경우 xrCreateSpatialContextAsyncEXT :: session의 수명 주기 내에서만 또는 애플리케이션이 xrDestroySpatialContextEXT를 사용하여 spatialContext를 소멸시킬 때까지(둘 중 먼저 발생하는 시점) 유효합니다.
올바른 사용 (암시적)
-
XR_EXT_spatial_entity확장 프로그램은 XrCreateSpatialContextCompletionEXT를 사용하기 전에 사용 설정되어야 합니다(MUST). -
type은(는)XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT여야 합니다. -
next는NULL또는 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다. -
futureResult는 유효한 XrResult 값이어야 합니다. -
spatialContext가 XR_NULL_HANDLE이 아닌 경우spatialContext는 유효한 XrSpatialContextEXT 핸들이어야 합니다.
공간 컨텍스트 폐기
xrDestroySpatialContextEXT 함수는 다음과 같이 정의됩니다.
XrResult xrDestroySpatialContextEXT(
XrSpatialContextEXT spatialContext);
파라미터 설명
spatialContext는 이전에 xrCreateSpatialContextAsyncEXT로 만든 XrSpatialContextEXT입니다.
애플리케이션은 공간 엔티티 검색 및 업데이트 작업을 완료한 후 xrDestroySpatialContextEXT 함수를 호출하여 spatialContext 핸들과 기본 리소스를 해제할 수 있습니다. spatialContext와 동일한 공간 기능으로 생성된 다른 유효한 XrSpatialContextEXT가 없는 경우 이 호출은 시스템 리소스를 절약하기 위해 해당 기능에 필요한 추적 서비스를 사용 중지하도록 런타임에 제안하는 역할을 합니다.
올바른 사용 (암시적)
-
XR_EXT_spatial_entity확장 프로그램은 xrDestroySpatialContextEXT를 호출하기 전에 사용 설정해야 합니다. -
spatialContext는 유효한 XrSpatialContextEXT 핸들이어야 합니다.
스레드 안전
spatialContext및 모든 하위 핸들에 대한 액세스는 외부에서 동기화되어야 합니다(must).
반품 코드
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
공간 항목 표현
공간 엔티티 ID
XR_DEFINE_ATOM(XrSpatialEntityIdEXT)
XrSpatialEntityIdEXT는 사용자의 공간 환경에서 런타임에 의해 발견된 모든 종류의 항목을 나타내는 데 사용됩니다. XrSpatialEntityIdEXT는 발견된 XrSpatialContextEXT에 유효하며 런타임은 동일한 XrSpatialContextEXT 내의 다른 항목에 동일한 XrSpatialEntityIdEXT를 재사용해서는 안 됩니다. 또한 런타임은 동일한 항목을 나타내는지 여부와 관계없이 동일한 XrSession 내에서 여러 XrSpatialContextEXT에 걸쳐 동일한 XrSpatialEntityIdEXT를 재사용하면 안 됩니다(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);
파라미터 설명
spatialContext는 이전에 xrCreateSpatialContextAsyncEXT를 사용하여 만든 XrSpatialContextEXT입니다.createInfo은 XrSpatialEntityFromIdCreateInfoEXT 구조에 대한 포인터입니다.spatialEntity는 반환된 XrSpatialEntityEXT 핸들입니다.
애플리케이션은 xrCreateSpatialEntityFromIdEXT를 사용하여 사용자의 환경에 존재하는 항목에 대한 참조인 XrSpatialEntityEXT 핸들을 만들 수 있습니다.
XrSpatialEntityFromIdCreateInfoEXT :: entityId가 spatialContext의 유효한 ID가 아닌 경우 런타임은 XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT를 반환해야 합니다(must).
올바른 사용 (암시적)
- xrCreateSpatialEntityFromIdEXT를 호출하기 전에
XR_EXT_spatial_entity확장 프로그램을 사용 설정해야 합니다(must). -
spatialContext는 유효한 XrSpatialContextEXT 핸들이어야 합니다. -
createInfo는 유효한 XrSpatialEntityFromIdCreateInfoEXT 구조에 대한 포인터여야 합니다. -
spatialEntity는 XrSpatialEntityEXT 핸들의 포인터여야 합니다(must).
반품 코드
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
XrSpatialEntityFromIdCreateInfoEXT 구조는 다음과 같이 정의됩니다.
typedef struct XrSpatialEntityFromIdCreateInfoEXT {
XrStructureType type;
const void* next;
XrSpatialEntityIdEXT entityId;
} XrSpatialEntityFromIdCreateInfoEXT;
회원 설명
type는 이 구조의 XrStructureType입니다.next는NULL또는 구조 체인의 다음 구조에 대한 포인터입니다. 핵심 OpenXR 또는 이 확장 프로그램에는 이러한 구조가 정의되어 있지 않습니다.entityId는 애플리케이션에서 핸들을 만들려는 항목의XrSpatialEntityIdEXT입니다.
올바른 사용 (암시적)
-
XR_EXT_spatial_entity확장 프로그램은 XrSpatialEntityFromIdCreateInfoEXT를 사용하기 전에 사용 설정해야 합니다. -
type은(는)XR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXT여야 합니다. -
next는NULL또는 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다.
공간 엔티티 핸들 폐기
xrDestroySpatialEntityEXT 함수는 다음과 같이 정의됩니다.
XrResult xrDestroySpatialEntityEXT(
XrSpatialEntityEXT spatialEntity);
파라미터 설명
spatialEntity은 이전에 xrCreateSpatialEntityFromIdEXT와 같은 함수로 만든 XrSpatialEntityEXT의 핸들입니다.
애플리케이션은 이 핸들에서 참조하는 항목에 더 이상 관심이 없는 경우 xrDestroySpatialEntityEXT를 사용하여 spatialEntity 핸들을 해제할 수 있습니다.
올바른 사용 (암시적)
- xrDestroySpatialEntityEXT를 호출하기 전에
XR_EXT_spatial_entity확장 프로그램을 사용 설정해야 합니다. -
spatialEntity는 유효한 XrSpatialEntityEXT 핸들이어야 합니다.
스레드 안전
spatialEntity및 모든 하위 핸들에 대한 액세스는 외부에서 동기화되어야 합니다(must).
반품 코드
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
공간 스냅샷
XR_DEFINE_HANDLE(XrSpatialSnapshotEXT)
애플리케이션은 공간 항목을 검색하거나 알려진 공간 항목에 관한 정보를 업데이트하기 위해 공간 스냅샷을 만들 수 있습니다. XrSpatialSnapshotEXT 핸들은 검색되거나 업데이트된 공간 항목의 변경 불가능한 데이터와 애플리케이션에서 선택한 구성요소의 하위 집합을 나타냅니다. 공간 스냅샷은 항목과 구성요소 데이터의 일관된 뷰를 나타냅니다. 스냅샷이 생성되면 스냅샷이 유효한 동안 스냅샷의 데이터가 일정하게 유지되어야 합니다.
애플리케이션은 원하는 만큼 스냅샷을 만들 수 있지만 새 스냅샷마다 할당되는 메모리에 유의해야 하며 더 이상 필요하지 않은 스냅샷은 소멸시켜야 합니다.
탐색 스냅샷 만들기
xrCreateSpatialDiscoverySnapshotAsyncEXT 함수는 다음과 같이 정의됩니다.
XrResult xrCreateSpatialDiscoverySnapshotAsyncEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialDiscoverySnapshotCreateInfoEXT* createInfo,
XrFutureEXT* future);
파라미터 설명
spatialContext는 이전에 xrCreateSpatialContextAsyncEXT를 사용하여 만든 XrSpatialContextEXT입니다.createInfo는 XrSpatialDiscoverySnapshotCreateInfoEXT에 대한 포인터입니다.future는XrFutureEXT에 대한 포인터입니다.
애플리케이션은 xrCreateSpatialDiscoverySnapshotAsyncEXT를 사용하여 탐색 스냅샷을 만들어 공간 엔티티를 탐색할 수 있습니다.
이 함수는 비동기 작업을 시작하고 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를 오류 코드로 설정하면 안 됩니다.
올바른 사용 (암시적)
- xrCreateSpatialDiscoverySnapshotAsyncEXT를 호출하기 전에
XR_EXT_spatial_entity확장 프로그램을 사용 설정해야 합니다(must). -
spatialContext는 유효한 XrSpatialContextEXT 핸들이어야 합니다. -
createInfo는 유효한 XrSpatialDiscoverySnapshotCreateInfoEXT 구조에 대한 포인터여야 합니다. -
future는XrFutureEXT값에 대한 포인터여야 합니다.
반품 코드
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXTXR_ERROR_VALIDATION_FAILURE
XrSpatialDiscoverySnapshotCreateInfoEXT 구조는 다음과 같이 정의됩니다.
typedef struct XrSpatialDiscoverySnapshotCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialDiscoverySnapshotCreateInfoEXT;
회원 설명
type는 이 구조의 XrStructureType입니다.next는NULL또는 구조 체인의 다음 구조에 대한 포인터입니다. 핵심 OpenXR 또는 이 확장 프로그램에는 이러한 구조가 정의되어 있지 않습니다.componentTypeCount은componentTypes배열의 요소 수를 설명하는uint32_t입니다.componentTypes는 XrSpatialComponentTypeEXT의 배열입니다.
XrSpatialDiscoverySnapshotCreateInfoEXT 구조는 공간 엔티티를 검색할 때 XrSpatialSnapshotEXT 핸들을 만드는 정보를 설명합니다.
올바른 사용 (암시적)
-
XR_EXT_spatial_entity확장 프로그램은 XrSpatialDiscoverySnapshotCreateInfoEXT를 사용하기 전에 사용 설정해야 합니다. -
type은(는)XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT여야 합니다. -
next는NULL또는 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다. 참고: XrSpatialBoundsBoxfANDROID , XrSpatialBoundsFrustumfANDROID , XrSpatialBoundsSpherefANDROID , XrSpatialDiscoveryPersistenceContextFilterANDROIDX1 , XrSpatialDiscoveryPersistenceUuidFilterEXT , XrSpatialDiscoveryRoomBoundaryFilterANDROIDSYS , XrSpatialDiscoveryUniqueEntitiesFilterANDROID , XrSpatialFilterTrackingStateEXT , XrSpatialRaycastInfoANDROID -
componentTypeCount가0가 아닌 경우componentTypes는 유효한 XrSpatialComponentTypeEXT 값componentTypeCount개의 배열에 대한 포인터여야 합니다.
xrCreateSpatialDiscoverySnapshotCompleteEXT 함수는 다음과 같이 정의됩니다.
XrResult xrCreateSpatialDiscoverySnapshotCompleteEXT(
XrSpatialContextEXT spatialContext,
const XrCreateSpatialDiscoverySnapshotCompletionInfoEXT* createSnapshotCompletionInfo,
XrCreateSpatialDiscoverySnapshotCompletionEXT* completion);
파라미터 설명
spatialContext는 이전에 xrCreateSpatialDiscoverySnapshotAsyncEXT ::spatialContext에 전달된 XrSpatialContextEXT입니다.createSnapshotCompletionInfo는 탐색 스냅샷 생성 요청 완료에 관한 정보를 제공하는 XrCreateSpatialDiscoverySnapshotCompletionInfoEXT의 포인터입니다.completion은 XrCreateSpatialDiscoverySnapshotCompletionEXT에 대한 포인터입니다.
xrCreateSpatialDiscoverySnapshotCompleteEXT는 xrCreateSpatialDiscoverySnapshotAsyncEXT에서 시작한 비동기 작업을 완료합니다. XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future가 준비 상태가 아닌 경우 런타임은 XR_ERROR_FUTURE_PENDING_EXT를 반환해야 합니다(must). XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future가 이미 완료되었거나 취소된 경우 런타임은 XR_ERROR_FUTURE_INVALID_EXT를 반환해야 합니다(must).
올바른 사용 (암시적)
- xrCreateSpatialDiscoverySnapshotCompleteEXT를 호출하기 전에
XR_EXT_spatial_entity확장 프로그램을 사용 설정해야 합니다(must). -
spatialContext는 유효한 XrSpatialContextEXT 핸들이어야 합니다. -
createSnapshotCompletionInfo는 유효한 XrCreateSpatialDiscoverySnapshotCompletionInfoEXT 구조에 대한 포인터여야 합니다. -
completion는 XrCreateSpatialDiscoverySnapshotCompletionEXT 구조에 대한 포인터여야 합니다(must).
반품 코드
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_FUTURE_INVALID_EXTXR_ERROR_FUTURE_PENDING_EXTXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
XrCreateSpatialDiscoverySnapshotCompletionInfoEXT 구조는 다음과 같이 정의됩니다.
typedef struct XrCreateSpatialDiscoverySnapshotCompletionInfoEXT {
XrStructureType type;
const void* next;
XrSpace baseSpace;
XrTime time;
XrFutureEXT future;
} XrCreateSpatialDiscoverySnapshotCompletionInfoEXT;
회원 설명
type는 이 구조의 XrStructureType입니다.next는NULL또는 구조 체인의 다음 구조에 대한 포인터입니다.baseSpace는 검색 XrSpatialSnapshotEXT의 모든 위치가 있는 XrSpace입니다.time은 검색 XrSpatialSnapshotEXT의 모든 위치가 배치되는XrTime입니다.future는 xrCreateSpatialDiscoverySnapshotAsyncEXT에서 수신된XrFutureEXT입니다.
생성된 스냅샷에 포함된 다양한 구성요소 데이터의 위치는 time에 있는 baseSpace에 표시됩니다.
올바른 사용 (암시적)
-
XR_EXT_spatial_entity확장 프로그램은 XrCreateSpatialDiscoverySnapshotCompletionInfoEXT를 사용하기 전에 사용 설정해야 합니다. -
type은(는)XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT여야 합니다. -
next는NULL또는 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다. -
baseSpace는 유효한 XrSpace 핸들이어야 합니다(must).
XrCreateSpatialDiscoverySnapshotCompletionEXT 구조는 다음과 같이 정의됩니다.
typedef struct XrCreateSpatialDiscoverySnapshotCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialSnapshotEXT snapshot;
} XrCreateSpatialDiscoverySnapshotCompletionEXT;
회원 설명
type는 이 구조의 XrStructureType입니다.next는NULL또는 구조 체인의 다음 구조에 대한 포인터입니다.futureResult는 공간 탐색 스냅샷 생성 작업의 XrResult입니다.snapshot는 발견된 공간 엔티티의 구성요소 데이터를 쿼리하는 데 사용할 수 있는 XrSpatialSnapshotEXT입니다.
향후 반품 코드
futureResult 값:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHED
올바른 사용 (암시적)
-
XR_EXT_spatial_entity확장 프로그램은 XrCreateSpatialDiscoverySnapshotCompletionEXT를 사용하기 전에 사용 설정해야 합니다. -
type은(는)XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT여야 합니다. -
next는NULL또는 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다. -
futureResult는 유효한 XrResult 값이어야 합니다. -
snapshot가 XR_NULL_HANDLE이 아닌 경우snapshot는 유효한 XrSpatialSnapshotEXT 핸들이어야 합니다(must).
디스커버리 추천 이벤트
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에서 해당 컨텍스트에 대한 이벤트를 반환하지 않아야 합니다.
올바른 사용 (암시적)
- XrEventDataSpatialDiscoveryRecommendedEXT를 사용하기 전에
XR_EXT_spatial_entity확장 프로그램을 사용 설정해야 합니다. -
type은(는)XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT여야 합니다. -
next는NULL또는 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다.
구성요소 데이터 쿼리
xrQuerySpatialComponentDataEXT 함수는 다음과 같이 정의됩니다.
XrResult xrQuerySpatialComponentDataEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialComponentDataQueryConditionEXT* queryCondition,
XrSpatialComponentDataQueryResultEXT* queryResult);
파라미터 설명
snapshot는 이전에 xrCreateSpatialDiscoverySnapshotCompleteEXT 또는 xrCreateSpatialUpdateSnapshotEXT에서 제공한 XrSpatialSnapshotEXT입니다.queryCondition는 XrSpatialComponentDataQueryConditionEXT 구조에 대한 포인터입니다.queryResult는 XrSpatialComponentDataQueryResultEXT 구조에 대한 포인터입니다.
애플리케이션은 XrSpatialComponentDataQueryConditionEXT :: componentTypes의 각 XrSpatialComponentTypeEXT에 해당하는 XrSpatialComponentDataQueryResultEXT :: next에 목록 구조를 연결하여 xrQuerySpatialComponentDataEXT를 사용해 스냅샷에 있는 항목의 구성요소 데이터를 쿼리할 수 있습니다.
애플리케이션이 XrSpatialComponentDataQueryConditionEXT :: componentTypes에 나열된 구성요소에 상응하지 않는 목록 구조를 XrSpatialComponentDataQueryResultEXT :: next에 연결하는 경우 런타임은 XR_ERROR_VALIDATION_FAILURE를 반환해야 합니다(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_EXT_spatial_entity확장 프로그램은 xrQuerySpatialComponentDataEXT를 호출하기 전에 사용 설정해야 합니다. -
snapshot은 유효한 XrSpatialSnapshotEXT 핸들이어야 합니다. -
queryCondition는 유효한 XrSpatialComponentDataQueryConditionEXT 구조에 대한 포인터여야 합니다. -
queryResult는 XrSpatialComponentDataQueryResultEXT 구조에 대한 포인터여야 합니다(must).
반품 코드
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_VALIDATION_FAILURE
예를 들어 애플리케이션은 5개의 항목이 포함된 XrSpatialSnapshotEXT를 만듭니다. 여기서 -
- 항목 1과 2에는 구성요소
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT및XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT가 있습니다. - 항목 3과 4에는
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT및XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT구성요소가 있습니다. - 항목 5에는
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT및XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT구성요소가 있습니다.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
1
1
2
2
3
3
4
4
5
5
Bounded2D
Bounded2D
예
예
예
예
아니요
아니요
아니요
아니요
예
예
부모
부모
예
예
예
예
아니요
아니요
아니요
아니요
아니요
아니요
Mesh3D
Mesh3D
아니요
아니요
아니요
아니요
예
예
예
예
예
예
Bounded3D
Bounded3D
아니요
아니요
아니요
아니요
예
예
예
예
아니요
그림 20. 스냅샷 예시
쿼리 조건에 XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT가 나열된 위 스냅샷에서 xrQuerySpatialComponentDataEXT를 호출하면 항목 #1, #2, #5가 애플리케이션에 반환되고 애플리케이션은 XrSpatialComponentBounded2DListEXT 구조의 일부로 XrSpatialBounded2DDataEXT 배열을 XrSpatialComponentDataQueryResultEXT의 다음 체인에 연결하여 bounded2D 데이터를 가져올 수 있습니다.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
1
1
2
2
5
5
Bounded2D
Bounded2D
entityId #1의 데이터
항목 데이터…
entityId #2의 데이터
항목 데이터…
entityId #5의 데이터
항목 데이터…
entityIds
entityIds
다음
다음
XrSpatialComponent DataQueryResultEXT
XrSpatialComponent Dat…
bounds
bounds
XrSpatialComponent Bounded2DListEXT
XrSpatialComponent Bou… 텍스트가 SVG가 아님 - 표시할 수 없음
그림 21. 쿼리 결과 예시
쿼리 조건에 나열된 XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT 및 XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT 구성요소를 사용하여 위 스냅샷에서 xrQuerySpatialComponentDataEXT를 실행하면 항목 #3과 #4가 애플리케이션에 반환되고 애플리케이션은 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의 배열입니다.
올바른 사용 (암시적)
- XrSpatialComponentDataQueryConditionEXT를 사용하기 전에
XR_EXT_spatial_entity확장 프로그램을 사용 설정해야 합니다. -
type은(는)XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT여야 합니다. -
next는NULL또는 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다. 참고: XrSpatialDiscoveryPersistenceUuidFilterEXT , XrSpatialFilterArchetypeEXT , XrSpatialFilterTrackingStateEXT -
componentTypeCount가0가 아닌 경우componentTypes는 유효한 XrSpatialComponentTypeEXT 값componentTypeCount개의 배열에 대한 포인터여야 합니다.
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 핸들을 사용하여 제공된 항목의 구성요소에 관한 런타임의 최신 알려진 데이터가 포함된 업데이트 스냅샷을 만들 수 있습니다.
올바른 사용 (암시적)
- XrSpatialComponentDataQueryResultEXT를 사용하기 전에
XR_EXT_spatial_entity확장 프로그램을 사용 설정해야 합니다. -
type은(는)XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT여야 합니다. -
next는NULL또는 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다. 참고 항목: XrSpatialComponentAnchorListEXT , XrSpatialComponentAnnotationQuadListANDROID , XrSpatialComponentBounded2DListEXT , XrSpatialComponentBounded3DListEXT , XrSpatialComponentConfidenceListANDROIDSYS , XrSpatialComponentImage2DListEXT , XrSpatialComponentKeyboardSemanticLabelListEXT , XrSpatialComponentMarkerListEXT , XrSpatialComponentMaterialTypeListANDROIDSYS , XrSpatialComponentMesh2DListEXT , XrSpatialComponentMesh3DListEXT , XrSpatialComponentMesh3DNormalsListEXT , XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT , XrSpatialComponentMesh3DVertexSemanticLabelsListEXT , XrSpatialComponentMouseSemanticLabelListEXT , XrSpatialComponentObjectSemanticLabelListANDROID , XrSpatialComponentObjectSemanticLabelListEXT , XrSpatialComponentOccupancyGridListANDROIDX1 , XrSpatialComponentParentListEXT , XrSpatialComponentPersistenceListEXT , XrSpatialComponentPersistenceScopesListANDROIDX1 , XrSpatialComponentPlaneAlignmentListEXT , XrSpatialComponentPlaneSemanticLabelListEXT , XrSpatialComponentPolygon2DListEXT , XrSpatialComponentRaycastResultListANDROID , XrSpatialComponentRoomEmptinessListANDROIDSYS , XrSpatialComponentRoomListANDROIDSYS , XrSpatialComponentStreetscapeGeometryMetadataListANDROIDX2 , XrSpatialComponentSubsumedByListANDROID -
entityIdCapacityInput가0가 아닌 경우entityIds는entityIdCapacityInputXrSpatialEntityIdEXT값 배열의 포인터여야 합니다. -
entityStateCapacityInput가0가 아닌 경우entityStates는entityStateCapacityInputXrSpatialEntityTrackingStateEXT 값 배열의 포인터여야 합니다.
typedef enum XrSpatialEntityTrackingStateEXT {
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT = 1,
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT = 2,
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT = 3,
XR_SPATIAL_ENTITY_TRACKING_STATE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialEntityTrackingStateEXT;
XrSpatialEntityTrackingStateEXT는 가능한 공간 엔티티 추적 상태를 열거합니다.
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_EXT_spatial_entity확장 프로그램은 XrSpatialBufferEXT를 사용하기 전에 사용 설정해야 합니다. -
bufferType는 유효한 XrSpatialBufferTypeEXT 값이어야 합니다.
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는bufferCapacityInputchar 값 배열의 포인터여야 합니다.
반품 코드
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
xrGetSpatialBufferUint8EXT 함수는 다음과 같이 정의됩니다.
XrResult xrGetSpatialBufferUint8EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint8_t* buffer);
파라미터 설명
snapshot은 XrSpatialSnapshotEXT의 핸들입니다.info는 쿼리할 버퍼에 관한 정보를 보유합니다.bufferCapacityInput는 배열의 용량입니다. 필요한 용량을 가져오라는 요청을 나타내려면 0을 사용합니다.bufferCountOutput는buffer배열의 요소 수 또는bufferCapacityInput가 부족한 경우 필요한 용량입니다.buffer는uint8_t의 배열입니다.bufferCapacityInput가 0인 경우NULL일 수 있습니다.- 필요한
buffer크기를 가져오는 방법에 관한 자세한 설명은 버퍼 크기 매개변수 섹션을 참고하세요.
애플리케이션은 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는bufferCapacityInputuint8_t값 배열의 포인터여야 합니다.
반품 코드
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
xrGetSpatialBufferUint16EXT 함수는 다음과 같이 정의됩니다.
XrResult xrGetSpatialBufferUint16EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint16_t* buffer);
파라미터 설명
snapshot은 XrSpatialSnapshotEXT의 핸들입니다.info는 쿼리할 버퍼에 관한 정보를 보유합니다.bufferCapacityInput는 배열의 용량입니다. 필요한 용량을 가져오라는 요청을 나타내려면 0을 사용합니다.bufferCountOutput는buffer배열의 요소 수 또는bufferCapacityInput가 부족한 경우 필요한 용량입니다.buffer는uint16_t의 배열입니다.bufferCapacityInput가 0인 경우NULL일 수 있습니다.- 필요한
buffer크기를 가져오는 방법에 관한 자세한 설명은 버퍼 크기 매개변수 섹션을 참고하세요.
애플리케이션은 xrGetSpatialBufferUint16EXT를 사용하여 구성요소에서 제공하는 XrSpatialBufferEXT의 데이터를 가져올 수 있습니다. 여기서 XrSpatialBufferEXT :: bufferType는 XR_SPATIAL_BUFFER_TYPE_UINT16_EXT입니다.
XrSpatialBufferGetInfoEXT :: bufferId의 XrSpatialBufferTypeEXT가 XR_SPATIAL_BUFFER_TYPE_UINT16_EXT가 아닌 경우 런타임은 XR_ERROR_VALIDATION_FAILURE를 반환해야 합니다(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는bufferCapacityInputuint16_t값 배열의 포인터여야 합니다.
반품 코드
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
xrGetSpatialBufferUint32EXT 함수는 다음과 같이 정의됩니다.
XrResult xrGetSpatialBufferUint32EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint32_t* buffer);
파라미터 설명
snapshot은 XrSpatialSnapshotEXT의 핸들입니다.info는 쿼리할 버퍼에 관한 정보를 보유합니다.bufferCapacityInput는 배열의 용량입니다. 필요한 용량을 가져오라는 요청을 나타내려면 0을 사용합니다.bufferCountOutput는buffer배열의 요소 수 또는bufferCapacityInput가 부족한 경우 필요한 용량입니다.buffer는uint32_t의 배열입니다.bufferCapacityInput가 0인 경우NULL일 수 있습니다.- 필요한
buffer크기를 가져오는 방법에 관한 자세한 설명은 버퍼 크기 매개변수 섹션을 참고하세요.
애플리케이션은 xrGetSpatialBufferUint32EXT를 사용하여 구성요소에서 제공하는 XrSpatialBufferEXT의 데이터를 가져올 수 있습니다. 여기서 XrSpatialBufferEXT :: bufferType는 XR_SPATIAL_BUFFER_TYPE_UINT32_EXT입니다.
XrSpatialBufferGetInfoEXT :: bufferId의 XrSpatialBufferTypeEXT가 XR_SPATIAL_BUFFER_TYPE_UINT32_EXT가 아닌 경우 런타임은 XR_ERROR_VALIDATION_FAILURE를 반환해야 합니다(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는bufferCapacityInputuint32_t값 배열의 포인터여야 합니다.
반품 코드
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
xrGetSpatialBufferFloatEXT 함수는 다음과 같이 정의됩니다.
XrResult xrGetSpatialBufferFloatEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
float* buffer);
파라미터 설명
snapshot은 XrSpatialSnapshotEXT의 핸들입니다.info는 쿼리할 버퍼에 관한 정보를 보유합니다.bufferCapacityInput는 배열의 용량입니다. 필요한 용량을 가져오라는 요청을 나타내려면 0을 사용합니다.bufferCountOutput는buffer배열의 요소 수 또는bufferCapacityInput가 부족한 경우 필요한 용량입니다.buffer는float의 배열입니다.bufferCapacityInput가 0인 경우NULL일 수 있습니다.- 필요한
buffer크기를 가져오는 방법에 관한 자세한 설명은 버퍼 크기 매개변수 섹션을 참고하세요.
애플리케이션은 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는bufferCapacityInputfloat값 배열의 포인터여야 합니다.
반품 코드
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
xrGetSpatialBufferVector2fEXT 함수는 다음과 같이 정의됩니다.
XrResult xrGetSpatialBufferVector2fEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
XrVector2f* buffer);
파라미터 설명
snapshot은 XrSpatialSnapshotEXT의 핸들입니다.info는 쿼리할 버퍼에 관한 정보를 보유합니다.bufferCapacityInput는 배열의 용량입니다. 필요한 용량을 가져오라는 요청을 나타내려면 0을 사용합니다.bufferCountOutput는buffer배열의 요소 수 또는bufferCapacityInput가 부족한 경우 필요한 용량입니다.buffer는 XrVector2f의 배열입니다.bufferCapacityInput가 0인 경우NULL일 수 있습니다.- 필요한
buffer크기를 가져오는 방법에 관한 자세한 설명은 버퍼 크기 매개변수 섹션을 참고하세요.
애플리케이션은 xrGetSpatialBufferVector2fEXT를 사용하여 구성요소에서 제공하는 XrSpatialBufferEXT의 데이터를 가져올 수 있습니다. 여기서 XrSpatialBufferEXT :: bufferType는 XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT입니다.
XrSpatialBufferGetInfoEXT :: bufferId의 XrSpatialBufferTypeEXT가 XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT가 아닌 경우 런타임은 XR_ERROR_VALIDATION_FAILURE를 반환해야 합니다(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는bufferCapacityInputXrVector2f 구조의 배열에 대한 포인터여야 합니다.
반품 코드
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
xrGetSpatialBufferVector3fEXT 함수는 다음과 같이 정의됩니다.
XrResult xrGetSpatialBufferVector3fEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
XrVector3f* buffer);
파라미터 설명
snapshot은 XrSpatialSnapshotEXT의 핸들입니다.info는 쿼리할 버퍼에 관한 정보를 보유합니다.bufferCapacityInput는 배열의 용량입니다. 필요한 용량을 가져오라는 요청을 나타내려면 0을 사용합니다.bufferCountOutput는buffer배열의 요소 수 또는bufferCapacityInput가 부족한 경우 필요한 용량입니다.buffer는 XrVector3f의 배열입니다.bufferCapacityInput가 0인 경우NULL일 수 있습니다.- 필요한
buffer크기를 가져오는 방법에 관한 자세한 설명은 버퍼 크기 매개변수 섹션을 참고하세요.
애플리케이션은 xrGetSpatialBufferVector3fEXT를 사용하여 구성요소에서 제공하는 XrSpatialBufferEXT의 데이터를 가져올 수 있습니다. 여기서 XrSpatialBufferEXT :: bufferType는 XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT입니다.
XrSpatialBufferGetInfoEXT :: bufferId의 XrSpatialBufferTypeEXT가 XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT가 아닌 경우 런타임은 XR_ERROR_VALIDATION_FAILURE를 반환해야 합니다(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는bufferCapacityInputXrVector3f 구조의 배열에 대한 포인터여야 합니다.
반품 코드
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
XrSpatialBufferGetInfoEXT 구조는 다음과 같이 정의됩니다.
typedef struct XrSpatialBufferGetInfoEXT {
XrStructureType type;
const void* next;
XrSpatialBufferIdEXT bufferId;
} XrSpatialBufferGetInfoEXT;
회원 설명
type는 이 구조의 XrStructureType입니다.next는NULL또는 구조 체인의 다음 구조에 대한 포인터입니다.bufferId: 데이터를 가져올 버퍼의XrSpatialBufferIdEXT입니다.
올바른 사용 (암시적)
- 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);
파라미터 설명
spatialContext는 이전에 xrCreateSpatialContextAsyncEXT를 사용하여 만든 XrSpatialContextEXT입니다.createInfo는 XrSpatialUpdateSnapshotCreateInfoEXT에 대한 포인터입니다.snapshot는 결과 XrSpatialSnapshotEXT에 대한 포인터입니다.
애플리케이션은 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).
애플리케이션은 원하는 만큼 스냅샷을 만들 수 있지만 새 스냅샷마다 할당되는 메모리에 유의해야 하며 더 이상 필요하지 않은 스냅샷은 소멸시켜야 합니다.
올바른 사용 (암시적)
- xrCreateSpatialUpdateSnapshotEXT를 호출하기 전에
XR_EXT_spatial_entity확장 프로그램을 사용 설정해야 합니다(MUST). -
spatialContext는 유효한 XrSpatialContextEXT 핸들이어야 합니다. -
createInfo: 유효한 XrSpatialUpdateSnapshotCreateInfoEXT 구조에 대한 포인터여야 함 -
snapshot는 XrSpatialSnapshotEXT 핸들에 대한 포인터여야 합니다(must).
반품 코드
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
XrSpatialUpdateSnapshotCreateInfoEXT 구조는 다음과 같이 정의됩니다.
typedef struct XrSpatialUpdateSnapshotCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t entityCount;
const XrSpatialEntityEXT* entities;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
XrSpace baseSpace;
XrTime time;
} XrSpatialUpdateSnapshotCreateInfoEXT;
회원 설명
type는 이 구조의 XrStructureType입니다.next는NULL또는 구조 체인의 다음 구조에 대한 포인터입니다. 핵심 OpenXR 또는 이 확장 프로그램에는 이러한 구조가 정의되어 있지 않습니다.entityCount은entities배열의 요소 수를 설명하는uint32_t입니다.entities는 런타임이 스냅샷에 구성요소 데이터를 포함해야 하는(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는 유효한entityCountXrSpatialEntityEXT 핸들 배열의 포인터여야 합니다. -
componentTypeCount가0가 아닌 경우componentTypes는 유효한 XrSpatialComponentTypeEXT 값componentTypeCount개의 배열에 대한 포인터여야 합니다. -
baseSpace는 유효한 XrSpace 핸들이어야 합니다(must). -
entityCount매개변수는0보다 커야 합니다. -
baseSpace와entities의 요소는 모두 동일한 XrSession에서 생성, 할당 또는 검색해야 합니다.
스냅샷 폐기
xrDestroySpatialSnapshotEXT 함수는 다음과 같이 정의됩니다.
XrResult xrDestroySpatialSnapshotEXT(
XrSpatialSnapshotEXT snapshot);
파라미터 설명
snapshot는 이전에 xrCreateSpatialDiscoverySnapshotCompleteEXT 또는 xrCreateSpatialUpdateSnapshotEXT에서 제공한 XrSpatialSnapshotEXT입니다.
애플리케이션은 xrDestroySpatialSnapshotEXT를 호출하여 XrSpatialSnapshotEXT 핸들과 이와 연결된 리소스를 폐기할 수 있습니다.
올바른 사용 (암시적)
-
XR_EXT_spatial_entity확장 프로그램은 xrDestroySpatialSnapshotEXT를 호출하기 전에 사용 설정해야 합니다. -
snapshot은 유효한 XrSpatialSnapshotEXT 핸들이어야 합니다.
스레드 안전
snapshot및 모든 하위 핸들에 대한 액세스는 외부에서 동기화되어야 합니다(must).
반품 코드
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
공통 구성요소
제한된 2D
구성요소 데이터
XrSpatialBounded2DDataEXT 구조는 다음과 같이 정의됩니다.
typedef struct XrSpatialBounded2DDataEXT {
XrPosef center;
XrExtent2Df extents;
} XrSpatialBounded2DDataEXT;
회원 설명
center는 경계가 지정된 2D 구성요소의 기하학적 중심을 정의하는 XrPosef입니다.extents는 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는boundCountXrSpatialBounded2DDataEXT 구조의 배열에 대한 포인터여야 합니다(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는boundCountXrBoxf 구조의 배열에 대한 포인터여야 합니다(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는parentCountXrSpatialEntityIdEXT값 배열에 대한 포인터여야 합니다. -
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).
올바른 사용 (암시적)
- XrSpatialMeshDataEXT를 사용하기 전에
XR_EXT_spatial_entity확장 프로그램을 사용 설정해야 합니다. -
vertexBuffer는 유효한 XrSpatialBufferEXT 구조여야 합니다. -
indexBuffer는 유효한 XrSpatialBufferEXT 구조여야 합니다.
데이터를 쿼리하는 구성요소 목록 구조
XrSpatialComponentMesh3DListEXT 구조는 다음과 같이 정의됩니다.
typedef struct XrSpatialComponentMesh3DListEXT {
XrStructureType type;
void* next;
uint32_t meshCount;
XrSpatialMeshDataEXT* meshes;
} XrSpatialComponentMesh3DListEXT;
회원 설명
type는 이 구조의 XrStructureType입니다.next는NULL또는 구조 체인의 다음 구조에 대한 포인터입니다.meshCount은meshes배열의 요소 수를 설명하는uint32_t입니다.meshes는 XrSpatialMeshDataEXT의 배열입니다.
애플리케이션은 XrSpatialComponentDataQueryConditionEXT :: componentTypes에 XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT를 추가하고 XrSpatialComponentDataQueryResultEXT의 다음 포인터 체인에 XrSpatialComponentMesh3DListEXT를 추가하여 XrSpatialSnapshotEXT에서 공간 엔티티의 메시 3D 구성요소를 쿼리할 수 있습니다.
XrSpatialComponentMesh3DListEXT가 XrSpatialComponentDataQueryResultEXT :: next의 다음 체인에 있지만 XrSpatialComponentDataQueryConditionEXT ::componentTypeCount가 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는meshCountXrSpatialMeshDataEXT 구조의 배열에 대한 포인터여야 합니다(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인 항목으로만 범위 지정할 수 있습니다.
올바른 사용 (암시적)
-
XR_EXT_spatial_entity확장 프로그램은 XrSpatialFilterTrackingStateEXT를 사용하기 전에 사용 설정해야 합니다(MUST). -
type은(는)XR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXT여야 합니다. -
next는NULL또는 구조 체인의 다음 구조에 대한 유효한 포인터여야 합니다. -
trackingState은(는) 유효한 XrSpatialEntityTrackingStateEXT 값이어야 합니다.
예시 코드
애플리케이션 사용
애플리케이션은 일반적으로 다음 패턴으로 공간 항목 확장 프로그램을 사용합니다.
- 애플리케이션은 먼저 xrEnumerateSpatialCapabilitiesEXT를 사용하여 시스템의 공간 기능을 열거합니다. 그런 다음 반환된 XrSpatialCapabilityEXT 배열을 검사하고 xrEnumerateSpatialCapabilityComponentTypesEXT 및 xrEnumerateSpatialCapabilityFeaturesEXT를 각각 사용하여 각 기능에 지원되는 구성요소와 기능을 열거합니다. 이렇게 하면 애플리케이션이 사용 설정할 수 있는 구성요소와 기능에서 허용하는 구성을 전체적으로 파악할 수 있습니다.
- 그런 다음 애플리케이션은 특정 공간 기능 구성으로 하나 이상의 XrSpatialContextEXT 핸들을 만듭니다. 여기서 구성은 공간 컨텍스트에서 특정 기능을 사용 설정하고 구성하며 이러한 기능의 구성요소를 사용 설정하고 구성합니다.
- 각 XrSpatialContextEXT에 대해 애플리케이션은 xrCreateSpatialDiscoverySnapshotAsyncEXT를 사용하여 공간 엔티티를 검색하기 전에 해당 XrSpatialContextEXT에 대한 XrEventDataSpatialDiscoveryRecommendedEXT 이벤트를 수신할 때까지 기다립니다. 이 비동기 작업이 완료되면 애플리케이션은 XrSpatialSnapshotEXT 핸들을 수신합니다.
- 애플리케이션은 xrQuerySpatialComponentDataEXT를 사용하여 이 XrSpatialSnapshotEXT에 포함된 항목과 구성요소 데이터를 쿼리합니다. 애플리케이션은 항목 상태가
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT인 경우 XrSpatialComponentDataQueryResultEXT의 다음 체인에 연결된 구조에서 쿼리된 항목의 최신 구성요소 데이터를 읽습니다. - 애플리케이션이 흥미롭다고 식별하고 시간이 지남에 따라 업데이트를 받고자 하는 특정 항목이 있는 경우 xrCreateSpatialEntityFromIdEXT를 사용하여 해당 항목의 XrSpatialEntityEXT 핸들을 만듭니다. 애플리케이션은 xrCreateSpatialUpdateSnapshotEXT를 사용하여 이러한 관심 있는 항목의 업데이트를 가져오고 새로 생성된 XrSpatialSnapshotEXT에서 동일한 xrQuerySpatialComponentDataEXT 함수를 사용하여 이러한 항목의 최신 구성요소 데이터를 가져옵니다.
공간 항목 검색 및 구성요소 데이터 쿼리
다음 예시 코드는 'Foo' 기능의 공간 엔티티를 검색하고 구성요소 데이터를 쿼리하는 방법을 보여줍니다.
/****************************/
/* Capability definition */
/****************************/
// Foo capability has the following components -
// - XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT
#define XR_SPATIAL_CAPABILITY_FOO ((XrSpatialCapabilityEXT)1000740000U)
#define XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_FOO_EXT ((XrStructureType)1000740000U)
// Derives from XrSpatialCapabilityConfigurationBaseHeaderEXT
typedef struct XrSpatialCapabilityConfigurationFooEXT {
XrStructureType type;
const void* XR_MAY_ALIAS next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationFooEXT;
/******************************/
/* End capability definition */
/******************************/
auto waitUntilReady = [](XrFutureEXT future) {
XrFuturePollInfoEXT pollInfo{XR_TYPE_FUTURE_POLL_INFO_EXT};
XrFuturePollResultEXT pollResult{XR_TYPE_FUTURE_POLL_RESULT_EXT};
pollInfo.future = future;
do {
// sleep(1);
CHK_XR(xrPollFutureEXT(instance, &pollInfo, &pollResult));
} while (pollResult.state != XR_FUTURE_STATE_READY_EXT);
};
// Create a spatial spatial context
XrSpatialContextEXT spatialContext{};
{
const std::array<XrSpatialComponentTypeEXT, 1> enabledComponents = {
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT,
};
// Configure Foo capability for the spatial context
XrSpatialCapabilityConfigurationFooEXT fooConfig{XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_FOO_EXT};
fooConfig.capability = XR_SPATIAL_CAPABILITY_FOO;
fooConfig.enabledComponentCount = enabledComponents.size();
fooConfig.enabledComponents = enabledComponents.data();
std::vector<XrSpatialCapabilityConfigurationBaseHeaderEXT*> capabilityConfigs;
capabilityConfigs.push_back(reinterpret_cast<XrSpatialCapabilityConfigurationBaseHeaderEXT*>(&fooConfig));
XrSpatialContextCreateInfoEXT spatialContextCreateInfo{XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT};
spatialContextCreateInfo.capabilityConfigCount = capabilityConfigs.size();
spatialContextCreateInfo.capabilityConfigs = capabilityConfigs.data();
XrFutureEXT createContextFuture;
CHK_XR(xrCreateSpatialContextAsyncEXT(session, &spatialContextCreateInfo, &createContextFuture));
waitUntilReady(createContextFuture);
XrCreateSpatialContextCompletionEXT completion{XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT};
CHK_XR(xrCreateSpatialContextCompleteEXT(session, createContextFuture, &completion));
if (completion.futureResult != XR_SUCCESS) {
return;
}
spatialContext = completion.spatialContext;
}
auto discoverSpatialEntities = [&](XrSpatialContextEXT spatialContext, XrTime time) {
// We want to look for entities that have the following components.
std::array<XrSpatialComponentTypeEXT, 1> snapshotComponents {XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT};
XrSpatialDiscoverySnapshotCreateInfoEXT snapshotCreateInfo{XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT};
snapshotCreateInfo.componentTypeCount = snapshotComponents.size();
snapshotCreateInfo.componentTypes = snapshotComponents.data();
XrFutureEXT future = XR_NULL_FUTURE_EXT;
CHK_XR(xrCreateSpatialDiscoverySnapshotAsyncEXT(spatialContext, &snapshotCreateInfo, &future));
waitUntilReady(future);
XrCreateSpatialDiscoverySnapshotCompletionInfoEXT completionInfo{XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT};
completionInfo.baseSpace = localSpace;
completionInfo.time = time;
completionInfo.future = future;
XrCreateSpatialDiscoverySnapshotCompletionEXT completion{XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT};
CHK_XR(xrCreateSpatialDiscoverySnapshotCompleteEXT(spatialContext, &completionInfo, &completion));
if (completion.futureResult == XR_SUCCESS) {
// Query for the bounded2d component data
XrSpatialComponentTypeEXT componentToQuery = XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT;
XrSpatialComponentDataQueryConditionEXT queryCond{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT};
queryCond.componentTypes = &componentToQuery;
XrSpatialComponentDataQueryResultEXT queryResult{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT};
queryResult.entityIdCapacityInput = 0;
queryResult.entityIds = nullptr;
queryResult.entityStateCapacityInput = 0;
queryResult.entityStates = nullptr;
CHK_XR(xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond, &queryResult));
std::vector<XrSpatialEntityIdEXT> entityIds(queryResult.entityIdCountOutput);
std::vector<XrSpatialEntityTrackingStateEXT> entityStates(queryResult.entityStateCountOutput);
queryResult.entityIdCapacityInput = entityIds.size();
queryResult.entityIds = entityIds.data();
queryResult.entityStateCapacityInput = entityStates.size();
queryResult.entityStates = entityStates.data();
std::vector<XrSpatialBounded2DDataEXT> bounded2d(queryResult.entityIdCountOutput);
XrSpatialComponentBounded2DListEXT boundsList{XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT};
boundsList.boundCount = bounded2d.size();
boundsList.bounds = bounded2d.data();
queryResult.next = &boundsList;
CHK_XR(xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond, &queryResult));
for (int32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
if (entityStates[i] == XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT) {
// 2D extents for entity entityIds[i] is bounded2d[i].extents.
}
}
CHK_XR(xrDestroySpatialSnapshotEXT(completion.snapshot));
}
};
while (1) {
// ...
// For every frame in frame loop
// ...
XrFrameState frameState; // previously returned from xrWaitFrame
const XrTime time = frameState.predictedDisplayTime;
// Poll for the XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT event
XrEventDataBuffer event = {XR_TYPE_EVENT_DATA_BUFFER};
XrResult result = xrPollEvent(instance, &event);
if (result == XR_SUCCESS) {
switch (event.type) {
case XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT: {
const XrEventDataSpatialDiscoveryRecommendedEXT& eventdata =
*reinterpret_cast<XrEventDataSpatialDiscoveryRecommendedEXT*>(&event);
// Discover spatial entities for the context that we received the "discovery
// recommended" event for.
discoverSpatialEntities(eventdata.spatialContext, time);
break;
}
}
}
// ...
// Finish frame loop
// ...
}
CHK_XR(xrDestroySpatialContextEXT(spatialContext));
쿼리 버퍼 데이터
다음 예시 코드는 XrSpatialBufferEXT를 제공하는 구성요소의 데이터를 가져오는 방법을 보여줍니다.
/****************************/
/* Component definition */
/****************************/
// Foo component that provides an XrVector3f buffer
#define XR_SPATIAL_COMPONENT_TYPE_FOO_EXT ((XrSpatialComponentTypeEXT)1000740000U)
#define XR_TYPE_SPATIAL_COMPONENT_FOO_LIST_EXT ((XrStructureType)1000740000U)
// XrSpatialComponentFooListEXT extends XrSpatialComponentDataQueryResultEXT
typedef struct XrSpatialComponentFooListEXT {
XrStructureType type;
void* XR_MAY_ALIAS next;
uint32_t fooCount;
XrSpatialBufferEXT* foo;
} XrSpatialComponentFooListEXT;
/******************************/
/* End Component definition */
/******************************/
// Query for the foo component data
XrSpatialComponentTypeEXT componentToQuery = XR_SPATIAL_COMPONENT_TYPE_FOO_EXT;
XrSpatialComponentDataQueryConditionEXT queryCond{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT};
queryCond.componentTypeCount = 1;
queryCond.componentTypes = &componentToQuery;
XrSpatialComponentDataQueryResultEXT queryResult{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT};
CHK_XR(xrQuerySpatialComponentDataEXT(snapshot, &queryCond, &queryResult));
std::vector<XrSpatialEntityIdEXT> entityIds(queryResult.entityIdCountOutput);
queryResult.entityIdCapacityInput = entityIds.size();
queryResult.entityIds = entityIds.data();
std::vector<XrSpatialBufferEXT> fooBuffers(queryResult.entityIdCountOutput);
XrSpatialComponentFooListEXT fooList{XR_TYPE_SPATIAL_COMPONENT_FOO_LIST_EXT};
fooList.fooCount = fooBuffers.size();
fooList.foo = fooBuffers.data();
queryResult.next = &fooList;
CHK_XR(xrQuerySpatialComponentDataEXT(snapshot, &queryCond, &queryResult));
for (int32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
// foo component data for entity entityIds[i]
if (fooBuffers[i].bufferType == XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT) {
XrSpatialBufferGetInfoEXT getInfo{XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT};
getInfo.bufferId = fooBuffers[i].bufferId;
uint32_t bufferCountOutput;
CHK_XR(xrGetSpatialBufferVector3fEXT(snapshot, &getInfo, 0, &bufferCountOutput, nullptr));
std::vector<XrVector3f> vertexBuffer(bufferCountOutput);
CHK_XR(xrGetSpatialBufferVector3fEXT(snapshot, &getInfo, bufferCountOutput, &bufferCountOutput, vertexBuffer.data()));
// XrVertex3f buffer for entity entityIds[i] is now available in vertexBuffer vector.
}
}
확장 프로그램 가이드라인
확장 프로그램이 공간 항목에 관한 추가 데이터를 제공하는 새로운 XrSpatialComponentTypeEXT를 정의하는 경우,
- 확장 프로그램은 xrQuerySpatialComponentDataEXT ::
queryCondition를 충족하는 각 공간 항목의 데이터로 채우기 위해 애플리케이션이 런타임에 배열을 전달할 수 있도록 하는 해당 구성요소의 목록 구조도 정의해야 합니다. 이러한 목록 구조의 예로는 XrSpatialComponentParentListEXT 및 XrSpatialComponentBounded2DListEXT가 있습니다. 구성요소 데이터 크기가 가변적이고 애플리케이션이 두 번 호출 관용구를 사용하여 쿼리해야 하는 경우 구성요소 데이터는 목록 구조의 각 가변 크기 데이터에 XrSpatialBufferEXT를 제공해야 하며 각 버퍼의 XrSpatialBufferTypeEXT를 지정해야 합니다. 그러면 애플리케이션은 구성요소 데이터의 두 번 호출 관용구에 정의된 함수를 사용하여 버퍼 데이터를 쿼리할 수 있습니다. 이러한 구조의 예로는 XrSpatialComponentMesh3DListEXT에 포함된 XrSpatialMeshDataEXT가 있습니다. - 또한 확장 프로그램은 애플리케이션이 XrSpatialComponentDataQueryConditionEXT ::
next에 연결하여 이 구성요소의 데이터와 관련된 쿼리에 추가 필터를 제공할 수 있는 구조를 제공할 수 있습니다.
- 확장 프로그램은 xrQuerySpatialComponentDataEXT ::
확장 프로그램은 XrSpatialDiscoverySnapshotCreateInfoEXT를 확장하는 구조를 정의하여 탐색을 위한 추가 필터를 제공할 수 있습니다. 스냅샷을 만들기 위한 필터는 공간 컨텍스트의 구성에 영향을 미치지 않아야 하며, 대신 공간 컨텍스트의 현재 구성 (따라서 기본 서비스의 현재 구성)에 의해 추적되는 스냅샷에 포함할 항목과 데이터에 관한 힌트를 런타임에 제공하는 데 사용됩니다.
확장 프로그램이 새로운 XrSpatialCapabilityEXT를 정의하는 경우
- 또한 런타임이 해당 기능의 항목에 제공해야 하는 XrSpatialComponentTypeEXT 목록을 지정해야 합니다.
- 해당 기능의 구성을 허용하는 XrSpatialCapabilityConfigurationBaseHeaderEXT에서 파생된 구조도 제공해야 합니다(must).
확장 프로그램이 새 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
|====
새로운 매크로
새로운 기본 유형
XrSpatialBufferIdEXTXrSpatialEntityIdEXT
새 객체 유형
새 명령어
- xrCreateSpatialContextAsyncEXT
- xrCreateSpatialContextCompleteEXT
- xrCreateSpatialDiscoverySnapshotAsyncEXT
- xrCreateSpatialDiscoverySnapshotCompleteEXT
- xrCreateSpatialEntityFromIdEXT
- xrCreateSpatialUpdateSnapshotEXT
- xrDestroySpatialContextEXT
- xrDestroySpatialEntityEXT
- xrDestroySpatialSnapshotEXT
- xrEnumerateSpatialCapabilitiesEXT
- xrEnumerateSpatialCapabilityComponentTypesEXT
- xrEnumerateSpatialCapabilityFeaturesEXT
- xrGetSpatialBufferFloatEXT
- xrGetSpatialBufferStringEXT
- xrGetSpatialBufferUint16EXT
- xrGetSpatialBufferUint32EXT
- xrGetSpatialBufferUint8EXT
- xrGetSpatialBufferVector2fEXT
- xrGetSpatialBufferVector3fEXT
- xrQuerySpatialComponentDataEXT
새로운 구조
- XrCreateSpatialContextCompletionEXT
- XrCreateSpatialDiscoverySnapshotCompletionEXT
- XrCreateSpatialDiscoverySnapshotCompletionInfoEXT
- XrEventDataSpatialDiscoveryRecommendedEXT
- XrSpatialBounded2DDataEXT
- XrSpatialBufferEXT
- XrSpatialBufferGetInfoEXT
- XrSpatialCapabilityComponentTypesEXT
- XrSpatialCapabilityConfigurationBaseHeaderEXT
- XrSpatialComponentDataQueryConditionEXT
- XrSpatialComponentDataQueryResultEXT
- XrSpatialContextCreateInfoEXT
- XrSpatialDiscoverySnapshotCreateInfoEXT
- XrSpatialEntityFromIdCreateInfoEXT
- XrSpatialMeshDataEXT
- XrSpatialUpdateSnapshotCreateInfoEXT
XrSpatialDiscoverySnapshotCreateInfoEXT , XrSpatialComponentDataQueryConditionEXT 확장:
새 enum
- XrSpatialBufferTypeEXT
- XrSpatialCapabilityEXT
- XrSpatialCapabilityFeatureEXT
- XrSpatialComponentTypeEXT
- XrSpatialEntityTrackingStateEXT
새 enum 상수
XR_EXT_SPATIAL_ENTITY_EXTENSION_NAMEXR_EXT_spatial_entity_SPEC_VERSIONXrObjectType 확장:
XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXTXR_OBJECT_TYPE_SPATIAL_ENTITY_EXTXR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT
XrResult 확장:
XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXTXR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXTXR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT
XrStructureType 확장:
XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXTXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXTXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXTXR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXTXR_TYPE_SPATIAL_BUFFER_GET_INFO_EXTXR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXTXR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXTXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXTXR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXTXR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXTXR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXTXR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXTXR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXTXR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT
문제
단일 항목은 항상 단일 기능에서만 파생되나요?
- 해결됨
- 답변: 아니요. 이는 자체 추적 기능과 감지된 항목을 표현하는 방식에 따라 전적으로 런타임에 달려 있습니다. 사양은 최소 기대치를 설정하기 위해 특정 기능의 보장된 구성요소를 제외하고 공간 항목의 특정 표현을 규정하지 않습니다. 런타임은 별도의 기능으로 감지된 항목을 병합하고 이를 식별하는 데 도움이 된 모든 기능의 보장된 구성요소와 함께 단일 항목으로 나타낼 수 있습니다. 예를 들어 평면 추적 기능과 객체 추적 기능 모두에서 테이블을 감지할 수 있으며, 평면 추적은 항목에
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)
- 초기 확장 프로그램 설명