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 원자 또는 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_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialComponentTypeEXT;

XrSpatialComponentTypeEXT 열거형은 런타임에서 지원할 수 있는 다양한 유형의 구성요소를 식별합니다.

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

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

열거형 설명

XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT

공간 엔티티의 2D 경계를 제공하는 구성요소입니다. 해당 목록 구조는 XrSpatialComponentBounded2DListEXT이고 해당 데이터 구조는 XrSpatialBounded2DDataEXT입니다.

XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT

공간 엔티티의 3D 경계를 제공하는 구성요소입니다. 해당 목록 구조는 XrSpatialComponentBounded3DListEXT이고 해당 데이터 구조는 XrBoxf입니다.

XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT

공간 항목의 상위 요소의 XrSpatialEntityIdEXT를 제공하는 구성요소 해당 목록 구조는 XrSpatialComponentParentListEXT이고 해당 데이터 구조는 XrSpatialEntityIdEXT입니다.

XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT

공간 항목의 3D 메시를 제공하는 구성요소입니다. 해당 목록 구조는 XrSpatialComponentMesh3DListEXT이고 해당 데이터 구조는 XrSpatialMeshDataEXT입니다.

XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT

공간 항목의 평면 정렬 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 확장 프로그램에 의해 추가됨).

공간 기능 및 설정

공간 기능은 보장된 구성요소 집합이 있는 항목을 검색하는 런타임의 기능을 정의합니다. 애플리케이션은 XrSpatialContextEXT를 만들 때 공간 기능의 구성요소를 사용 설정하고 런타임은 검색된 항목에서 사용 설정된 구성요소만 제공해야 합니다. 예를 들어 런타임이 특정 기능의 구성요소 중 하나가 '시맨틱 라벨'이라고 보고하는 경우 애플리케이션은 해당 기능의 구성을 통해 시맨틱 라벨을 사용 설정할 수 있으며 런타임은 구성된 경우에만 시맨틱 라벨 구성요소를 제공해야 합니다.

typedef enum XrSpatialCapabilityEXT {
    XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT = 1000741000,
    XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT = 1000743000,
    XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT = 1000743001,
    XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT = 1000743002,
    XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT = 1000743003,
    XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT = 1000744000,
    XR_SPATIAL_CAPABILITY_ANCHOR_EXT = 1000762000,
    XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT = 1000782000,
    XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT = 1000783000,
    XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID = 1000785000,
    XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID = 1000786000,
    XR_SPATIAL_CAPABILITY_ROOM_TRACKING_ANDROIDSYS = 1000792000,
    XR_SPATIAL_CAPABILITY_ROOM_BOUNDARY_TRACKING_ANDROIDSYS = 1000792001,
    XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID = 1000794000,
    XR_SPATIAL_CAPABILITY_STREETSCAPE_GEOMETRY_ANDROIDX2 = 1000798000,
    XR_SPATIAL_CAPABILITY_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialCapabilityEXT;

XrSpatialCapabilityEXT 열거형은 런타임이 지원할 수 있는 다양한 기능 유형을 식별합니다.

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

열거형 설명

XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT

평면 추적 (XR_EXT_spatial_plane_tracking 확장 프로그램에 의해 추가됨)

XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT

QR 코드를 감지하고 추적할 수 있는 기능 (XR_EXT_spatial_marker_tracking 확장 프로그램에 의해 추가됨)

XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT

마이크로 QR 코드를 감지하고 추적할 수 있는 기능 (XR_EXT_spatial_marker_tracking 확장 프로그램에 의해 추가됨)

XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT

Aruco 마커를 감지하고 추적할 수 있는 기능 (XR_EXT_spatial_marker_tracking 확장 프로그램에 의해 추가됨)

XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT

AprilTag를 감지하고 추적할 수 있는 기능 (XR_EXT_spatial_marker_tracking 확장 프로그램에 의해 추가됨)

XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT

객체 추적 (XR_EXT_spatial_object_tracking 확장 프로그램에서 추가됨)

XR_SPATIAL_CAPABILITY_ANCHOR_EXT

공간 앵커를 만들 수 있는 기능 (XR_EXT_spatial_anchor 확장 프로그램에 의해 추가됨)

XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT

평면 참조 이미지를 감지하고 추적할 수 있는 기능 (XR_EXT_spatial_image_tracking 확장 프로그램에 의해 추가됨)

XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT

환경의 메시를 추적하는 기능 (XR_EXT_spatial_mesh_tracking 확장 프로그램에 의해 추가됨)

XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID

객체 추적 (XR_ANDROID_spatial_object_tracking 확장 프로그램에서 추가됨)

XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID

깊이 버퍼에 대한 광선 투사 (XR_ANDROID_spatial_discovery_raycast 확장 프로그램에 의해 추가됨)

XR_SPATIAL_CAPABILITY_ROOM_TRACKING_ANDROIDSYS

회의실 추적 기능 (XR_ANDROIDSYS_spatial_room_tracking 확장 프로그램에서 추가)

XR_SPATIAL_CAPABILITY_ROOM_BOUNDARY_TRACKING_ANDROIDSYS

방 경계를 추적하는 기능 (XR_ANDROIDSYS_spatial_room_tracking 확장 프로그램에 의해 추가됨)

XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID

주석 추적 (XR_ANDROID_spatial_annotation_tracking 확장 프로그램에 의해 추가됨)

XR_SPATIAL_CAPABILITY_STREETSCAPE_GEOMETRY_ANDROIDX2

거리 풍경 형태 (XR_ANDROIDX2_geospatial_streetscape 확장 프로그램에 의해 추가됨)

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

XrResult xrEnumerateSpatialCapabilitiesEXT(
    XrInstance                                  instance,
    XrSystemId                                  systemId,
    uint32_t                                    capabilityCapacityInput,
    uint32_t*                                   capabilityCountOutput,
    XrSpatialCapabilityEXT*                     capabilities);

매개변수 설명

  • instanceXrInstance의 핸들입니다 .
  • systemId은 공간 기능이 열거될 XrSystemId입니다.
  • capabilityCapacityInputcapabilities 배열의 용량입니다. 필요한 용량을 가져오기 위한 요청을 나타내는 0일 수도 있습니다.
  • capabilityCountOutput는 기능 수 또는 capabilityCapacityInput이 부족한 경우 필요한 용량입니다.
  • capabilitiesXrSpatialCapabilityEXT 배열입니다 . capabilityCapacityInput이 0인 경우 NULL일 수 있습니다.
  • 필요한 capabilities 크기를 가져오는 방법에 관한 자세한 내용은 버퍼 크기 매개변수 섹션을 참고하세요.

애플리케이션은 xrEnumerateSpatialCapabilitiesEXT를 사용하여 지정된 XrSystemId에서 지원하는 공간 기능 목록을 열거할 수 있습니다 .

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

유효한 사용 (암시적)

  • xrEnumerateSpatialCapabilitiesEXT를 호출하기 전에 XR_EXT_spatial_entity 확장 프로그램을 사용 설정해야 합니다.
  • instance은 유효한 XrInstance 핸들이어야 합니다.
  • capabilityCountOutputuint32_t 값에 대한 포인터여야 합니다.
  • capabilityCapacityInput0이 아닌 경우 capabilitiescapabilityCapacityInput XrSpatialCapabilityEXT 값의 배열에 대한 포인터여야 합니다.

반환 코드

성공

  • XR_SUCCESS

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SYSTEM_INVALID
  • XR_ERROR_VALIDATION_FAILURE

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

XrResult xrEnumerateSpatialCapabilityComponentTypesEXT(
    XrInstance                                  instance,
    XrSystemId                                  systemId,
    XrSpatialCapabilityEXT                      capability,
    XrSpatialCapabilityComponentTypesEXT*       capabilityComponents);

매개변수 설명

  • instanceXrInstance의 핸들입니다 .
  • systemId는 공간 기능 구성요소가 열거될 XrSystemId입니다.
  • capability는 구성요소가 열거될 XrSpatialCapabilityEXT입니다.
  • capabilityComponentsXrSpatialCapabilityComponentTypesEXT에 대한 포인터입니다. 이는 애플리케이션 할당 배열이 채워지는 입력/출력 구조입니다.

이 함수는 구성된 대로 시스템의 엔티티에 지정된 기능이 제공하는 구성요소 유형을 열거합니다.

애플리케이션은 XrSpatialCapabilityComponentTypesEXT :: componentTypes에 열거된 구성요소 유형을 사용하여 systemIdcapability에 지원하는 전체 구성요소 집합을 이해하고 이 목록을 사용하여 capabilityXrSpatialContextEXT를 만들 때 capability의 유효한 구성이 무엇인지 확인할 수 있습니다.

capabilityxrEnumerateSpatialCapabilitiesEXT로 열거되지 않으면 런타임은 XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT를 반환해야 합니다 .

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

유효한 사용 (암시적)

반환 코드

성공

  • XR_SUCCESS

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT
  • XR_ERROR_SYSTEM_INVALID
  • XR_ERROR_VALIDATION_FAILURE

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

typedef struct XrSpatialCapabilityComponentTypesEXT {
    XrStructureType               type;
    void*                         next;
    uint32_t                      componentTypeCapacityInput;
    uint32_t                      componentTypeCountOutput;
    XrSpatialComponentTypeEXT*    componentTypes;
} XrSpatialCapabilityComponentTypesEXT;

회원 설명

  • type은 이 구조의 XrStructureType입니다.
  • nextNULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다. 이러한 구조는 핵심 OpenXR이나 이 확장 프로그램에 정의되어 있지 않습니다.
  • componentTypeCapacityInput는 배열의 용량입니다. 필요한 용량을 가져오기 위한 요청을 나타내려면 0을 사용합니다.
  • componentTypeCountOutput는 구성요소 유형의 수 또는 componentTypeCapacityInput이 부족한 경우 필요한 용량입니다.
  • componentTypesXrSpatialComponentTypeEXT의 배열입니다 . componentTypeCapacityInput이 0인 경우 NULL일 수 있습니다.
  • 필요한 componentTypes 크기를 가져오는 방법에 관한 자세한 내용은 버퍼 크기 매개변수 섹션을 참고하세요.

유효한 사용 (암시적)

  • XrSpatialCapabilityComponentTypesEXT를 사용하기 전에 XR_EXT_spatial_entity 확장 프로그램을 사용 설정해야 합니다.
  • typeXR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT이어야 합니다.
  • nextNULL이거나 구조체 체인의 다음 구조체를 가리키는 유효한 포인터여야 합니다.
  • componentTypeCapacityInput0이 아닌 경우 componentTypescomponentTypeCapacityInput XrSpatialComponentTypeEXT 값의 배열에 대한 포인터여야 합니다.

공간 기능

typedef enum XrSpatialCapabilityFeatureEXT {
    XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT = 1000743000,
    XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT = 1000743001,
    XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT = 1000744000,
    XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID = 1000761000,
    XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID = 1000761001,
    XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID = 1000761002,
    XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXT = 1000782000,
    XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_STATIC_IMAGES_EXT = 1000782001,
    XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_FIXED_SIZE_IMAGES_EXT = 1000782002,
    XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT = 1000783000,
    XR_SPATIAL_CAPABILITY_FEATURE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialCapabilityFeatureEXT;

일부 기능에는 런타임에서 구성요소 데이터를 계산하는 방식을 구성하기 위해 애플리케이션에 노출된 매개변수가 있습니다. 이러한 매개변수화/구성 가능성 측정기준을 기능 기능이라고 합니다. 예를 들어 이미지 추적 기능의 경우 런타임은 추적된 이미지가 정지 상태인지 여부를 애플리케이션이 지정하는 기능을 지원할 수 있습니다.

구성 구조를 통해 이 정보를 런타임에 제공해도 추적된 이미지와 같은 연결된 항목에 있는 구성요소 유형 집합이 변경되어서는 안 됩니다. 하지만 런타임은 이미지 추적 기능의 추적 기능을 최적화하여 애플리케이션에 더 나은 환경을 제공할 수 있습니다.

이러한 기능은 XrSpatialCapabilityFeatureEXT로 표시되며 애플리케이션은 xrEnumerateSpatialCapabilityFeaturesEXT를 사용하여 이를 열거합니다 .

각 기능 기능에는 이를 사용 설정하는 해당 구성 구조가 있습니다. 이러한 구성 구조는 해당 기능의 XrSpatialCapabilityConfigurationBaseHeaderEXT :: next에 연결해야 합니다.

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

열거형 설명

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

런타임은 XrSpatialDiscoverySnapshotCreateInfoEXTXrSpatialBoundsSpherefANDROID 필터를 지원합니다. 따라서 공간 컨텍스트 생성 중에 포함할 구성 구조가 필요하지 않습니다. (XR_ANDROID_spatial_discovery_bounds 확장 프로그램에 의해 추가됨)

XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID

런타임은 XrSpatialDiscoverySnapshotCreateInfoEXTXrSpatialBoundsBoxfANDROID 필터를 지원합니다. 공간 컨텍스트 생성 중에 구성 구조를 포함할 필요가 없습니다. (XR_ANDROID_spatial_discovery_bounds 확장 프로그램에 의해 추가됨)

XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID

런타임은 XrSpatialDiscoverySnapshotCreateInfoEXTXrSpatialBoundsFrustumfANDROID 필터를 지원합니다. 공간 컨텍스트 생성 중에 구성 구조를 포함할 필요가 없습니다. (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);

매개변수 설명

  • instanceXrInstance의 핸들입니다 .
  • systemId은 공간 기능이 열거될 XrSystemId입니다.
  • capability는 기능이 열거될 XrSpatialCapabilityEXT입니다.
  • capabilityFeatureCapacityInput는 배열의 용량입니다. 필요한 용량을 가져오기 위한 요청을 나타내려면 0을 사용합니다.
  • capabilityFeatureCountOutput은 기능의 수 또는 capabilityFeatureCapacityInput이 부족한 경우 필요한 용량입니다.
  • capabilityFeaturesXrSpatialCapabilityFeatureEXT의 배열입니다 . capabilityFeatureCapacityInput이 0인 경우 NULL일 수 있습니다.
  • 필요한 capabilityFeatures 크기를 가져오는 방법에 관한 자세한 내용은 버퍼 크기 매개변수 섹션을 참고하세요.

애플리케이션은 xrEnumerateSpatialCapabilityFeaturesEXT를 사용하여 XrSpatialCapabilityEXT에 대해 지정된 시스템에서 지원하는 기능을 검색합니다 .

기능이 노출된 기능의 경우 애플리케이션은 사용 설정할 기능을 선택하고 XrSpatialContextCreateInfoEXT :: capabilityConfigs의 기능 구성 구조의 다음 체인에 해당하는 구성 구조를 제공합니다 .

capabilityxrEnumerateSpatialCapabilitiesEXT에 의해 열거된 기능이 아닌 경우 런타임은 XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT를 반환해야 합니다 .

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

유효한 사용 (암시적)

  • xrEnumerateSpatialCapabilityFeaturesEXT를 호출하기 전에 XR_EXT_spatial_entity 확장 프로그램을 사용 설정해야 합니다.
  • instance은 유효한 XrInstance 핸들이어야 합니다.
  • capability 유효한 XrSpatialCapabilityEXT 값이어야 합니다.
  • capabilityFeatureCountOutputuint32_t 값에 대한 포인터여야 합니다.
  • capabilityFeatureCapacityInput0이 아닌 경우 capabilityFeaturescapabilityFeatureCapacityInput XrSpatialCapabilityFeatureEXT 값의 배열에 대한 포인터여야 합니다.

반환 코드

성공

  • XR_SUCCESS

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SIZE_INSUFFICIENT
  • XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT
  • XR_ERROR_SYSTEM_INVALID
  • XR_ERROR_VALIDATION_FAILURE

공간 컨텍스트

공간 컨텍스트 만들기

XR_DEFINE_HANDLE(XrSpatialContextEXT)

XrSpatialContextEXT 핸들은 사용자 환경에서 여러 공간 항목을 검색하고 업데이트하는 리소스를 나타냅니다. 애플리케이션은 이 핸들을 사용하여 이 확장 프로그램의 다른 함수를 통해 공간 엔티티를 검색하고 업데이트할 수 있습니다.

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

XrResult xrCreateSpatialContextAsyncEXT(
    XrSession                                   session,
    const XrSpatialContextCreateInfoEXT*        createInfo,
    XrFutureEXT*                                future);

매개변수 설명

  • session은 공간 컨텍스트가 활성화될 XrSession입니다.
  • createInfo는 공간 컨텍스트 매개변수를 지정하는 데 사용되는 XrSpatialContextCreateInfoEXT입니다.
  • futureXrFutureEXT을 가리키는 포인터입니다 .

애플리케이션은 다음을 통해 XrSpatialContextEXT 핸들을 만들 수 있습니다.

런타임은 XrSpatialContextCreateInfoEXT ::capabilityConfigCount가 0이면 XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT를 반환해야 합니다. 공간 컨텍스트 핸들에는 기능이 하나 이상 있어야 합니다.

런타임은 XrSpatialContextCreateInfoEXT :: capabilityConfigs 배열의 기능이 xrEnumerateSpatialCapabilitiesEXT로 열거되지 않는 경우 XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT를 반환해야 합니다 .

런타임은 XrSpatialContextCreateInfoEXT :: capabilityConfigsXrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponentCount가 0이면 XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT를 반환해야 합니다. 기능을 사용 설정할 구성요소 유형 목록이 없으면 기능 구성이 불완전합니다.

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

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

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

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

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

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

유효한 사용 (암시적)

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

반환 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_PERMISSION_INSUFFICIENT
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT
  • XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT
  • XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT
  • XR_ERROR_VALIDATION_FAILURE

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

typedef struct XrSpatialContextCreateInfoEXT {
    XrStructureType                                                type;
    const void*                                                    next;
    uint32_t                                                       capabilityConfigCount;
    const XrSpatialCapabilityConfigurationBaseHeaderEXT* const*    capabilityConfigs;
} XrSpatialContextCreateInfoEXT;

회원 설명

  • type은 이 구조의 XrStructureType입니다.
  • nextNULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다. 이러한 구조는 핵심 OpenXR이나 이 확장 프로그램에 정의되어 있지 않습니다.
  • capabilityConfigCountcapabilityConfigs 배열의 요소 수를 설명하는 uint32_t입니다.
  • capabilityConfigsXrSpatialCapabilityConfigurationBaseHeaderEXT 포인터 배열에 대한 포인터입니다.

XrSpatialContextCreateInfoEXT 구조체는 XrSpatialContextEXT 핸들을 만드는 정보를 설명합니다.

유효한 사용 (암시적)

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

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

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

회원 설명

  • type은 이 구조의 XrStructureType입니다.
  • nextNULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다.
  • capabilityXrSpatialCapabilityEXT입니다 .
  • enabledComponentCountenabledComponents 배열의 요소 수를 설명하는 uint32_t입니다.
  • enabledComponentsXrSpatialComponentTypeEXT 배열에 대한 포인터입니다 .

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

유효한 사용 (암시적)

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

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

매개변수 설명

xrCreateSpatialContextCompleteEXTxrCreateSpatialContextAsyncEXT로 시작된 비동기 작업을 완료합니다 . future가 준비 상태가 아닌 경우 런타임은 XR_ERROR_FUTURE_PENDING_EXT를 반환해야 합니다. 런타임은 future가 이미 완료되었거나 취소된 경우 XR_ERROR_FUTURE_INVALID_EXT를 반환해야 합니다.

유효한 사용 (암시적)

반환 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

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

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

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

회원 설명

향후 반환 코드

futureResult 값:

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

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

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

유효한 사용 (암시적)

공간 컨텍스트를 소멸시킵니다.

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

XrResult xrDestroySpatialContextEXT(
    XrSpatialContextEXT                         spatialContext);

매개변수 설명

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

유효한 사용 (암시적)

스레드 안전

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

반환 코드

성공

  • XR_SUCCESS

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_RUNTIME_FAILURE

공간 항목 표현

공간 엔티티 ID

XR_DEFINE_ATOM(XrSpatialEntityIdEXT)

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

#define XR_NULL_SPATIAL_ENTITY_ID_EXT 0

XR_NULL_SPATIAL_ENTITY_ID_EXT는 잘못된 XrSpatialEntityIdEXT를 나타내는 예약된 값입니다 . 구체적으로 허용된 경우에만 API 함수에 전달되고 API 함수에서 반환될 수 있습니다.

공간 엔티티 핸들

XR_DEFINE_HANDLE(XrSpatialEntityEXT)

XrSpatialEntityEXT 핸들은 공간 항목을 나타냅니다. 애플리케이션은 런타임에 특정 항목에 대한 관심을 표현하기 위해 이러한 핸들을 만들 수 있습니다.

ID에서 공간 항목 핸들 만들기

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

XrResult xrCreateSpatialEntityFromIdEXT(
    XrSpatialContextEXT                         spatialContext,
    const XrSpatialEntityFromIdCreateInfoEXT*   createInfo,
    XrSpatialEntityEXT*                         spatialEntity);

매개변수 설명

애플리케이션은 xrCreateSpatialEntityFromIdEXT를 사용하여 사용자의 환경에 있는 엔티티를 참조하는 XrSpatialEntityEXT 핸들을 만들 수 있습니다.

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

유효한 사용 (암시적)

반환 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

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

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

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

회원 설명

  • type은 이 구조의 XrStructureType입니다.
  • nextNULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다. 이러한 구조는 핵심 OpenXR이나 이 확장 프로그램에 정의되어 있지 않습니다.
  • entityId은 애플리케이션이 핸들을 만들려는 엔티티의 XrSpatialEntityIdEXT입니다.

유효한 사용 (암시적)

공간 항목 핸들 소멸

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

XrResult xrDestroySpatialEntityEXT(
    XrSpatialEntityEXT                          spatialEntity);

매개변수 설명

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

유효한 사용 (암시적)

스레드 안전

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

반환 코드

성공

  • XR_SUCCESS

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_RUNTIME_FAILURE

공간 스냅샷

XR_DEFINE_HANDLE(XrSpatialSnapshotEXT)

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

애플리케이션은 원하는 만큼 스냅샷을 만들 수 있지만 각 새 스냅샷에 할당되는 메모리를 염두에 두어야 하며 더 이상 필요하지 않은 스냅샷은 삭제해야 합니다.

탐색 스냅샷 만들기

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

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

매개변수 설명

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

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

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

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

런타임은 spatialContext 생성 시 XrSpatialContextCreateInfoEXT :: capabilityConfigs에 전달된 공간 기능에 대해 XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypesXrSpatialComponentTypeEXT 중 하나라도 사용 설정되지 않은 경우 XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT를 반환해야 합니다(MUST).

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

future 완료 전에 XrEventDataReferenceSpaceChangePending이 대기열에 추가되고 XrEventDataReferenceSpaceChangePending :: poseValid이 false이면 런타임은 엔티티가 없는 XrSpatialSnapshotEXT를 생성하거나 XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace에서 더 이상 찾을 수 없는 엔티티의 XrSpatialEntityTrackingStateEXTXrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time에서 XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT 또는 XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT로 설정할 수 있습니다 . 런타임은 XrEventDataReferenceSpaceChangePending로 인해 XrCreateSpatialContextCompletionEXT :: futureResult을 오류 코드로 설정하면 안 됩니다 .

유효한 사용 (암시적)

반환 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

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

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

typedef struct XrSpatialDiscoverySnapshotCreateInfoEXT {
    XrStructureType                     type;
    const void*                         next;
    uint32_t                            componentTypeCount;
    const XrSpatialComponentTypeEXT*    componentTypes;
} XrSpatialDiscoverySnapshotCreateInfoEXT;

회원 설명

  • type은 이 구조의 XrStructureType입니다.
  • nextNULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다. 이러한 구조는 핵심 OpenXR이나 이 확장 프로그램에 정의되어 있지 않습니다.
  • componentTypeCountcomponentTypes 배열의 요소 수를 설명하는 uint32_t입니다.
  • componentTypesXrSpatialComponentTypeEXT 배열입니다 .

XrSpatialDiscoverySnapshotCreateInfoEXT 구조체는 공간 엔티티를 검색할 때 XrSpatialSnapshotEXT 핸들을 만드는 정보를 설명합니다.

유효한 사용 (암시적)

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

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

매개변수 설명

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

유효한 사용 (암시적)

반환 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

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

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

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

회원 설명

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

유효한 사용 (암시적)

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

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

회원 설명

  • type은 이 구조의 XrStructureType입니다.
  • nextNULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다.
  • futureResult은 공간 검색 스냅샷 생성 작업의 XrResult입니다.
  • snapshotXrSpatialSnapshotEXT로, 이를 사용하여 검색된 공간 항목의 구성요소 데이터를 쿼리할 수 있습니다.

향후 반환 코드

futureResult 값:

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_LIMIT_REACHED

유효한 사용 (암시적)

탐색 추천 이벤트

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

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

회원 설명

  • type은 이 구조의 XrStructureType입니다.
  • nextNULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다.
  • spatialContext는 런타임에서 검색을 권장하는 XrSpatialContextEXT입니다.

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

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

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

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

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

애플리케이션이 xrDestroySpatialContextEXT를 호출한 후 런타임은 해당 공간 컨텍스트에 대한 더 이상의 검색 추천 이벤트를 대기열에 추가하거나 xrPollEvent에서 해당 컨텍스트에 대한 이러한 이벤트를 반환해서는 안 됩니다 .

유효한 사용 (암시적)

구성요소 데이터 쿼리

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

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

매개변수 설명

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

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

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

XrEventDataReferenceSpaceChangePending이 대기열에 추가되고 애플리케이션이 XrSpatialSnapshotEXT에서 구성요소 데이터를 쿼리하는 동안 XrEventDataReferenceSpaceChangePending :: changeTime이 경과하면 애플리케이션은 이벤트 데이터를 사용하여 포즈를 적절하게 조정할 수 있습니다.

런타임은 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 not).

유효한 사용 (암시적)

반환 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

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

예를 들어 애플리케이션은 다음을 포함하는 XrSpatialSnapshotEXT를 만듭니다.

  • 엔티티 1과 2에는 구성요소 XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTXR_SPATIAL_COMPONENT_TYPE_PARENT_EXT이 있습니다.
  • 엔티티 3과 4에는 구성요소 XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT이 있습니다.
  • 엔티티 5에는 XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT 구성요소가 있습니다 .

XrSpatialEntityIdEXT

XrSpatialEntityIdEXT

1

1

2

2

3

3

4

4

5

5

Bounded2D

Bounded2D

아니요

아니요

아니요

아니요

부모

부모

아니요

아니요

아니요

아니요

아니요

아니요

Mesh3D

Mesh3D

아니요

아니요

아니요

아니요

Bounded3D

Bounded3D

아니요

아니요

아니요

아니요

아니요

아니요. 텍스트가 SVG가 아니므로 표시할 수 없습니다

그림 20. 스냅샷 예

위 스냅샷에서 XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT이 쿼리 조건에 나열된 xrQuerySpatialComponentDataEXT를 사용하면 엔티티 #1, #2, #5가 애플리케이션에 반환되고 애플리케이션은 XrSpatialComponentBounded2DListEXT 구조의 일부로 XrSpatialBounded2DDataEXT 배열을 다음 XrSpatialComponentDataQueryResultEXT 체인에 연결하여 bounded2D 데이터를 가져올 수 있습니다.

XrSpatialEntityIdEXT

XrSpatialEntityIdEXT

1

1

2

2

5

5

Bounded2D

Bounded2D

entityId #1의 데이터

Data for entit...

entityId #2의 데이터

Data for entit...

entityId #5의 데이터

Data for entit...

entityIds

entityIds

다음

다음

XrSpatialComponent
DataQueryResultEXT

XrSpatialComponent
Dat...

bounds

bounds

XrSpatialComponent
Bounded2DListEXT

XrSpatialComponent
Bou... 텍스트가 SVG가 아님 - 표시할 수 없음

그림 21. 쿼리 결과 예시

위 스냅샷에서 XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT 구성요소가 쿼리 조건에 나열된 xrQuerySpatialComponentDataEXT를 사용하면 엔티티 #3과 #4가 애플리케이션에 반환되고 애플리케이션은 XrSpatialComponentBounded3DListEXTXrSpatialComponentMesh3DListEXT 구조의 일부로 각각 XrBoxfXrSpatialMeshDataEXT 배열을 다음 XrSpatialComponentDataQueryResultEXT 체인에 연결하여 구성요소 데이터를 가져올 수 있습니다.

XrSpatialEntityIdEXT

XrSpatialEntityIdEXT

3

3

4

4

Bounded3D

Bounded3D

entityId #3의 데이터

Data for entit...

entityId #4의 데이터

Data for entit...

Mesh3D

Mesh3D

entityId #3의 데이터

Data for entit...

entityId #4의 데이터

Data for entit...

entityIds

entityIds

다음

다음

XrSpatialComponent
DataQueryResultEXT

XrSpatialComponent
Da...

bounds

bounds

다음

다음

XrSpatialComponent
Bounded3DListEXT

XrSpatialComponent
Bo...

XrSpatialComponent
Mesh3DListEXT

XrSpatialComponent
Me...

meshes

메시 텍스트가 SVG가 아님 - 표시할 수 없음

그림 22. 쿼리 결과 예시

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

typedef struct XrSpatialComponentDataQueryConditionEXT {
    XrStructureType                     type;
    const void*                         next;
    uint32_t                            componentTypeCount;
    const XrSpatialComponentTypeEXT*    componentTypes;
} XrSpatialComponentDataQueryConditionEXT;

회원 설명

  • type은 이 구조의 XrStructureType입니다.
  • nextNULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다.
  • componentTypeCountcomponentTypes 배열의 요소 수를 설명하는 uint32_t입니다.
  • componentTypes는 스냅샷에서 데이터를 가져올 XrSpatialComponentTypeEXT 배열입니다.

유효한 사용 (암시적)

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

typedef struct XrSpatialComponentDataQueryResultEXT {
    XrStructureType                     type;
    void*                               next;
    uint32_t                            entityIdCapacityInput;
    uint32_t                            entityIdCountOutput;
    XrSpatialEntityIdEXT*               entityIds;
    uint32_t                            entityStateCapacityInput;
    uint32_t                            entityStateCountOutput;
    XrSpatialEntityTrackingStateEXT*    entityStates;
} XrSpatialComponentDataQueryResultEXT;

회원 설명

  • type은 이 구조의 XrStructureType입니다.
  • nextNULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다.
  • entityIdCapacityInputentityIds 배열의 용량입니다. 필요한 용량을 가져오기 위한 요청을 나타내는 0일 수도 있습니다.
  • entityIdCountOutputentityIdsXrSpatialEntityIdEXT 수 또는 entityIdCapacityInput이 부족한 경우 필요한 용량입니다.
  • entityIdsXrSpatialEntityIdEXT의 배열입니다 . entityIdCapacityInput이 0인 경우 NULL일 수 있습니다.
  • entityStateCapacityInputentityStates 배열의 용량입니다. 필요한 용량을 가져오기 위한 요청을 나타내는 0일 수도 있습니다.
  • entityStateCountOutputentityStatesXrSpatialEntityTrackingStateEXT 수 또는 entityStateCapacityInput이 부족한 경우 필요한 용량입니다. 이 값은 항상 entityIdCountOutput와 같아야 합니다 .
  • entityStatesXrSpatialEntityTrackingStateEXT 배열입니다 . entityStateCapacityInput이 0인 경우 NULL일 수 있습니다.
  • 필요한 entityIds 크기를 가져오는 방법에 관한 자세한 내용은 버퍼 크기 매개변수 섹션을 참고하세요.

애플리케이션은 entityIdsxrCreateSpatialEntityFromIdEXT와 함께 사용하여 정기 업데이트를 받는 데 관심이 있는 항목의 XrSpatialEntityEXT 핸들을 만들 수 있습니다. 그런 다음 애플리케이션은 xrCreateSpatialUpdateSnapshotEXT와 함께 이러한 XrSpatialEntityEXT 핸들을 사용하여 제공된 항목의 구성요소에 관한 런타임의 최신 알려진 데이터가 있는 업데이트 스냅샷을 만들 수 있습니다.

유효한 사용 (암시적)

typedef enum XrSpatialEntityTrackingStateEXT {
    XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT = 1,
    XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT = 2,
    XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT = 3,
    XR_SPATIAL_ENTITY_TRACKING_STATE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialEntityTrackingStateEXT;

XrSpatialEntityTrackingStateEXT는 가능한 공간 엔티티 추적 상태를 열거합니다.

열거형의 의미는 다음과 같습니다.

열거형 설명

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

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

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

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

회원 설명

  • bufferId 버퍼 데이터의 XrSpatialBufferIdEXT입니다.
  • bufferTypebufferId의 데이터 유형을 나타내는 XrSpatialBufferTypeEXT입니다 . 애플리케이션은 bufferType를 사용하여 버퍼의 실제 데이터를 가져오는 데 사용할 함수를 확인할 수 있습니다.

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

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

유효한 사용 (암시적)

XR_DEFINE_ATOM(XrSpatialBufferIdEXT)

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

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

typedef enum XrSpatialBufferTypeEXT {
    XR_SPATIAL_BUFFER_TYPE_UNKNOWN_EXT = 0,
    XR_SPATIAL_BUFFER_TYPE_STRING_EXT = 1,
    XR_SPATIAL_BUFFER_TYPE_UINT8_EXT = 2,
    XR_SPATIAL_BUFFER_TYPE_UINT16_EXT = 3,
    XR_SPATIAL_BUFFER_TYPE_UINT32_EXT = 4,
    XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT = 5,
    XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT = 6,
    XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT = 7,
    XR_SPATIAL_BUFFER_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialBufferTypeEXT;

XrSpatialBufferTypeEXT 열거형은 XrSpatialBufferIdEXT로 표현되는 버퍼의 다양한 데이터 유형을 식별합니다 .

열거형 설명

  • XR_SPATIAL_BUFFER_TYPE_STRING_EXT . XrSpatialBufferIdEXTxrGetSpatialBufferStringEXT에 전달되어 문자열 버퍼를 가져올 수 있습니다.
  • XR_SPATIAL_BUFFER_TYPE_UINT8_EXT . XrSpatialBufferIdEXTuint8_t 버퍼를 가져오기 위해 xrGetSpatialBufferUint8EXT에 전달할 수 있습니다.
  • XR_SPATIAL_BUFFER_TYPE_UINT16_EXT . XrSpatialBufferIdEXTuint16_t 버퍼를 가져오기 위해 xrGetSpatialBufferUint16EXT에 전달될 수 있습니다.
  • XR_SPATIAL_BUFFER_TYPE_UINT32_EXT . XrSpatialBufferIdEXTxrGetSpatialBufferUint32EXT에 전달되어 uint32_t 버퍼를 가져올 수 있습니다.
  • XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT . XrSpatialBufferIdEXTxrGetSpatialBufferFloatEXT에 전달되어 float 버퍼를 가져올 수 있습니다.
  • XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT . XrSpatialBufferIdEXTxrGetSpatialBufferVector2fEXT에 전달되어 XrVector2f 버퍼를 가져올 수 있습니다.
  • XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT . XrSpatialBufferIdEXTxrGetSpatialBufferVector3fEXT에 전달되어 XrVector3f 버퍼를 가져올 수 있습니다.

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

XrResult xrGetSpatialBufferStringEXT(
    XrSpatialSnapshotEXT                        snapshot,
    const XrSpatialBufferGetInfoEXT*            info,
    uint32_t                                    bufferCapacityInput,
    uint32_t*                                   bufferCountOutput,
    char*                                       buffer);

매개변수 설명

  • snapshotXrSpatialSnapshotEXT 핸들입니다 .
  • info에는 쿼리할 버퍼에 관한 정보가 포함됩니다.
  • bufferCapacityInput는 배열의 용량입니다. 필요한 용량을 가져오기 위한 요청을 나타내려면 0을 사용합니다.
  • bufferCountOutput은 문자 수 또는 bufferCapacityInput이 부족한 경우 필요한 용량입니다.
  • bufferchar의 배열입니다 . bufferCapacityInput이 0인 경우 NULL일 수 있습니다.
  • 필요한 buffer 크기를 가져오는 방법에 관한 자세한 내용은 버퍼 크기 매개변수 섹션을 참고하세요.

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

XrSpatialBufferGetInfoEXT :: bufferIdXrSpatialBufferTypeEXTXR_SPATIAL_BUFFER_TYPE_STRING_EXT이 아닌 경우 런타임은 XR_ERROR_VALIDATION_FAILURE를 반환해야 합니다 .

런타임은 XrSpatialBufferGetInfoEXT :: bufferIdsnapshot에 속하지 않는 경우 XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT을 반환해야 합니다 .

런타임에 의해 채워진 buffer은 null로 종료되는 UTF-8 문자열이어야 합니다.

유효한 사용 (암시적)

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

반환 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

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

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

XrResult xrGetSpatialBufferUint8EXT(
    XrSpatialSnapshotEXT                        snapshot,
    const XrSpatialBufferGetInfoEXT*            info,
    uint32_t                                    bufferCapacityInput,
    uint32_t*                                   bufferCountOutput,
    uint8_t*                                    buffer);

매개변수 설명

  • snapshotXrSpatialSnapshotEXT 핸들입니다 .
  • info에는 쿼리할 버퍼에 관한 정보가 포함됩니다.
  • bufferCapacityInput는 배열의 용량입니다. 필요한 용량을 가져오기 위한 요청을 나타내려면 0을 사용합니다.
  • bufferCountOutputbuffer 배열의 요소 수 또는 bufferCapacityInput이 부족한 경우 필요한 용량입니다.
  • bufferuint8_t의 배열입니다 . bufferCapacityInput이 0인 경우 NULL일 수 있습니다.
  • 필요한 buffer 크기를 가져오는 방법에 관한 자세한 내용은 버퍼 크기 매개변수 섹션을 참고하세요.

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

런타임은 XrSpatialBufferGetInfoEXT :: bufferIdXrSpatialBufferTypeEXTXR_SPATIAL_BUFFER_TYPE_UINT8_EXT이 아닌 경우 XR_ERROR_VALIDATION_FAILURE를 반환해야 합니다 .

런타임은 XrSpatialBufferGetInfoEXT :: bufferIdsnapshot에 속하지 않는 경우 XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT을 반환해야 합니다 .

유효한 사용 (암시적)

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

반환 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

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

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

XrResult xrGetSpatialBufferUint16EXT(
    XrSpatialSnapshotEXT                        snapshot,
    const XrSpatialBufferGetInfoEXT*            info,
    uint32_t                                    bufferCapacityInput,
    uint32_t*                                   bufferCountOutput,
    uint16_t*                                   buffer);

매개변수 설명

  • snapshotXrSpatialSnapshotEXT 핸들입니다 .
  • info에는 쿼리할 버퍼에 관한 정보가 포함됩니다.
  • bufferCapacityInput는 배열의 용량입니다. 필요한 용량을 가져오기 위한 요청을 나타내려면 0을 사용합니다.
  • bufferCountOutputbuffer 배열의 요소 수 또는 bufferCapacityInput이 부족한 경우 필요한 용량입니다.
  • bufferuint16_t의 배열입니다 . bufferCapacityInput이 0인 경우 NULL일 수 있습니다.
  • 필요한 buffer 크기를 가져오는 방법에 관한 자세한 내용은 버퍼 크기 매개변수 섹션을 참고하세요.

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

런타임은 XrSpatialBufferGetInfoEXT :: bufferIdXrSpatialBufferTypeEXTXR_SPATIAL_BUFFER_TYPE_UINT16_EXT이 아닌 경우 XR_ERROR_VALIDATION_FAILURE를 반환해야 합니다 .

런타임은 XrSpatialBufferGetInfoEXT :: bufferIdsnapshot에 속하지 않는 경우 XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT을 반환해야 합니다 .

유효한 사용 (암시적)

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

반환 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

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

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

XrResult xrGetSpatialBufferUint32EXT(
    XrSpatialSnapshotEXT                        snapshot,
    const XrSpatialBufferGetInfoEXT*            info,
    uint32_t                                    bufferCapacityInput,
    uint32_t*                                   bufferCountOutput,
    uint32_t*                                   buffer);

매개변수 설명

  • snapshotXrSpatialSnapshotEXT 핸들입니다 .
  • info에는 쿼리할 버퍼에 관한 정보가 포함됩니다.
  • bufferCapacityInput는 배열의 용량입니다. 필요한 용량을 가져오기 위한 요청을 나타내려면 0을 사용합니다.
  • bufferCountOutputbuffer 배열의 요소 수 또는 bufferCapacityInput이 부족한 경우 필요한 용량입니다.
  • bufferuint32_t의 배열입니다 . bufferCapacityInput이 0인 경우 NULL일 수 있습니다.
  • 필요한 buffer 크기를 가져오는 방법에 관한 자세한 내용은 버퍼 크기 매개변수 섹션을 참고하세요.

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

런타임은 XrSpatialBufferGetInfoEXT :: bufferIdXrSpatialBufferTypeEXTXR_SPATIAL_BUFFER_TYPE_UINT32_EXT이 아닌 경우 XR_ERROR_VALIDATION_FAILURE를 반환해야 합니다 .

런타임은 XrSpatialBufferGetInfoEXT :: bufferIdsnapshot에 속하지 않는 경우 XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT을 반환해야 합니다 .

유효한 사용 (암시적)

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

반환 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

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

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

XrResult xrGetSpatialBufferFloatEXT(
    XrSpatialSnapshotEXT                        snapshot,
    const XrSpatialBufferGetInfoEXT*            info,
    uint32_t                                    bufferCapacityInput,
    uint32_t*                                   bufferCountOutput,
    float*                                      buffer);

매개변수 설명

  • snapshotXrSpatialSnapshotEXT 핸들입니다 .
  • info에는 쿼리할 버퍼에 관한 정보가 포함됩니다.
  • bufferCapacityInput는 배열의 용량입니다. 필요한 용량을 가져오기 위한 요청을 나타내려면 0을 사용합니다.
  • bufferCountOutputbuffer 배열의 요소 수 또는 bufferCapacityInput이 부족한 경우 필요한 용량입니다.
  • bufferfloat의 배열입니다 . bufferCapacityInput이 0인 경우 NULL일 수 있습니다.
  • 필요한 buffer 크기를 가져오는 방법에 관한 자세한 내용은 버퍼 크기 매개변수 섹션을 참고하세요.

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

XrSpatialBufferGetInfoEXT :: bufferIdXrSpatialBufferTypeEXTXR_SPATIAL_BUFFER_TYPE_FLOAT_EXT이 아닌 경우 런타임은 XR_ERROR_VALIDATION_FAILURE를 반환해야 합니다 .

런타임은 XrSpatialBufferGetInfoEXT :: bufferIdsnapshot에 속하지 않는 경우 XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT을 반환해야 합니다 .

유효한 사용 (암시적)

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

반환 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

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

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

XrResult xrGetSpatialBufferVector2fEXT(
    XrSpatialSnapshotEXT                        snapshot,
    const XrSpatialBufferGetInfoEXT*            info,
    uint32_t                                    bufferCapacityInput,
    uint32_t*                                   bufferCountOutput,
    XrVector2f*                                 buffer);

매개변수 설명

  • snapshotXrSpatialSnapshotEXT 핸들입니다 .
  • info에는 쿼리할 버퍼에 관한 정보가 포함됩니다.
  • bufferCapacityInput는 배열의 용량입니다. 필요한 용량을 가져오기 위한 요청을 나타내려면 0을 사용합니다.
  • bufferCountOutputbuffer 배열의 요소 수 또는 bufferCapacityInput이 부족한 경우 필요한 용량입니다.
  • bufferXrVector2f의 배열입니다 . bufferCapacityInput이 0인 경우 NULL일 수 있습니다.
  • 필요한 buffer 크기를 가져오는 방법에 관한 자세한 내용은 버퍼 크기 매개변수 섹션을 참고하세요.

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

XrSpatialBufferGetInfoEXT :: bufferIdXrSpatialBufferTypeEXTXR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT이 아닌 경우 런타임은 XR_ERROR_VALIDATION_FAILURE를 반환해야 합니다 .

런타임은 XrSpatialBufferGetInfoEXT :: bufferIdsnapshot에 속하지 않는 경우 XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT을 반환해야 합니다 .

유효한 사용 (암시적)

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

반환 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

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

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

XrResult xrGetSpatialBufferVector3fEXT(
    XrSpatialSnapshotEXT                        snapshot,
    const XrSpatialBufferGetInfoEXT*            info,
    uint32_t                                    bufferCapacityInput,
    uint32_t*                                   bufferCountOutput,
    XrVector3f*                                 buffer);

매개변수 설명

  • snapshotXrSpatialSnapshotEXT 핸들입니다 .
  • info에는 쿼리할 버퍼에 관한 정보가 포함됩니다.
  • bufferCapacityInput는 배열의 용량입니다. 필요한 용량을 가져오기 위한 요청을 나타내려면 0을 사용합니다.
  • bufferCountOutputbuffer 배열의 요소 수 또는 bufferCapacityInput이 부족한 경우 필요한 용량입니다.
  • bufferXrVector3f의 배열입니다 . bufferCapacityInput이 0인 경우 NULL일 수 있습니다.
  • 필요한 buffer 크기를 가져오는 방법에 관한 자세한 내용은 버퍼 크기 매개변수 섹션을 참고하세요.

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

런타임은 XrSpatialBufferGetInfoEXT :: bufferIdXrSpatialBufferTypeEXTXR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT이 아닌 경우 XR_ERROR_VALIDATION_FAILURE를 반환해야 합니다 .

런타임은 XrSpatialBufferGetInfoEXT :: bufferIdsnapshot에 속하지 않는 경우 XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT을 반환해야 합니다 .

유효한 사용 (암시적)

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

반환 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

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

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

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

회원 설명

  • type은 이 구조의 XrStructureType입니다.
  • nextNULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다.
  • bufferId 데이터를 가져올 버퍼의 XrSpatialBufferIdEXT입니다.

유효한 사용 (암시적)

#define XR_NULL_SPATIAL_BUFFER_ID_EXT 0

XR_NULL_SPATIAL_BUFFER_ID_EXT는 잘못된 XrSpatialBufferIdEXT 를 나타내는 예약된 값입니다 . 구체적으로 허용된 경우에만 API 함수에 전달되고 API 함수에서 반환될 수 있습니다.

업데이트 스냅샷 만들기

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

XrResult xrCreateSpatialUpdateSnapshotEXT(
    XrSpatialContextEXT                         spatialContext,
    const XrSpatialUpdateSnapshotCreateInfoEXT* createInfo,
    XrSpatialSnapshotEXT*                       snapshot);

매개변수 설명

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

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

런타임은 spatialContext 생성 시 XrSpatialContextCreateInfoEXT :: capabilityConfigs에 전달된 공간 기능에 대해 XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypesXrSpatialComponentTypeEXT 중 하나라도 사용 설정되지 않은 경우 XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT를 반환해야 합니다 .

애플리케이션이 XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes에 공간 구성요소 유형 목록을 제공하지 않으면 런타임은 스냅샷에 XrSpatialUpdateSnapshotCreateInfoEXT :: entities에 나열된 모든 공간 엔티티를 포함해야 합니다. 또한 spatialContext에 구성된 기능의 사용 설정된 모든 구성요소의 데이터를 포함해야 합니다.

런타임은 snapshotXrSpatialUpdateSnapshotCreateInfoEXT :: entities에 나열되지 않은 공간 엔티티를 포함하면 안 됩니다 .

애플리케이션은 원하는 만큼 스냅샷을 만들 수 있지만 각 새 스냅샷에 할당되는 메모리를 염두에 두어야 하며 더 이상 필요하지 않은 스냅샷은 삭제해야 합니다.

유효한 사용 (암시적)

반환 코드

성공

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT
  • XR_ERROR_TIME_INVALID
  • XR_ERROR_VALIDATION_FAILURE

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

typedef struct XrSpatialUpdateSnapshotCreateInfoEXT {
    XrStructureType                     type;
    const void*                         next;
    uint32_t                            entityCount;
    const XrSpatialEntityEXT*           entities;
    uint32_t                            componentTypeCount;
    const XrSpatialComponentTypeEXT*    componentTypes;
    XrSpace                             baseSpace;
    XrTime                              time;
} XrSpatialUpdateSnapshotCreateInfoEXT;

회원 설명

  • type은 이 구조의 XrStructureType입니다.
  • nextNULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다. 이러한 구조는 핵심 OpenXR이나 이 확장 프로그램에 정의되어 있지 않습니다.
  • entityCountentities 배열의 요소 수를 설명하는 uint32_t입니다.
  • entities는 런타임이 스냅샷에 구성요소 데이터를 포함해야 하는 XrSpatialEntityEXT 배열입니다.
  • componentTypeCountcomponentTypes 배열의 요소 수를 설명하는 uint32_t입니다.
  • componentTypes는 런타임이 스냅샷에 데이터를 포함해야 하는 XrSpatialComponentTypeEXT 배열입니다.
  • baseSpace는 업데이트된 모든 XrSpatialSnapshotEXT의 위치가 배치될 XrSpace입니다.
  • time은 업데이트 XrSpatialSnapshotEXT의 모든 위치가 있는 XrTime입니다.

유효한 사용 (암시적)

  • XR_EXT_spatial_entity 확장 프로그램은 XrSpatialUpdateSnapshotCreateInfoEXT를 사용하기 전에 사용 설정해야 합니다.
  • typeXR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT이어야 합니다.
  • nextNULL이거나 구조체 체인의 다음 구조체를 가리키는 유효한 포인터여야 합니다.
  • entitiesentityCount 유효한 XrSpatialEntityEXT 핸들의 배열을 가리키는 포인터여야 합니다.
  • componentTypeCount0이 아닌 경우 componentTypes은 유효한 componentTypeCount XrSpatialComponentTypeEXT 값의 배열을 가리키는 포인터여야 합니다.
  • baseSpace은 유효한 XrSpace 핸들이어야 합니다.
  • entityCount 매개변수는 0보다 커야 합니다.
  • baseSpaceentities의 요소는 모두 동일한 XrSession에서 생성, 할당 또는 검색되어야 합니다.

스냅샷 삭제

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

XrResult xrDestroySpatialSnapshotEXT(
    XrSpatialSnapshotEXT                        snapshot);

매개변수 설명

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

유효한 사용 (암시적)

스레드 안전

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

반환 코드

성공

  • XR_SUCCESS

실패

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_RUNTIME_FAILURE

일반 구성요소

제한된 2D

구성요소 데이터

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

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

회원 설명

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

XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTextents는 평면의 좌표계에서 항목의 크기를 x-y 평면으로 나타냅니다. 위치가 {0, 0, 0}, 회전이 {0, 0, 0, 1} (회전 없음), 범위가 {1, 1}인 평면은 구성요소 공간에서 앞면 법선 벡터가 +Z 방향을 향하는 {0, 0, 0}에 중심이 있는 1미터 x 1미터 평면을 나타냅니다.

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입니다.
  • nextNULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다. 이러한 구조는 핵심 OpenXR이나 이 확장 프로그램에 정의되어 있지 않습니다.
  • boundCountbounds 배열의 요소 수를 설명하는 uint32_t입니다.
  • boundsXrSpatialBounded2DDataEXT 배열입니다 .

런타임은 XrSpatialComponentBounded2DListEXTXrSpatialComponentDataQueryResultEXT :: next의 다음 체인에 있지만 XrSpatialComponentDataQueryConditionEXT ::componentTypeCount가 0이 아니고 XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTXrSpatialComponentDataQueryConditionEXT :: componentTypes에 포함되지 않은 경우 xrQuerySpatialComponentDataEXT에서 XR_ERROR_VALIDATION_FAILURE를 반환해야 합니다 .

런타임은 boundCountXrSpatialComponentDataQueryResultEXT :: entityIdCountOutput보다 작은 경우 xrQuerySpatialComponentDataEXT에서 XR_ERROR_SIZE_INSUFFICIENT를 반환해야 합니다 .

xrQuerySpatialComponentDataEXT :: snapshotxrCreateSpatialDiscoverySnapshotCompleteEXT에서 생성된 경우 런타임은 XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpaceXrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: timeXrSpatialBounded2DDataEXT :: center를 제공해야 합니다 .

xrQuerySpatialComponentDataEXT :: snapshotxrCreateSpatialUpdateSnapshotEXT에서 생성된 경우 런타임은 XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpaceXrSpatialUpdateSnapshotCreateInfoEXT :: timeXrSpatialBounded2DDataEXT :: center를 제공해야 합니다 .

유효한 사용 (암시적)

  • XrSpatialComponentBounded2DListEXT를 사용하기 전에 XR_EXT_spatial_entity 확장 프로그램을 사용 설정해야 합니다.
  • typeXR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT이어야 합니다.
  • nextNULL이거나 구조체 체인의 다음 구조체를 가리키는 유효한 포인터여야 합니다.
  • boundsboundCount XrSpatialBounded2DDataEXT 구조의 배열에 대한 포인터여야 합니다(must).
  • boundCount 매개변수는 0보다 커야 합니다.
구성

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

제한된 3D

구성요소 데이터

XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT는 데이터에 XrBoxf를 사용합니다.

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

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

typedef struct XrSpatialComponentBounded3DListEXT {
    XrStructureType    type;
    void*              next;
    uint32_t           boundCount;
    XrBoxf*            bounds;
} XrSpatialComponentBounded3DListEXT;

회원 설명

  • type은 이 구조의 XrStructureType입니다.
  • nextNULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다. 이러한 구조는 핵심 OpenXR이나 이 확장 프로그램에 정의되어 있지 않습니다.
  • boundCountbounds 배열의 요소 수를 설명하는 uint32_t입니다.
  • boundsXrBoxf의 배열입니다 .

런타임은 XrSpatialComponentBounded3DListEXTXrSpatialComponentDataQueryResultEXT :: next의 다음 체인에 있지만 XrSpatialComponentDataQueryConditionEXT ::componentTypeCount가 0이 아니고 XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTXrSpatialComponentDataQueryConditionEXT :: componentTypes에 포함되지 않은 경우 xrQuerySpatialComponentDataEXT에서 XR_ERROR_VALIDATION_FAILURE를 반환해야 합니다 .

런타임은 boundCountXrSpatialComponentDataQueryResultEXT :: entityIdCountOutput보다 작은 경우 xrQuerySpatialComponentDataEXT에서 XR_ERROR_SIZE_INSUFFICIENT를 반환해야 합니다 .

xrQuerySpatialComponentDataEXT :: snapshotxrCreateSpatialDiscoverySnapshotCompleteEXT에서 생성된 경우 런타임은 XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpaceXrBoxf :: centerXrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time에 제공해야 합니다 .

xrQuerySpatialComponentDataEXT :: snapshotxrCreateSpatialUpdateSnapshotEXT에서 생성된 경우 런타임은 XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpaceXrBoxf :: centerXrSpatialUpdateSnapshotCreateInfoEXT :: time에 제공해야 합니다 .

유효한 사용 (암시적)

  • XrSpatialComponentBounded3DListEXT를 사용하기 전에 XR_EXT_spatial_entity 확장 프로그램을 사용 설정해야 합니다.
  • typeXR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT이어야 합니다.
  • nextNULL이거나 구조체 체인의 다음 구조체를 가리키는 유효한 포인터여야 합니다.
  • boundsboundCount XrBoxf 구조체 배열의 포인터여야 합니다.
  • boundCount 매개변수는 0보다 커야 합니다.
구성

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

부모

구성요소 데이터

XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT는 데이터에 XrSpatialEntityIdEXT을 사용합니다.

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

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

typedef struct XrSpatialComponentParentListEXT {
    XrStructureType          type;
    void*                    next;
    uint32_t                 parentCount;
    XrSpatialEntityIdEXT*    parents;
} XrSpatialComponentParentListEXT;

회원 설명

  • type은 이 구조의 XrStructureType입니다.
  • nextNULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다. 이러한 구조는 핵심 OpenXR이나 이 확장 프로그램에 정의되어 있지 않습니다.
  • parentCountparents 배열의 요소 수를 설명하는 uint32_t입니다.
  • parentsXrSpatialEntityIdEXT의 배열입니다 .

런타임은 XrSpatialComponentParentListEXTXrSpatialComponentDataQueryResultEXT :: next의 다음 체인에 있지만 XrSpatialComponentDataQueryConditionEXT ::componentTypeCount가 0이 아니고 XR_SPATIAL_COMPONENT_TYPE_PARENT_EXTXrSpatialComponentDataQueryConditionEXT :: componentTypes에 포함되지 않은 경우 xrQuerySpatialComponentDataEXT에서 XR_ERROR_VALIDATION_FAILURE를 반환해야 합니다 .

런타임은 parentCountXrSpatialComponentDataQueryResultEXT :: entityIdCountOutput보다 작은 경우 xrQuerySpatialComponentDataEXT에서 XR_ERROR_SIZE_INSUFFICIENT를 반환해야 합니다 .

유효한 사용 (암시적)

  • XrSpatialComponentParentListEXT를 사용하기 전에 XR_EXT_spatial_entity 확장 프로그램을 사용 설정해야 합니다.
  • typeXR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT이어야 합니다.
  • nextNULL이거나 구조체 체인의 다음 구조체를 가리키는 유효한 포인터여야 합니다.
  • parentsparentCount XrSpatialEntityIdEXT 값의 배열을 가리키는 포인터여야 합니다.
  • parentCount 매개변수는 0보다 커야 합니다.
구성

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

메시 3D

구성요소 데이터

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

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

회원 설명

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

XrSpatialMeshDataEXT를 사용하는 구성요소 유형은 vertexBufferindexBufferXrSpatialBufferTypeEXT를 지정해야 합니다 .

유효한 사용 (암시적)

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

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

typedef struct XrSpatialComponentMesh3DListEXT {
    XrStructureType          type;
    void*                    next;
    uint32_t                 meshCount;
    XrSpatialMeshDataEXT*    meshes;
} XrSpatialComponentMesh3DListEXT;

회원 설명

  • type은 이 구조의 XrStructureType입니다.
  • nextNULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다.
  • meshCountmeshes 배열의 요소 수를 설명하는 uint32_t입니다.
  • meshesXrSpatialMeshDataEXT 배열입니다 .

애플리케이션은 XrSpatialComponentDataQueryConditionEXT :: componentTypesXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT을 추가하고 XrSpatialComponentDataQueryResultEXT의 다음 포인터 체인에 XrSpatialComponentMesh3DListEXT를 추가하여 XrSpatialSnapshotEXT의 공간 개체 메시 3D 구성요소를 쿼리할 수 있습니다 .

런타임은 XrSpatialComponentMesh3DListEXTXrSpatialComponentDataQueryResultEXT :: next의 다음 체인에 있지만 XrSpatialComponentDataQueryConditionEXT ::componentTypeCount가 0이 아니고 XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXTXrSpatialComponentDataQueryConditionEXT :: componentTypes에 포함되지 않은 경우 xrQuerySpatialComponentDataEXT에서 XR_ERROR_VALIDATION_FAILURE를 반환해야 합니다 .

런타임은 meshCountXrSpatialComponentDataQueryResultEXT :: entityIdCountOutput보다 작은 경우 xrQuerySpatialComponentDataEXT에서 XR_ERROR_SIZE_INSUFFICIENT를 반환해야 합니다 .

런타임이 meshes 배열에 채운 XrSpatialMeshDataEXT의 경우 XrSpatialMeshDataEXT :: vertexBufferXrSpatialBufferEXT :: bufferTypeXR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT이어야 하고(must) XrSpatialMeshDataEXT :: indexBufferXrSpatialBufferEXT :: bufferTypeXR_SPATIAL_BUFFER_TYPE_UINT32_EXT이어야 합니다(must).

유효한 사용 (암시적)

  • XrSpatialComponentMesh3DListEXT를 사용하기 전에 XR_EXT_spatial_entity 확장 프로그램을 사용 설정해야 합니다.
  • typeXR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXT이어야 합니다.
  • nextNULL이거나 구조체 체인의 다음 구조체를 가리키는 유효한 포인터여야 합니다.
  • meshesmeshCount XrSpatialMeshDataEXT 구조의 배열에 대한 포인터여야 합니다.
  • meshCount 매개변수는 0보다 커야 합니다.
구성

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

이 구성요소는 다음 XrSpatialCapabilityConfigurationBaseHeaderEXT 체인에 포함되기 위해 특별한 구성을 요구하지 않습니다 .

추적 상태 필터

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

typedef struct XrSpatialFilterTrackingStateEXT {
    XrStructureType                    type;
    const void*                        next;
    XrSpatialEntityTrackingStateEXT    trackingState;
} XrSpatialFilterTrackingStateEXT;

회원 설명

  • type은 이 구조의 XrStructureType입니다.
  • nextNULL이거나 구조체 체인의 다음 구조체에 대한 포인터입니다.
  • trackingState는 애플리케이션이 필터를 적용하려는 XrSpatialEntityTrackingStateEXT입니다.

애플리케이션은 다음 XrSpatialDiscoverySnapshotCreateInfoEXT 체인에서 XrSpatialFilterTrackingStateEXT를 사용하여 추적 상태가 trackingState인 항목만 검색하도록 범위를 지정할 수 있습니다 .

애플리케이션은 다음 XrSpatialComponentDataQueryConditionEXT 체인에서 XrSpatialFilterTrackingStateEXT를 사용하여 스냅샷의 구성요소 데이터 쿼리를 추적 상태가 trackingState인 항목으로만 범위를 지정할 수 있습니다 .

유효한 사용 (암시적)

예시 코드

애플리케이션 사용

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

공간 엔티티 검색 및 구성요소 데이터 쿼리

다음 예시 코드는 'Foo' 기능의 공간 항목을 검색하고 구성요소 데이터를 쿼리하는 방법을 보여줍니다.

/****************************/
/* Capability definition    */
/****************************/
// Foo capability has the following components -
// - XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT
#define XR_SPATIAL_CAPABILITY_FOO ((XrSpatialCapabilityEXT)1000740000U)

#define XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_FOO_EXT ((XrStructureType)1000740000U)
// Derives from XrSpatialCapabilityConfigurationBaseHeaderEXT
typedef struct XrSpatialCapabilityConfigurationFooEXT {
  XrStructureType                     type;
  const void* XR_MAY_ALIAS            next;
  XrSpatialCapabilityEXT              capability;
  uint32_t                            enabledComponentCount;
  const XrSpatialComponentTypeEXT*    enabledComponents;
} XrSpatialCapabilityConfigurationFooEXT;

/******************************/
/* End capability definition  */
/******************************/

auto waitUntilReady = [](XrFutureEXT future) {
  XrFuturePollInfoEXT pollInfo{XR_TYPE_FUTURE_POLL_INFO_EXT};
  XrFuturePollResultEXT pollResult{XR_TYPE_FUTURE_POLL_RESULT_EXT};
  pollInfo.future = future;
  do {
    // sleep(1);
    CHK_XR(xrPollFutureEXT(instance, &pollInfo, &pollResult));
  } while (pollResult.state != XR_FUTURE_STATE_READY_EXT);
};

// Create a spatial spatial context
XrSpatialContextEXT spatialContext{};
{
  const std::array<XrSpatialComponentTypeEXT, 1> enabledComponents = {
    XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT,
  };

  // Configure Foo capability for the spatial context
  XrSpatialCapabilityConfigurationFooEXT fooConfig{XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_FOO_EXT};
  fooConfig.capability = XR_SPATIAL_CAPABILITY_FOO;
  fooConfig.enabledComponentCount = enabledComponents.size();
  fooConfig.enabledComponents = enabledComponents.data();

  std::vector<XrSpatialCapabilityConfigurationBaseHeaderEXT*> capabilityConfigs;
  capabilityConfigs.push_back(reinterpret_cast<XrSpatialCapabilityConfigurationBaseHeaderEXT*>(&fooConfig));

  XrSpatialContextCreateInfoEXT spatialContextCreateInfo{XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT};
  spatialContextCreateInfo.capabilityConfigCount = capabilityConfigs.size();
  spatialContextCreateInfo.capabilityConfigs = capabilityConfigs.data();
  XrFutureEXT createContextFuture;
  CHK_XR(xrCreateSpatialContextAsyncEXT(session, &spatialContextCreateInfo, &createContextFuture));

  waitUntilReady(createContextFuture);

  XrCreateSpatialContextCompletionEXT completion{XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT};
  CHK_XR(xrCreateSpatialContextCompleteEXT(session, createContextFuture, &completion));
  if (completion.futureResult != XR_SUCCESS) {
    return;
  }

  spatialContext = completion.spatialContext;
}

auto discoverSpatialEntities = [&](XrSpatialContextEXT spatialContext, XrTime time) {
  // We want to look for entities that have the following components.
  std::array<XrSpatialComponentTypeEXT, 1> snapshotComponents {XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT};

  XrSpatialDiscoverySnapshotCreateInfoEXT snapshotCreateInfo{XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT};
  snapshotCreateInfo.componentTypeCount = snapshotComponents.size();
  snapshotCreateInfo.componentTypes = snapshotComponents.data();
  XrFutureEXT future = XR_NULL_FUTURE_EXT;
  CHK_XR(xrCreateSpatialDiscoverySnapshotAsyncEXT(spatialContext, &snapshotCreateInfo, &future));

  waitUntilReady(future);

  XrCreateSpatialDiscoverySnapshotCompletionInfoEXT completionInfo{XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT};
  completionInfo.baseSpace = localSpace;
  completionInfo.time = time;
  completionInfo.future = future;

  XrCreateSpatialDiscoverySnapshotCompletionEXT completion{XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT};
  CHK_XR(xrCreateSpatialDiscoverySnapshotCompleteEXT(spatialContext, &completionInfo, &completion));
  if (completion.futureResult == XR_SUCCESS) {
    // Query for the bounded2d component data
    XrSpatialComponentTypeEXT componentToQuery = XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT;
    XrSpatialComponentDataQueryConditionEXT queryCond{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT};
    queryCond.componentTypes = &componentToQuery;

    XrSpatialComponentDataQueryResultEXT queryResult{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT};
    queryResult.entityIdCapacityInput = 0;
    queryResult.entityIds = nullptr;
    queryResult.entityStateCapacityInput = 0;
    queryResult.entityStates = nullptr;
    CHK_XR(xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond, &queryResult));

    std::vector<XrSpatialEntityIdEXT> entityIds(queryResult.entityIdCountOutput);
    std::vector<XrSpatialEntityTrackingStateEXT> entityStates(queryResult.entityStateCountOutput);
    queryResult.entityIdCapacityInput = entityIds.size();
    queryResult.entityIds = entityIds.data();
    queryResult.entityStateCapacityInput = entityStates.size();
    queryResult.entityStates = entityStates.data();

    std::vector<XrSpatialBounded2DDataEXT> bounded2d(queryResult.entityIdCountOutput);
    XrSpatialComponentBounded2DListEXT boundsList{XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT};
    boundsList.boundCount = bounded2d.size();
    boundsList.bounds = bounded2d.data();
    queryResult.next = &boundsList;

    CHK_XR(xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond, &queryResult));

    for (int32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
      if (entityStates[i] == XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT) {
        // 2D extents for entity entityIds[i] is bounded2d[i].extents.
      }
    }

    CHK_XR(xrDestroySpatialSnapshotEXT(completion.snapshot));
  }
};

while (1) {
  // ...
  // For every frame in frame loop
  // ...

  XrFrameState frameState;  // previously returned from xrWaitFrame
  const XrTime time = frameState.predictedDisplayTime;

  // Poll for the XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT event
  XrEventDataBuffer event = {XR_TYPE_EVENT_DATA_BUFFER};
  XrResult result = xrPollEvent(instance, &event);
  if (result == XR_SUCCESS) {
      switch (event.type) {
          case XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT: {
              const XrEventDataSpatialDiscoveryRecommendedEXT& eventdata =
                  *reinterpret_cast<XrEventDataSpatialDiscoveryRecommendedEXT*>(&event);
              // Discover spatial entities for the context that we received the "discovery
              // recommended" event for.
              discoverSpatialEntities(eventdata.spatialContext, time);
              break;
          }
      }
  }

  // ...
  // Finish frame loop
  // ...
}

CHK_XR(xrDestroySpatialContextEXT(spatialContext));

버퍼 데이터 쿼리

다음 예시 코드는 XrSpatialBufferEXT를 제공하는 구성요소의 데이터를 가져오는 방법을 보여줍니다 .

/****************************/
/* Component definition     */
/****************************/
// Foo component that provides an XrVector3f buffer
#define XR_SPATIAL_COMPONENT_TYPE_FOO_EXT ((XrSpatialComponentTypeEXT)1000740000U)

#define XR_TYPE_SPATIAL_COMPONENT_FOO_LIST_EXT ((XrStructureType)1000740000U)

// XrSpatialComponentFooListEXT extends XrSpatialComponentDataQueryResultEXT
typedef struct XrSpatialComponentFooListEXT {
    XrStructureType                   type;
    void* XR_MAY_ALIAS                next;
    uint32_t                          fooCount;
    XrSpatialBufferEXT*               foo;
} XrSpatialComponentFooListEXT;

/******************************/
/* End Component definition  */
/******************************/

// Query for the foo component data
XrSpatialComponentTypeEXT componentToQuery = XR_SPATIAL_COMPONENT_TYPE_FOO_EXT;
XrSpatialComponentDataQueryConditionEXT queryCond{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT};
queryCond.componentTypeCount = 1;
queryCond.componentTypes = &componentToQuery;

XrSpatialComponentDataQueryResultEXT queryResult{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT};
CHK_XR(xrQuerySpatialComponentDataEXT(snapshot, &queryCond, &queryResult));

std::vector<XrSpatialEntityIdEXT> entityIds(queryResult.entityIdCountOutput);
queryResult.entityIdCapacityInput = entityIds.size();
queryResult.entityIds = entityIds.data();

std::vector<XrSpatialBufferEXT> fooBuffers(queryResult.entityIdCountOutput);
XrSpatialComponentFooListEXT fooList{XR_TYPE_SPATIAL_COMPONENT_FOO_LIST_EXT};
fooList.fooCount = fooBuffers.size();
fooList.foo = fooBuffers.data();
queryResult.next = &fooList;

CHK_XR(xrQuerySpatialComponentDataEXT(snapshot, &queryCond, &queryResult));

for (int32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
  // foo component data for entity entityIds[i]
  if (fooBuffers[i].bufferType == XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT) {
    XrSpatialBufferGetInfoEXT getInfo{XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT};
    getInfo.bufferId = fooBuffers[i].bufferId;
    uint32_t bufferCountOutput;
    CHK_XR(xrGetSpatialBufferVector3fEXT(snapshot, &getInfo, 0, &bufferCountOutput, nullptr));
    std::vector<XrVector3f> vertexBuffer(bufferCountOutput);
    CHK_XR(xrGetSpatialBufferVector3fEXT(snapshot, &getInfo, bufferCountOutput, &bufferCountOutput, vertexBuffer.data()));

    // XrVertex3f buffer for entity entityIds[i] is now available in vertexBuffer vector.
  }
}

확장 프로그램 가이드라인

  • 확장 프로그램이 공간 항목에 관한 추가 데이터를 제공하는 새로운 XrSpatialComponentTypeEXT를 정의하는 경우

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

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

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

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

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

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

시맨틱 라벨 디자인 및 확장 가이드라인

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

  • 확장 프로그램이 XrSpatialCapabilityEXT의 시맨틱 라벨을 정의하는 경우 해당 구성요소의 데이터가 될 라벨 집합('시맨틱 라벨 집합')이 있는 새로운 열거형뿐만 아니라 새로운 XrSpatialComponentTypeEXT를 정의하여 정의해야 합니다.
  • 의미론적 라벨 집합을 나타내는 열거형에는 항목이 이 집합의 라벨로 분류되지 않음을 나타내는 값이 있어야 합니다. 이 열거자의 이름에는 'UNCATEGORIZED'가 포함되어야 합니다(예: XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT). 이 값은 런타임이 이 항목을 인식하지만 이 항목이 분류된 다른 시맨틱 라벨 세트가 있음을 애플리케이션에 나타냅니다.
  • xrEnumerateSpatialCapabilityComponentTypesEXT에서 새로 정의된 XrSpatialComponentTypeEXT를 열거하면 런타임이 해당 구성요소 유형에 상응하는 시맨틱 라벨 세트 (따라서 세트에 정의된 라벨)를 지원한다는 의미입니다.
  • 애플리케이션은 구성 구조체의 해당 XrSpatialComponentTypeEXT를 구성요소 유형이 열거된 기능의 XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents 배열에 포함하여 이 시맨틱 라벨 세트에 속하는 라벨이 있는 엔티티를 검색하려는 의도를 표현합니다.
  • 단일 공간 항목에 여러 구성요소가 있을 수 있으며 각 구성요소는 자체 시맨틱 라벨 세트에서 라벨을 제공합니다. 가상의 시맨틱 라벨 세트 XrSpatialObjectSemanticLabel가 있는 다음 예시를 살펴보겠습니다. XrSpatialObjectSemanticLabel에는 의자, 소파, 테이블 등의 값이 있을 수 있습니다. XrSpatialSofaBrand(예: IKEA, Wayfair 등의 값을 가질 수 있음) 및 XrSpatialIkeaSofa(예: 소파의 특정 IKEA 모델 이름을 가질 수 있음) 이 시나리오에서는 동일한 소파 항목에 3가지 구성요소 (3가지 시맨틱 라벨 세트의 라벨)가 모두 있으며, 각 구성요소는 항목에 관한 서로 다른 세부 수준의 정보를 제공합니다.
  • 확장에서 UNCATEGORIZED 라벨 외에 여러 라벨이 포함된 새로운 시맨틱 라벨 세트를 제공하는 새로운 XrSpatialComponentTypeEXT를 정의하는 경우 확장 프로그램은 애플리케이션이 해당 구성요소 유형에 해당하는 시맨틱 라벨 세트에 정의된 라벨의 하위 집합만 활성화할 수 있는 XrSpatialCapabilityFeatureEXT를 정의하는 것을 고려해야 합니다. 이 하위 집합은 기능 구성의 다음 체인에 제공되며, 런타임이 추적 파이프라인을 최적화하고 제공된 하위 집합만 추적하도록 하는 힌트 역할을 합니다. 이러한 기능 구조체의 예는 아래에 제공됩니다 .
  • 확장 프로그램은 기존 시맨틱 라벨 세트 열거에 라벨을 추가해서는 안 됩니다. 대신 새로 추가된 열거자 외에도 동일한 시맨틱과 다른 집합의 값과 동일한 값을 갖는 동등한 열거자가 포함된 새 열거를 정의해야 합니다. 새로 정의된 시맨틱 라벨 세트의 사양은 이전 라벨 세트와 새 라벨 세트 간의 매핑도 설정해야 합니다. 아래 예시를 참고하세요 .
시맨틱 라벨 하위 집합의 공간 기능 정의 예
// New example semantic label set.
typedef enum XrSpatialExampleSemanticLabelEXT {
  // ... label values
} XrSpatialExampleSemanticLabelEXT;

/*
typedef enum XrSpatialCapabilityFeatureEXT {
  // .. existing values

  // new spatial feature value
  XR_SPATIAL_CAPABILITY_FEATURE_EXAMPLE_SEMANTIC_LABEL_SUBSET_EXT

  // .. existing values
} XrSpatialCapabilityFeatureEXT;
*/

// New spatial feaure configuration structure
typedef struct XrSpatialFeatureExampleSemanticLabelSubsetEXT {
    XrStructureType                             type;
    const void* XR_MAY_ALIAS                    next;
    uint32_t                                    semanticLabelCount;
    const XrSpatialExampleSemanticLabelEXT*     semanticLabels;
} XrSpatialFeatureExampleSemanticLabelSubsetEXT;
공간 시맨틱 라벨 확장 프로그램 예시
typedef enum XrSpatialExamplePlaneSemanticLabelExtensionEXT {
    XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_UNCATEGORIZED_EXT = 1,
    XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_FLOOR_EXT = 2,
    XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_WALL_EXT = 3,
    XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_CEILING_EXT = 4,
    XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_TABLE_EXT = 5,
    XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_DOOR_EXT = 6,
    XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_WINDOW_EXT = 7,
    XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialExamplePlaneSemanticLabelExtensionEXT;

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

For all non-UNCATEGORIZED label enumerants in elink:XrSpatialPlaneSemanticLabelEXT,
the runtime must: return that enumerant if and only if it returns the corresponding
label enumerant from elink:XrSpatialExamplePlaneSemanticLabelExtensionEXT with the same value
i.e.
the ename:XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT value for that entity must:
correspond with the ename:XR_SPATIAL_COMPONENT_TYPE_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_EXT values
according to the following table -

[width="100%",options="header"]
|====
| XrSpatialExamplePlaneSemanticLabelExtensionEXT                | XrSpatialPlaneSemanticLabelEXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_FLOOR_EXT   | XR_SPATIAL_PLANE_SEMANTIC_LABEL_FLOOR_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_WALL_EXT    | XR_SPATIAL_PLANE_SEMANTIC_LABEL_WALL_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_CEILING_EXT | XR_SPATIAL_PLANE_SEMANTIC_LABEL_CEILING_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_TABLE_EXT   | XR_SPATIAL_PLANE_SEMANTIC_LABEL_TABLE_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_DOOR_EXT    | XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_WINDOW_EXT  | XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT
|====

새로운 매크로

새 베이스 유형

  • XrSpatialBufferIdEXT
  • XrSpatialEntityIdEXT

새 객체 유형

새 명령어

새 구조

새 열거형

새 열거형 상수

  • XR_EXT_SPATIAL_ENTITY_EXTENSION_NAME
  • XR_EXT_spatial_entity_SPEC_VERSION
  • XrObjectType 확장 :

    • XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXT
    • XR_OBJECT_TYPE_SPATIAL_ENTITY_EXT
    • XR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT
  • XrResult 확장 :

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

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

문제

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

    • 해결됨
    • 답변: 아니요. 감지된 항목을 표현하는 방식과 자체 추적 기능을 기반으로 런타임에서 완전히 결정합니다. 사양에서는 최소 기대치를 설정하기 위해 특정 기능의 보장된 구성요소를 제외하고 공간 엔티티의 특정 표현을 규정하지 않습니다. 런타임은 별도의 기능으로 감지된 엔티티를 병합하고 이를 식별하는 데 도움이 된 모든 기능의 보장된 구성요소가 있는 단일 엔티티로 나타낼 수 있습니다. 예를 들어 테이블은 평면 추적 기능과 객체 추적 기능 모두에서 감지될 수 있으며, 평면 추적은 항목에 XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT 구성요소를 제공하고 객체 추적은 XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT을 제공합니다 . 특정 런타임은 보장된 구성요소의 자체 집합이 있는 2개의 별도 항목으로 표를 제공할 수 있는 반면 특정 런타임은 표를 나타내는 항목을 하나만 제공하고 동일한 항목에 XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTXR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT를 모두 포함할 수 있습니다. 여기서 중요한 점은 지정된 공간 항목이 지정된 구성요소 유형구성요소를 최대 하나만 가질 수 있다는 것입니다 . 따라서 여러 기능에서 생성된 구성요소 데이터가 특정 항목에 대해 충돌하는 경우 런타임은 이를 2개의 별도 항목으로 나타내야 합니다.

버전 기록

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

    • 초기 확장 프로그램 설명