XR_EXT_spatial_entity
Name String
XR_EXT_spatial_entity
Loại tiện ích
Phần mở rộng thực thể
Số máy lẻ đã đăng ký
741
Bản sửa đổi
1
Trạng thái phê chuẩn
Đã phê chuẩn
Phần phụ thuộc của tiện ích và phiên bản
XR_EXT_future
Cộng tác viên
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
Tổng quan
Tiện ích này giới thiệu các khái niệm và nền tảng để hiểu rõ cảnh và suy luận không gian trong OpenXR. Điều này hợp nhất một số chức năng có liên quan nhưng riêng biệt, được liệt kê, định cấu hình và tương tác theo cách thống nhất rộng rãi như được xác định trong tiện ích này. Vì tiện ích này thiếu định nghĩa cụ thể về bất kỳ khía cạnh chức năng nào trong số này, nên văn bản đặc tả chính thức có xu hướng hơi trừu tượng. Các ví dụ trong văn bản đặc tả tiện ích này đôi khi đề cập đến chức năng được xác định trong một tiện ích liên quan sắp ra mắt hoặc giả định nhằm mục đích minh hoạ, mà không nhất thiết giới hạn hoặc chỉ định chức năng bổ sung đó.
Các phần chính của tiện ích này như sau:
- Thực thể không gian : Chức năng tập trung vào thực thể , vốn tự cung cấp rất ít chức năng.
- Thành phần không gian : Các thực thể này có thành phần liên kết với chúng để cung cấp dữ liệu và hành vi.
- Loại thành phần không gian : Mỗi thành phần không gian thuộc một loại thành phần cụ thể và bất kỳ thực thể nào cũng có tối đa một thành phần thuộc bất kỳ loại thành phần nào.
- Bối cảnh không gian : Tất cả hoạt động tương tác với thực thể không gian đều diễn ra trong một bối cảnh sau giai đoạn khởi chạy và định cấu hình.
- Khả năng không gian : Thao tác với thực thể không gian được cung cấp rộng rãi theo khả năng . Chức năng là một đơn vị chức năng, ví dụ (không giới hạn) các điểm neo do ứng dụng xác định, tính năng phát hiện mặt phẳng hoặc theo dõi hình ảnh. Mỗi khả năng thường được xác định trong một tiện ích riêng biệt (được bật khi tạo thực thể như bình thường) và được bật cho một bối cảnh cụ thể tại thời điểm tạo.
- Mỗi chức năng được liên kết với một tập hợp loại thành phần mà thành phần có mặt trên mọi thực thể do chức năng đó hiển thị. Phần mở rộng xác định một khả năng sẽ chỉ định loại thành phần nào là bắt buộc đối với khả năng đó ("được đảm bảo"), trong khi chính phần mở rộng đó hoặc các phần mở rộng khác có thể chỉ định loại thành phần không bắt buộc do một số phương thức triển khai tiềm năng cung cấp. Bất kỳ số lượng khả năng nào cũng có thể cung cấp cho các thực thể những thành phần của một loại thành phần nhất định, có thể sử dụng đồng nhất bất kể khả năng nào đã tạo ra thành phần đó.
- Tính năng về khả năng không gian : Ngoài ra, một số khả năng cần được định cấu hình, do đó được tham số hoá bằng tính năng về khả năng .
Tiện ích này cung cấp một cơ chế để liệt kê các thành phần do từng khả năng được hỗ trợ trên hệ thống hiện tại cung cấp, cả thành phần bắt buộc và không bắt buộc.
Vì một số cách triển khai có thể yêu cầu các mức độ tham số hoá khác nhau cho khả năng , nên tiện ích này cung cấp một cơ chế để liệt kê các tính năng của khả năng được hỗ trợ liên kết với một khả năng nhất định trong hệ thống hiện tại.
Tiện ích này cũng xác định một số thành phần phổ biến dự kiến sẽ được dùng trong nhiều khả năng .
Thực thể không gian
Thực thể không gian là những thực thể tồn tại trong một không gian nào đó, có nhiều dữ liệu liên kết được sắp xếp thành các thành phần. Có thể là bất kỳ trường hợp nào sau đây:
- Vật lý (ví dụ: các bề mặt phẳng như tường và sàn, các vật thể như ghế và tủ sách, v.v.)
- Ảo (ví dụ: nội dung do một ứng dụng hoặc người dùng khác đặt và chia sẻ),
- Do ứng dụng xác định (ví dụ: ứng dụng đánh dấu một khu vực là "phòng khách" hoặc "nhà bếp", hoặc đánh dấu một điểm là vị trí đặt TV, v.v.)
Những thứ được hiển thị thông qua hệ thống hành động, chẳng hạn như bộ điều khiển hoặc ánh mắt, không được mô hình hoá dưới dạng thực thể không gian.
Các thực thể không gian trong OpenXR được mô hình hoá dưới dạng một Hệ thống thành phần thực thể . Mỗi thực thể không gian có một tập hợp các thành phần và mỗi thành phần cung cấp một tập hợp dữ liệu và hành vi riêng biệt cho thực thể đó.
Thực thể không gian được biểu thị bằng một nguyên tử XrSpatialEntityIdEXT hoặc một tay điều khiển XrSpatialEntityEXT, thông tin chi tiết về các thực thể này được cung cấp trong phần Biểu diễn thực thể không gian.
Loại thành phần không gian
Một thực thể không gian có một hoặc nhiều thành phần cung cấp dữ liệu hoặc hành vi cho thực thể đó. Hãy xem phần Thành phần phổ biến để biết một số thành phần phổ biến do tiện ích này xác định.
typedef enum XrSpatialComponentTypeEXT {
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT = 1,
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT = 2,
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT = 3,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT = 4,
XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT = 1000741000,
XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT = 1000741001,
XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT = 1000741002,
XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT = 1000741003,
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT = 1000743000,
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT = 1000744000,
XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT = 1000744001,
XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT = 1000744002,
XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT = 1000762000,
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT = 1000763000,
XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT = 1000782000,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT = 1000783000,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT = 1000783001,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT = 1000783002,
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID = 1000785000,
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID = 1000786000,
XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID = 1000791000,
XR_SPATIAL_COMPONENT_TYPE_ROOM_ANDROIDSYS = 1000792002,
XR_SPATIAL_COMPONENT_TYPE_MATERIAL_TYPE_ANDROIDSYS = 1000792003,
XR_SPATIAL_COMPONENT_TYPE_CONFIDENCE_ANDROIDSYS = 1000792004,
XR_SPATIAL_COMPONENT_TYPE_ROOM_EMPTINESS_ANDROIDSYS = 1000792005,
XR_SPATIAL_COMPONENT_TYPE_OCCUPANCY_GRID_ANDROIDX1 = 1000793000,
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID = 1000794000,
XR_SPATIAL_COMPONENT_TYPE_STREETSCAPE_GEOMETRY_METADATA_ANDROIDX2 = 1000798000,
XR_SPATIAL_COMPONENT_TYPE_GEOMETRY_POINT_ANDROID = 1000803000,
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_SCOPES_ANDROIDX1 = 1000808000,
XR_SPATIAL_COMPONENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialComponentTypeEXT;
Kiểu liệt kê XrSpatialComponentTypeEXT xác định các loại thành phần mà thời gian chạy có thể hỗ trợ.
Không phải tất cả các loại thành phần được liệt kê đều do tiện ích này tự cung cấp: một số loại yêu cầu bật các tiện ích bổ sung tại thời điểm tạo thực thể, như đã ghi trong tài liệu.
Các giá trị liệt kê có các giá trị sau:
Nội dung mô tả enum
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT
Thành phần cung cấp ranh giới 2D cho một thực thể không gian. Cấu trúc danh sách tương ứng là XrSpatialComponentBounded2DListEXT; Cấu trúc dữ liệu tương ứng là XrSpatialBounded2DDataEXT
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT
Thành phần cung cấp ranh giới 3D cho một thực thể không gian. Cấu trúc danh sách tương ứng là XrSpatialComponentBounded3DListEXT ; Cấu trúc dữ liệu tương ứng là XrBoxf
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT
Thành phần cung cấp XrSpatialEntityIdEXT của thành phần mẹ cho một thực thể không gian. Cấu trúc danh sách tương ứng là XrSpatialComponentParentListEXT ; Cấu trúc dữ liệu tương ứng là XrSpatialEntityIdEXT
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT
Thành phần cung cấp lưới 3D cho một thực thể không gian. Cấu trúc danh sách tương ứng là XrSpatialComponentMesh3DListEXT ; Cấu trúc dữ liệu tương ứng là XrSpatialMeshDataEXT
XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT
Thành phần cung cấp enum căn chỉnh mặt phẳng cho một thực thể không gian. Cấu trúc danh sách tương ứng là XrSpatialComponentPlaneAlignmentListEXT ; Cấu trúc dữ liệu tương ứng là XrSpatialPlaneAlignmentEXT (Do tiện ích XR_EXT_spatial_plane_tracking thêm vào)
XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT
Thành phần cung cấp lưới 2D cho một thực thể không gian. Cấu trúc danh sách tương ứng là XrSpatialComponentMesh2DListEXT ; Cấu trúc dữ liệu tương ứng là XrSpatialMeshDataEXT (Do tiện ích XR_EXT_spatial_plane_tracking thêm vào)
XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT
Thành phần cung cấp đa giác ranh giới 2D cho một thực thể không gian. Cấu trúc danh sách tương ứng là XrSpatialComponentPolygon2DListEXT ; Cấu trúc dữ liệu tương ứng là XrSpatialPolygon2DDataEXT (Do tiện ích XR_EXT_spatial_plane_tracking thêm vào)
XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT
Thành phần cung cấp nhãn ngữ nghĩa cho một mặt phẳng. Cấu trúc danh sách tương ứng là XrSpatialComponentPlaneSemanticLabelListEXT ; Cấu trúc dữ liệu tương ứng là XrSpatialPlaneSemanticLabelEXT (Do tiện ích XR_EXT_spatial_plane_tracking thêm vào)
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT
Một thành phần mô tả loại điểm đánh dấu, mã nhận dạng và vị trí. Cấu trúc danh sách tương ứng là XrSpatialComponentMarkerListEXT ; Cấu trúc dữ liệu tương ứng là XrSpatialMarkerDataEXT (Do tiện ích XR_EXT_spatial_marker_tracking thêm vào)
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT
Thành phần cung cấp nhãn ngữ nghĩa cho một cảnh; Cấu trúc danh sách tương ứng là XrSpatialComponentObjectSemanticLabelListEXT . Cấu trúc dữ liệu tương ứng là XrSpatialObjectSemanticLabelEXT . (Do tiện ích XR_EXT_spatial_object_tracking thêm)
XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT
Thành phần cung cấp nhãn ngữ nghĩa cho bàn phím; Cấu trúc danh sách tương ứng là XrSpatialComponentKeyboardSemanticLabelListEXT . Cấu trúc dữ liệu tương ứng là XrSpatialKeyboardSemanticLabelEXT (Được thêm bằng tiện ích XR_EXT_spatial_object_tracking)
XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT
Thành phần cung cấp nhãn ngữ nghĩa cho chuột; Cấu trúc danh sách tương ứng là XrSpatialComponentMouseSemanticLabelListEXT . Cấu trúc dữ liệu tương ứng là XrSpatialMouseSemanticLabelEXT (Do tiện ích XR_EXT_spatial_object_tracking thêm vào)
XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT
Thành phần cung cấp vị trí cho một neo. Cấu trúc danh sách tương ứng là XrSpatialComponentAnchorListEXT ; Cấu trúc dữ liệu tương ứng là XrPosef (Do tiện ích XR_EXT_spatial_anchor thêm vào)
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT
Thành phần cung cấp UUID cố định cho một thực thể không gian. Cấu trúc danh sách tương ứng là XrSpatialComponentPersistenceListEXT ; Cấu trúc dữ liệu tương ứng là XrSpatialPersistenceDataEXT (Do tiện ích XR_EXT_spatial_persistence thêm vào)
XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT
Thành phần mô tả loại hình ảnh phẳng. Cấu trúc danh sách tương ứng là XrSpatialComponentImage2DListEXT ; Cấu trúc dữ liệu tương ứng là XrSpatialImageSizeEXT . (Do tiện ích XR_EXT_spatial_image_tracking thêm)
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT
Thành phần cung cấp pháp tuyến cho lưới 3D của một thực thể không gian. Cấu trúc danh sách tương ứng là XrSpatialComponentMesh3DNormalsListEXT ; Cấu trúc dữ liệu tương ứng là XrSpatialBufferEXT (Được thêm bởi tiện ích XR_EXT_spatial_mesh_tracking)
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT
Thành phần cung cấp nhãn ngữ nghĩa theo đỉnh cho lưới 3D của một thực thể không gian. Cấu trúc danh sách tương ứng là XrSpatialComponentMesh3DVertexSemanticLabelsListEXT ; Cấu trúc dữ liệu tương ứng là XrSpatialBufferEXT ; Dữ liệu trong vùng đệm liên kết với XrSpatialMeshSemanticLabelEXT (Do tiện ích XR_EXT_spatial_mesh_tracking thêm vào)
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT
Thành phần cung cấp nhãn ngữ nghĩa cho từng mặt tam giác của lưới 3D của một thực thể không gian. Cấu trúc danh sách tương ứng là XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT ; Cấu trúc dữ liệu tương ứng là XrSpatialBufferEXT ; Dữ liệu trong vùng đệm liên kết với XrSpatialMeshSemanticLabelEXT (Do tiện ích XR_EXT_spatial_mesh_tracking thêm vào)
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID
Thành phần cung cấp nhãn ngữ nghĩa cho một đối tượng; Cấu trúc danh sách tương ứng là XrSpatialComponentObjectSemanticLabelListANDROID ; Cấu trúc dữ liệu tương ứng là XrSpatialObjectSemanticLabelANDROID (Do tiện ích XR_ANDROID_spatial_object_tracking thêm vào)
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID
Thành phần cung cấp tư thế của một lượt nhấn raycast trên một thực thể. Cấu trúc danh sách tương ứng là XrSpatialComponentRaycastResultListANDROID ; Cấu trúc dữ liệu tương ứng là XrSpatialRaycastResultDataANDROID (Do tiện ích XR_ANDROID_spatial_discovery_raycast thêm vào)
XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID
Thành phần cung cấp mã nhận dạng của thực thể bao gồm thực thể đính kèm. Cấu trúc danh sách tương ứng là XrSpatialComponentSubsumedByListANDROID ; Cấu trúc dữ liệu tương ứng là XrSpatialEntityIdEXT (Do tiện ích XR_ANDROID_spatial_component_subsumed_by thêm vào)
XR_SPATIAL_COMPONENT_TYPE_ROOM_ANDROIDSYS
Thành phần cung cấp kích thước và loại phòng của hộp đựng giày; Cấu trúc danh sách tương ứng là XrSpatialComponentRoomListANDROIDSYS ; Cấu trúc dữ liệu tương ứng là XrSpatialRoomDataANDROIDSYS (Do tiện ích XR_ANDROIDSYS_spatial_room_tracking thêm vào)
XR_SPATIAL_COMPONENT_TYPE_MATERIAL_TYPE_ANDROIDSYS
Thành phần cung cấp loại chất liệu của một bề mặt ranh giới; Cấu trúc danh sách tương ứng là XrSpatialComponentMaterialTypeListANDROIDSYS; Cấu trúc dữ liệu tương ứng là XrSpatialMaterialTypeANDROIDSYS (Do tiện ích XR_ANDROIDSYS_spatial_room_tracking thêm vào)
XR_SPATIAL_COMPONENT_TYPE_CONFIDENCE_ANDROIDSYS
Thành phần cung cấp độ tin cậy của một đối tượng có thể theo dõi; Cấu trúc danh sách tương ứng là XrSpatialComponentConfidenceListANDROIDSYS; Cấu trúc dữ liệu tương ứng là float (Do tiện ích XR_ANDROIDSYS_spatial_room_tracking thêm vào)
XR_SPATIAL_COMPONENT_TYPE_ROOM_EMPTINESS_ANDROIDSYS
Thành phần cung cấp thông tin về độ trống của phòng; Cấu trúc danh sách tương ứng là XrSpatialComponentRoomEmptinessListANDROIDSYS ; Cấu trúc dữ liệu tương ứng là float (Do tiện ích XR_ANDROIDSYS_spatial_room_tracking thêm vào)
XR_SPATIAL_COMPONENT_TYPE_OCCUPANCY_GRID_ANDROIDX1
Thành phần cung cấp thông tin về lưới chiếm dụng trên thực thể đính kèm. Cấu trúc danh sách tương ứng là XrSpatialComponentOccupancyGridListANDROIDX1 ; Cấu trúc dữ liệu tương ứng là XrSpatialOccupancyGridDataANDROIDX1 (Do tiện ích XR_ANDROIDX1_spatial_occupancy_grid thêm vào)
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID
Thành phần mô tả chú thích tứ giác. Cấu trúc danh sách tương ứng là XrSpatialComponentAnnotationQuadListANDROID ; Cấu trúc dữ liệu tương ứng là XrSpatialAnnotationQuadDataANDROID (Do tiện ích XR_ANDROID_spatial_annotation_tracking thêm vào)
XR_SPATIAL_COMPONENT_TYPE_STREETSCAPE_GEOMETRY_METADATA_ANDROIDX2
Thành phần cung cấp siêu dữ liệu cho hình học cảnh quan đường phố; Cấu trúc danh sách tương ứng là XrSpatialComponentStreetscapeGeometryMetadataListANDROIDX2 ; Cấu trúc dữ liệu tương ứng là XrSpatialStreetscapeGeometryMetadataANDROIDX2 (Do tiện ích XR_ANDROIDX2_geospatial_streetscape thêm vào)
XR_SPATIAL_COMPONENT_TYPE_GEOMETRY_POINT_ANDROID
Thành phần xác định một thực thể là một điểm hình học. Không có danh sách hoặc cấu trúc dữ liệu tương ứng cho loại thành phần này. Sự hiện diện của thành phần này chỉ cho biết khả năng của một thực thể có thể được đính kèm vào một neo. (Do tiện ích XR_ANDROID_spatial_geometry_point thêm)
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_SCOPES_ANDROIDX1
Một thành phần mô tả(các) phạm vi duy trì mà thực thể được duy trì. Nếu thời gian chạy hỗ trợ XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT, thì thời gian chạy đó cũng phải hỗ trợ thành phần này. Cấu trúc dữ liệu tương ứng là XrSpatialBufferEXT . Cấu trúc danh sách tương ứng là XrSpatialComponentPersistenceScopeDataListANDROIDX1 . (Do tiện ích XR_ANDROIDX1_spatial_anchor_cloud_sharing thêm)
Chức năng và cách thiết lập không gian
Khả năng không gian xác định khả năng của thời gian chạy trong việc khám phá các thực thể có một tập hợp thành phần được đảm bảo. Ứng dụng bật các thành phần của một chức năng không gian khi tạo XrSpatialContextEXT và thời gian chạy phải chỉ cung cấp các thành phần được bật trên các thực thể được phát hiện. Ví dụ: Nếu thời gian chạy báo cáo rằng một trong các thành phần cho một chức năng nhất định là "nhãn ngữ nghĩa", thì tức là ứng dụng có thể bật nhãn ngữ nghĩa thông qua cấu hình cho chức năng đó và thời gian chạy phải chỉ cung cấp thành phần nhãn ngữ nghĩa nếu thành phần đó được định cấu hình.
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;
Bảng liệt kê XrSpatialCapabilityEXT xác định các loại chức năng mà thời gian chạy có thể hỗ trợ.
Các giá trị liệt kê có các giá trị sau:
Nội dung mô tả enum
XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT
Theo dõi máy bay (Do tiện ích XR_EXT_spatial_plane_tracking thêm vào)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT
Khả năng phát hiện và theo dõi mã QR. (Do tiện ích XR_EXT_spatial_marker_tracking thêm)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT
Khả năng phát hiện và theo dõi mã Micro QR. (Do tiện ích XR_EXT_spatial_marker_tracking thêm)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT
Khả năng phát hiện và theo dõi Điểm đánh dấu Aruco. (Do tiện ích XR_EXT_spatial_marker_tracking thêm)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT
Khả năng phát hiện và theo dõi AprilTag. (Do tiện ích XR_EXT_spatial_marker_tracking thêm)
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT
Theo dõi đối tượng (Do tiện ích XR_EXT_spatial_object_tracking thêm vào)
XR_SPATIAL_CAPABILITY_ANCHOR_EXT
Khả năng tạo neo không gian (Do tiện ích XR_EXT_spatial_anchor thêm vào)
XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT
Khả năng phát hiện và theo dõi hình ảnh tham khảo phẳng. (Do tiện ích XR_EXT_spatial_image_tracking thêm)
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT
Khả năng theo dõi lưới của một môi trường. (Do tiện ích XR_EXT_spatial_mesh_tracking thêm)
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID
Theo dõi đối tượng (Do tiện ích XR_ANDROID_spatial_object_tracking thêm vào)
XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID
Raycast dựa trên vùng đệm độ sâu (Do tiện ích XR_ANDROID_spatial_discovery_raycast thêm vào)
XR_SPATIAL_CAPABILITY_ROOM_TRACKING_ANDROIDSYS
Khả năng theo dõi phòng (Do tiện ích XR_ANDROIDSYS_spatial_room_tracking thêm vào)
XR_SPATIAL_CAPABILITY_ROOM_BOUNDARY_TRACKING_ANDROIDSYS
Khả năng theo dõi ranh giới phòng (Do tiện ích XR_ANDROIDSYS_spatial_room_tracking thêm vào)
XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID
Theo dõi chú thích (Do tiện ích XR_ANDROID_spatial_annotation_tracking thêm)
XR_SPATIAL_CAPABILITY_STREETSCAPE_GEOMETRY_ANDROIDX2
Hình dạng cảnh quan đường phố (Do tiện ích XR_ANDROIDX2_geospatial_streetscape thêm vào)
Hàm xrEnumerateSpatialCapabilitiesEXT được định nghĩa như sau:
XrResult xrEnumerateSpatialCapabilitiesEXT(
XrInstance instance,
XrSystemId systemId,
uint32_t capabilityCapacityInput,
uint32_t* capabilityCountOutput,
XrSpatialCapabilityEXT* capabilities);
Nội dung mô tả về tham số
instancelà một tay điều khiển cho XrInstance .systemIdlàXrSystemIdcó các chức năng không gian sẽ được liệt kê.capabilityCapacityInputlà dung lượng của mảngcapabilitieshoặc 0 để cho biết yêu cầu truy xuất dung lượng cần thiết.capabilityCountOutputlà số lượng chức năng hoặc dung lượng cần thiết trong trường hợpcapabilityCapacityInputkhông đủ.capabilitieslà một mảng XrSpatialCapabilityEXT . Giá trị này có thể làNULLnếucapabilityCapacityInputlà 0.- Hãy xem phần Tham số dung lượng bộ nhớ đệm để biết nội dung mô tả chi tiết về cách truy xuất kích thước
capabilitiescần thiết.
Ứng dụng có thể liệt kê danh sách các chức năng không gian mà một XrSystemId nhất định hỗ trợ bằng cách sử dụng xrEnumerateSpatialCapabilitiesEXT .
Thời gian chạy không được liệt kê các chức năng không gian có tiện ích không được bật cho instance .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_entitytrước khi gọi xrEnumerateSpatialCapabilitiesEXT -
instancephải là một tên người dùng XrInstance hợp lệ -
capabilityCountOutputphải là con trỏ đến giá trịuint32_t - Nếu
capabilityCapacityInputkhông phải là0, thìcapabilitiesphải là con trỏ đến một mảng gồm các giá trịcapabilityCapacityInputXrSpatialCapabilityEXT
Mã trả về
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
Hàm xrEnumerateSpatialCapabilityComponentTypesEXT được định nghĩa như sau:
XrResult xrEnumerateSpatialCapabilityComponentTypesEXT(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
XrSpatialCapabilityComponentTypesEXT* capabilityComponents);
Nội dung mô tả về tham số
instancelà một tay điều khiển cho XrInstance .systemIdlàXrSystemIdcó các thành phần chức năng không gian sẽ được liệt kê.capabilitylà XrSpatialCapabilityEXT mà các thành phần sẽ được liệt kê.capabilityComponentslà con trỏ đến XrSpatialCapabilityComponentTypesEXT , đây là cấu trúc đầu vào/đầu ra trong đó mảng do ứng dụng phân bổ được điền sẵn.
Hàm này liệt kê các loại thành phần mà chức năng đã cho cung cấp trên các thực thể của nó trong hệ thống như đã định cấu hình.
Ứng dụng có thể sử dụng các loại thành phần được liệt kê trong XrSpatialCapabilityComponentTypesEXT :: componentTypes để hiểu toàn bộ tập hợp thành phần mà systemId hỗ trợ cho capability và có thể sử dụng danh sách này để xác định cấu hình hợp lệ cho capability khi tạo XrSpatialContextEXT cho cấu hình đó.
Thời gian chạy phải trả về XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT nếu capability không được liệt kê bằng xrEnumerateSpatialCapabilitiesEXT .
Môi trường thời gian chạy không được liệt kê các loại thành phần không gian có tiện ích không được bật cho instance .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_EXT_spatial_entityphải được bật trước khi gọi xrEnumerateSpatialCapabilityComponentTypesEXT -
instancephải là một tên người dùng XrInstance hợp lệ -
capabilityphải là một giá trị XrSpatialCapabilityEXT hợp lệ -
capabilityComponentsphải là con trỏ đến cấu trúc XrSpatialCapabilityComponentTypesEXT
Mã trả về
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
Cấu trúc XrSpatialCapabilityComponentTypesEXT được định nghĩa như sau:
typedef struct XrSpatialCapabilityComponentTypesEXT {
XrStructureType type;
void* next;
uint32_t componentTypeCapacityInput;
uint32_t componentTypeCountOutput;
XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialCapabilityComponentTypesEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.componentTypeCapacityInputlà dung lượng của mảng hoặc 0 để cho biết yêu cầu truy xuất dung lượng cần thiết.componentTypeCountOutputlà số lượng loại thành phần hoặc dung lượng cần thiết trong trường hợpcomponentTypeCapacityInputkhông đủ.componentTypeslà một mảng XrSpatialComponentTypeEXT . Giá trị này có thể làNULLnếucomponentTypeCapacityInputlà 0.- Hãy xem phần Tham số dung lượng bộ nhớ đệm để biết nội dung mô tả chi tiết về cách truy xuất kích thước
componentTypescần thiết.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_entitytrước khi sử dụng XrSpatialCapabilityComponentTypesEXT -
typephải làXR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc - Nếu
componentTypeCapacityInputkhông phải là0, thìcomponentTypesphải là một con trỏ đến một mảng gồm các giá trịcomponentTypeCapacityInputXrSpatialComponentTypeEXT
Tính năng về khả năng không gian
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;
Một số chức năng có các tham số được hiển thị cho ứng dụng để định cấu hình cách dữ liệu thành phần được tính toán theo thời gian chạy. Các phương diện tham số hoá/khả năng định cấu hình này được gọi là tính năng về chức năng. Ví dụ: đối với chức năng theo dõi hình ảnh, thời gian chạy có thể hỗ trợ một tính năng để ứng dụng chỉ định xem hình ảnh được theo dõi có cố định hay không.
Việc cung cấp thông tin này cho thời gian chạy thông qua cấu trúc cấu hình không được thay đổi tập hợp các loại thành phần có trên các thực thể liên kết, ví dụ: trên hình ảnh được theo dõi. Tuy nhiên, thời gian chạy có thể tối ưu hoá, chẳng hạn như khả năng theo dõi của tính năng theo dõi hình ảnh và mang lại trải nghiệm tốt hơn cho ứng dụng.
Các tính năng như vậy được biểu thị bằng XrSpatialCapabilityFeatureEXT và ứng dụng liệt kê các tính năng đó bằng cách sử dụng xrEnumerateSpatialCapabilityFeaturesEXT .
Mỗi tính năng của chức năng đều có một cấu trúc cấu hình tương ứng để bật tính năng đó. Các cấu trúc cấu hình như vậy phải được liên kết với XrSpatialCapabilityConfigurationBaseHeaderEXT :: next của chức năng tương ứng.
Các giá trị liệt kê có các giá trị sau:
Nội dung mô tả enum
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT
Tính năng cho phép ứng dụng chỉ định kích thước cho điểm đánh dấu. Cấu trúc cấu hình tương ứng là XrSpatialMarkerSizeEXT (Do tiện ích XR_EXT_spatial_marker_tracking thêm vào)
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT
Tính năng cho phép ứng dụng chỉ định xem điểm đánh dấu có tĩnh hay không. Cấu trúc cấu hình tương ứng là XrSpatialMarkerStaticOptimizationEXT (Do tiện ích XR_EXT_spatial_marker_tracking thêm vào)
XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT
Tính năng không gian cho phép các ứng dụng chỉ định một nhóm nhỏ nhãn từ XrSpatialObjectSemanticLabelEXT để thời gian chạy theo dõi. Cấu trúc cấu hình tương ứng là XrSpatialFeatureObjectSemanticLabelSubsetEXT . (Do tiện ích XR_EXT_spatial_object_tracking thêm)
XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID
Thời gian chạy hỗ trợ bộ lọc XrSpatialBoundsSpherefANDROID cho XrSpatialDiscoverySnapshotCreateInfoEXT ; Điều này không yêu cầu đưa bất kỳ cấu trúc cấu hình nào vào trong quá trình tạo bối cảnh không gian. (Do tiện ích XR_ANDROID_spatial_discovery_bounds thêm)
XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID
Môi trường thời gian chạy hỗ trợ bộ lọc XrSpatialBoundsBoxfANDROID cho XrSpatialDiscoverySnapshotCreateInfoEXT ; Bạn không cần thêm cấu trúc cấu hình nào trong quá trình tạo bối cảnh không gian. (Do tiện ích XR_ANDROID_spatial_discovery_bounds thêm)
XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID
Môi trường thời gian chạy hỗ trợ bộ lọc XrSpatialBoundsFrustumfANDROID cho XrSpatialDiscoverySnapshotCreateInfoEXT ; Bạn không cần phải thêm cấu trúc cấu hình nào trong quá trình tạo bối cảnh không gian. (Do tiện ích XR_ANDROID_spatial_discovery_bounds thêm)
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXT
Môi trường thời gian chạy hỗ trợ tự động suy luận kích thước thực tế của hình ảnh được phát hiện và theo dõi. Cấu trúc cấu hình tương ứng là XrSpatialImageSizeEXT (Được thêm bằng tiện ích XR_EXT_spatial_image_tracking)
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_STATIC_IMAGES_EXT
Thời gian chạy hỗ trợ XrSpatialImageStaticOptimizationEXT . Cấu trúc cấu hình tương ứng là XrSpatialImageStaticOptimizationEXT . (Do tiện ích XR_EXT_spatial_image_tracking thêm)
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_FIXED_SIZE_IMAGES_EXT
Môi trường thời gian chạy hỗ trợ XrSpatialImageSizeEXT . Cấu trúc cấu hình tương ứng là XrSpatialImageSizeEXT (Do tiện ích XR_EXT_spatial_image_tracking thêm vào)
XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT
Tính năng theo dõi lưới kín nước của môi trường. Cấu trúc cấu hình tương ứng là XrSpatialFeatureTrackWatertightMeshEXT . (Do tiện ích XR_EXT_spatial_mesh_tracking thêm)
Hàm xrEnumerateSpatialCapabilityFeaturesEXT được định nghĩa như sau:
XrResult xrEnumerateSpatialCapabilityFeaturesEXT(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
uint32_t capabilityFeatureCapacityInput,
uint32_t* capabilityFeatureCountOutput,
XrSpatialCapabilityFeatureEXT* capabilityFeatures);
Nội dung mô tả về tham số
instancelà một tay điều khiển cho XrInstance .systemIdlàXrSystemIdcó các tính năng về chức năng không gian sẽ được liệt kê.capabilitylà XrSpatialCapabilityEXT mà các tính năng sẽ được liệt kê.capabilityFeatureCapacityInputlà dung lượng của mảng hoặc 0 để cho biết yêu cầu truy xuất dung lượng cần thiết.capabilityFeatureCountOutputlà số lượng tính năng hoặc dung lượng cần thiết trong trường hợpcapabilityFeatureCapacityInputkhông đủ.capabilityFeatureslà một mảng XrSpatialCapabilityFeatureEXT . Giá trị này có thể làNULLnếucapabilityFeatureCapacityInputlà 0.- Hãy xem phần Tham số dung lượng bộ nhớ đệm để biết nội dung mô tả chi tiết về cách truy xuất kích thước
capabilityFeaturescần thiết.
Ứng dụng khám phá các tính năng mà một hệ thống nhất định hỗ trợ cho XrSpatialCapabilityEXT bằng cách sử dụng xrEnumerateSpatialCapabilityFeaturesEXT .
Đối với các chức năng có tính năng được hiển thị, ứng dụng sẽ chọn (các) tính năng để bật và cung cấp cấu trúc cấu hình tương ứng trong chuỗi tiếp theo của cấu trúc cấu hình chức năng trong XrSpatialContextCreateInfoEXT :: capabilityConfigs .
Nếu capability không phải là một chức năng được liệt kê bởi xrEnumerateSpatialCapabilitiesEXT , thì thời gian chạy phải trả về XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT .
Thời gian chạy không được liệt kê các tính năng về không gian mà tiện ích của chúng không được bật cho instance .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_EXT_spatial_entityphải được bật trước khi gọi xrEnumerateSpatialCapabilityFeaturesEXT -
instancephải là một tên người dùng XrInstance hợp lệ -
capabilityphải là một giá trị XrSpatialCapabilityEXT hợp lệ -
capabilityFeatureCountOutputphải là con trỏ đến giá trịuint32_t - Nếu
capabilityFeatureCapacityInputkhông phải là0, thìcapabilityFeaturesphải là con trỏ đến một mảng các giá trịcapabilityFeatureCapacityInputXrSpatialCapabilityFeatureEXT
Mã trả về
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
Bối cảnh không gian
Tạo bối cảnh không gian
XR_DEFINE_HANDLE(XrSpatialContextEXT)
Tay điều khiển XrSpatialContextEXT đại diện cho các tài nguyên để khám phá và cập nhật một số thực thể không gian trong môi trường của người dùng. Ứng dụng có thể sử dụng tên người dùng này để khám phá và cập nhật các thực thể không gian bằng các hàm khác trong tiện ích này.
Hàm xrCreateSpatialContextAsyncEXT được định nghĩa như sau:
XrResult xrCreateSpatialContextAsyncEXT(
XrSession session,
const XrSpatialContextCreateInfoEXT* createInfo,
XrFutureEXT* future);
Nội dung mô tả về tham số
sessionlà một XrSession, trong đó bối cảnh không gian sẽ hoạt động.createInfolà XrSpatialContextCreateInfoEXT dùng để chỉ định các tham số bối cảnh không gian.futurelà con trỏ đếnXrFutureEXT.
Ứng dụng có thể tạo một tay điều khiển XrSpatialContextEXT bằng cách:
- Cung cấp các cấu trúc bắt nguồn từ XrSpatialCapabilityConfigurationBaseHeaderEXT trong XrSpatialContextCreateInfoEXT ::
capabilityConfigsđể bật các chức năng và bật các thành phần cho chức năng đó. - Định cấu hình các chức năng bằng cấu trúc cấu hình tương ứng của XrSpatialCapabilityFeatureEXT .
Thời gian chạy phải trả về XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT nếu XrSpatialContextCreateInfoEXT ::capabilityConfigCount là 0. Một trình xử lý bối cảnh không gian cần có ít nhất một chức năng.
Thời gian chạy phải trả về XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT nếu bất kỳ chức năng nào trong mảng XrSpatialContextCreateInfoEXT :: capabilityConfigs không được liệt kê bằng xrEnumerateSpatialCapabilitiesEXT .
Thời gian chạy phải trả về XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT nếu bất kỳ XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponentCount nào trong XrSpatialContextCreateInfoEXT :: capabilityConfigs là 0. Cấu hình chức năng sẽ không hoàn chỉnh nếu không có danh sách các loại thành phần cần bật cho chức năng đó.
Thời gian chạy phải trả về XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT nếu bất kỳ loại thành phần nào được liệt kê trong XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents không được liệt kê cho XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability trong xrEnumerateSpatialCapabilityComponentTypesEXT .
Nếu bất kỳ cấu trúc nào trong chuỗi tiếp theo của XrSpatialContextCreateInfoEXT :: capabilityConfigs tương ứng với một XrSpatialCapabilityFeatureEXT không được liệt kê cho chức năng đó trong xrEnumerateSpatialCapabilityFeaturesEXT , thì thời gian chạy phải bỏ qua cấu trúc XrSpatialCapabilityFeatureEXT đó.
Thời gian chạy phải trả về XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT nếu XrSpatialContextCreateInfoEXT :: capabilityConfigs chứa nhiều cấu trúc có cùng XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability .
Để đảm bảo sử dụng tối ưu tài nguyên hệ thống, thời gian chạy có thể sử dụng các cấu hình được cung cấp trong mảng XrSpatialContextCreateInfoEXT để chuẩn bị cho các yêu cầu về không gian sắp tới. Ví dụ: một môi trường thời gian chạy hỗ trợ tính năng theo dõi mặt phẳng có thể chỉ bắt đầu quy trình theo dõi mặt phẳng nếu ứng dụng tạo một tay điều khiển bối cảnh không gian chứa tính năng theo dõi mặt phẳng. Nếu các chức năng đã định cấu hình có thời gian khởi động lâu, thì lệnh gọi đến xrCreateSpatialDiscoverySnapshotAsyncEXT có thể dẫn đến ảnh chụp nhanh trống. Ứng dụng có thể đợi XrEventDataSpatialDiscoveryRecommendedEXT trước khi sử dụng xrCreateSpatialDiscoverySnapshotAsyncEXT để đảm bảo rằng các dịch vụ theo dõi cơ bản đã khởi động.
Nếu một thời gian chạy thực thi hệ thống quyền để kiểm soát quyền truy cập của ứng dụng vào các chức năng không gian đang được định cấu hình cho XrSpatialContextEXT , thì thời gian chạy phải trả về XR_ERROR_PERMISSION_INSUFFICIENT nếu các quyền đó chưa được cấp cho ứng dụng này.
Hàm này bắt đầu một thao tác không đồng bộ và tạo một XrFutureEXT tương ứng, có thể sử dụng với xrPollFutureEXT và các hàm liên quan. Giá trị trả về của hàm này chỉ cho biết liệu các tham số có được chấp nhận để lên lịch cho hoạt động không đồng bộ hay không. Hàm hoàn thành tương ứng là xrCreateSpatialContextCompleteEXT , có thể sử dụng khi một tương lai từ hàm này ở trạng thái READY, với kết quả được hàm đó điền vào cấu trúc hoàn thành XrCreateSpatialContextCompletionEXT .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_EXT_spatial_entityphải được bật trước khi gọi xrCreateSpatialContextAsyncEXT -
sessionphải là một tên người dùng XrSession hợp lệ -
createInfophải là một con trỏ đến cấu trúc XrSpatialContextCreateInfoEXT hợp lệ -
futurephải là một con trỏ đến giá trịXrFutureEXT
Mã trả về
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXTXR_ERROR_VALIDATION_FAILUREXR_ERROR_TIME_INVALID(nếuXR_ANDROID_spatial_annotation_trackingđược bật)
Cấu trúc XrSpatialContextCreateInfoEXT được định nghĩa như sau:
typedef struct XrSpatialContextCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t capabilityConfigCount;
const XrSpatialCapabilityConfigurationBaseHeaderEXT* const* capabilityConfigs;
} XrSpatialContextCreateInfoEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.capabilityConfigCountlà mộtuint32_tmô tả số lượng phần tử trong mảngcapabilityConfigs.capabilityConfigslà một con trỏ đến một mảng con trỏ XrSpatialCapabilityConfigurationBaseHeaderEXT.
Cấu trúc XrSpatialContextCreateInfoEXT mô tả thông tin để tạo một tay điều khiển XrSpatialContextEXT.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_entitytrước khi sử dụng XrSpatialContextCreateInfoEXT -
typephải làXR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc . Xem thêm: XrSpatialContextPersistenceConfigEXT -
capabilityConfigsphải là một con trỏ đến một mảng gồmcapabilityConfigCountcấu trúc hợp lệ dựa trên XrSpatialCapabilityConfigurationBaseHeaderEXT. Xem thêm: XrSpatialCapabilityConfigurationAnchorEXT , XrSpatialCapabilityConfigurationAnnotationTrackingANDROID , XrSpatialCapabilityConfigurationAprilTagEXT , XrSpatialCapabilityConfigurationArucoMarkerEXT , XrSpatialCapabilityConfigurationDepthRaycastANDROID , XrSpatialCapabilityConfigurationImageTrackingEXT , XrSpatialCapabilityConfigurationMeshTrackingEXT , XrSpatialCapabilityConfigurationMicroQrCodeEXT , XrSpatialCapabilityConfigurationObjectTrackingANDROID , XrSpatialCapabilityConfigurationObjectTrackingEXT , XrSpatialCapabilityConfigurationPlaneTrackingEXT , XrSpatialCapabilityConfigurationQrCodeEXT , XrSpatialCapabilityConfigurationRoomBoundaryTrackingANDROIDSYS , XrSpatialCapabilityConfigurationRoomTrackingANDROIDSYS , XrSpatialCapabilityConfigurationStreetscapeGeometryANDROIDX2 - Tham số
capabilityConfigCountphải lớn hơn0
Cấu trúc XrSpatialCapabilityConfigurationBaseHeaderEXT được định nghĩa như sau:
typedef struct XrSpatialCapabilityConfigurationBaseHeaderEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationBaseHeaderEXT;
Cấu trúc này không được dùng trực tiếp trong API, nhưng các cấu trúc con của cấu trúc này có thể được dùng với XrSpatialContextCreateInfoEXT để định cấu hình các chức năng không gian.
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc.capabilitylà một XrSpatialCapabilityEXT .enabledComponentCountlà mộtuint32_tmô tả số lượng phần tử trong mảngenabledComponents.enabledComponentslà con trỏ đến một mảng XrSpatialComponentTypeEXT .
Thời gian chạy phải trả về XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT nếu capability không được liệt kê bằng xrEnumerateSpatialCapabilitiesEXT . Thời gian chạy phải trả về XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT nếu bất kỳ loại thành phần nào được liệt kê trong enabledComponents không được liệt kê cho capability trong xrEnumerateSpatialCapabilityComponentTypesEXT .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_EXT_spatial_entityphải được bật trước khi sử dụng XrSpatialCapabilityConfigurationBaseHeaderEXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc -
capabilityphải là một giá trị XrSpatialCapabilityEXT hợp lệ -
enabledComponentsphải là một con trỏ đến một mảng gồmenabledComponentCountgiá trị XrSpatialComponentTypeEXT hợp lệ - Tham số
enabledComponentCountphải lớn hơn0
Hàm xrCreateSpatialContextCompleteEXT được định nghĩa như sau:
XrResult xrCreateSpatialContextCompleteEXT(
XrSession session,
XrFutureEXT future,
XrCreateSpatialContextCompletionEXT* completion);
Nội dung mô tả về tham số
sessionlà XrSession đã được truyền trước đó đến xrCreateSpatialContextAsyncEXT ::session.futurelàXrFutureEXTnhận được từ xrCreateSpatialContextAsyncEXT .completionlà con trỏ đến XrCreateSpatialContextCompletionEXT .
xrCreateSpatialContextCompleteEXT hoàn tất thao tác không đồng bộ do xrCreateSpatialContextAsyncEXT bắt đầu. Thời gian chạy phải trả về XR_ERROR_FUTURE_PENDING_EXT nếu future không ở trạng thái sẵn sàng. Thời gian chạy phải trả về XR_ERROR_FUTURE_INVALID_EXT nếu future đã hoàn tất hoặc bị huỷ.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_EXT_spatial_entityphải được bật trước khi gọi xrCreateSpatialContextCompleteEXT -
sessionphải là một tên người dùng XrSession hợp lệ -
completionphải là con trỏ đến cấu trúc XrCreateSpatialContextCompletionEXT
Mã trả về
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_FUTURE_INVALID_EXTXR_ERROR_FUTURE_PENDING_EXTXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
Cấu trúc XrCreateSpatialContextCompletionEXT được định nghĩa như sau:
typedef struct XrCreateSpatialContextCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialContextEXT spatialContext;
} XrCreateSpatialContextCompletionEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc.futureResultlà XrResult của thao tác tạo bối cảnh không gian.spatialContextlà một XrSpatialContextEXT được tạo bằng cách sử dụng dữ liệu và cấu hình trong xrCreateSpatialContextAsyncEXT ::createInfo.
Mã trả về trong tương lai
Giá trị futureResult:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT
Nếu futureResult là mã thành công, thì spatialContext phải hợp lệ. Nếu spatialContext hợp lệ, thì giá trị này chỉ hợp lệ trong vòng đời của xrCreateSpatialContextAsyncEXT :: session hoặc cho đến khi ứng dụng huỷ spatialContext bằng xrDestroySpatialContextEXT , tuỳ theo điều kiện nào xảy ra trước.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_entitytrước khi sử dụng XrCreateSpatialContextCompletionEXT -
typephải làXR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc -
futureResultphải là một giá trị XrResult hợp lệ - Nếu
spatialContextkhông phải là XR_NULL_HANDLE , thìspatialContextphải là một tay điều khiển XrSpatialContextEXT hợp lệ
Huỷ bối cảnh không gian
Hàm xrDestroySpatialContextEXT được định nghĩa như sau:
XrResult xrDestroySpatialContextEXT(
XrSpatialContextEXT spatialContext);
Nội dung mô tả về tham số
spatialContextlà một XrSpatialContextEXT được tạo trước đó bằng xrCreateSpatialContextAsyncEXT .
Ứng dụng có thể gọi hàm xrDestroySpatialContextEXT để giải phóng tay điều khiển spatialContext và các tài nguyên cơ bản khi hoàn tất các nhiệm vụ khám phá và cập nhật thực thể không gian. Nếu không có XrSpatialContextEXT hợp lệ nào khác được tạo bằng cùng một chức năng không gian như spatialContext , thì lệnh gọi này sẽ đóng vai trò là đề xuất cho thời gian chạy để tắt các dịch vụ theo dõi cần thiết cho những chức năng đó nhằm tiết kiệm tài nguyên hệ thống.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_EXT_spatial_entityphải được bật trước khi gọi xrDestroySpatialContextEXT -
spatialContextphải là một tay điều khiển XrSpatialContextEXT hợp lệ
Độ an toàn cho chuỗi
- Quyền truy cập vào
spatialContextvà mọi tay điều khiển con phải được đồng bộ hoá bên ngoài
Mã trả về
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Biểu diễn thực thể không gian
Mã nhận dạng thực thể không gian
XR_DEFINE_ATOM(XrSpatialEntityIdEXT)
XrSpatialEntityIdEXT được dùng để biểu thị mọi loại thực thể mà thời gian chạy phát hiện được trong môi trường không gian của người dùng. XrSpatialEntityIdEXT hợp lệ cho XrSpatialContextEXT mà nó được phát hiện và thời gian chạy không được sử dụng lại cùng một XrSpatialEntityIdEXT cho các thực thể khác nhau trong cùng một XrSpatialContextEXT . Ngoài ra, thời gian chạy không được sử dụng lại cùng một XrSpatialEntityIdEXT trên nhiều XrSpatialContextEXT trong cùng một XrSession, bất kể giá trị đó đại diện cho cùng một thực thể hay các thực thể khác nhau.
#define XR_NULL_SPATIAL_ENTITY_ID_EXT 0
XR_NULL_SPATIAL_ENTITY_ID_EXT là một giá trị dành riêng đại diện cho một XrSpatialEntityIdEXT không hợp lệ. Giá trị này có thể được truyền đến và trả về từ các hàm API chỉ khi được cho phép cụ thể.
Ô điều khiển thực thể không gian
XR_DEFINE_HANDLE(XrSpatialEntityEXT)
Tay điều khiển XrSpatialEntityEXT đại diện cho một thực thể không gian. Ứng dụng có thể tạo một tay điều khiển như vậy để thể hiện sự quan tâm của ứng dụng đối với một thực thể cụ thể trong thời gian chạy.
Tạo tay điều khiển thực thể không gian từ mã nhận dạng
Hàm xrCreateSpatialEntityFromIdEXT được định nghĩa như sau:
XrResult xrCreateSpatialEntityFromIdEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialEntityFromIdCreateInfoEXT* createInfo,
XrSpatialEntityEXT* spatialEntity);
Nội dung mô tả về tham số
spatialContextlà một XrSpatialContextEXT được tạo trước đó bằng xrCreateSpatialContextAsyncEXT .createInfolà con trỏ đến cấu trúc XrSpatialEntityFromIdCreateInfoEXT.spatialEntitylà tay điều khiển XrSpatialEntityEXT được trả về.
Ứng dụng có thể sử dụng xrCreateSpatialEntityFromIdEXT để tạo một tay điều khiển XrSpatialEntityEXT, đây là tệp đối chiếu đến một thực thể tồn tại trong môi trường của người dùng.
Thời gian chạy phải trả về XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT nếu XrSpatialEntityFromIdCreateInfoEXT :: entityId không phải là mã nhận dạng hợp lệ cho spatialContext .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_entitytrước khi gọi xrCreateSpatialEntityFromIdEXT -
spatialContextphải là một tay điều khiển XrSpatialContextEXT hợp lệ -
createInfophải là một con trỏ đến cấu trúc XrSpatialEntityFromIdCreateInfoEXT hợp lệ -
spatialEntityphải là một con trỏ đến một tay điều khiển XrSpatialEntityEXT
Mã trả về
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Cấu trúc XrSpatialEntityFromIdCreateInfoEXT được định nghĩa như sau:
typedef struct XrSpatialEntityFromIdCreateInfoEXT {
XrStructureType type;
const void* next;
XrSpatialEntityIdEXT entityId;
} XrSpatialEntityFromIdCreateInfoEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.entityIdlàXrSpatialEntityIdEXTcủa thực thể mà ứng dụng muốn tạo tên người dùng.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_entitytrước khi sử dụng XrSpatialEntityFromIdCreateInfoEXT -
typephải làXR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Huỷ tay điều khiển thực thể không gian
Hàm xrDestroySpatialEntityEXT được định nghĩa như sau:
XrResult xrDestroySpatialEntityEXT(
XrSpatialEntityEXT spatialEntity);
Nội dung mô tả về tham số
spatialEntitylà một handle cho XrSpatialEntityEXT được tạo trước đó bằng một hàm như xrCreateSpatialEntityFromIdEXT .
Ứng dụng có thể sử dụng xrDestroySpatialEntityEXT để giải phóng tay điều khiển spatialEntity khi không còn quan tâm đến thực thể được tham chiếu bởi tay điều khiển này.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_EXT_spatial_entityphải được bật trước khi gọi xrDestroySpatialEntityEXT -
spatialEntityphải là một tay điều khiển XrSpatialEntityEXT hợp lệ
Độ an toàn cho chuỗi
- Quyền truy cập vào
spatialEntityvà mọi tay điều khiển con phải được đồng bộ hoá bên ngoài
Mã trả về
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Ảnh chụp nhanh không gian
XR_DEFINE_HANDLE(XrSpatialSnapshotEXT)
Ứng dụng có thể tạo ảnh chụp nhanh không gian nhằm mục đích khám phá các thực thể không gian hoặc cập nhật thông tin về các thực thể không gian đã biết. Tay điều khiển XrSpatialSnapshotEXT đại diện cho dữ liệu không thể thay đổi của các thực thể không gian được phát hiện hoặc cập nhật và một nhóm nhỏ các thành phần của chúng do ứng dụng chọn. Ảnh chụp nhanh không gian thể hiện một khung hiển thị nhất quán về các thực thể và dữ liệu thành phần của chúng. Sau khi tạo ảnh chụp nhanh, dữ liệu của ảnh chụp nhanh phải không đổi trong khi ảnh chụp nhanh còn hợp lệ.
Ứng dụng có thể tạo số lượng ảnh chụp nhanh tuỳ ý nhưng phải lưu ý đến bộ nhớ được phân bổ cho mỗi ảnh chụp nhanh mới và phải huỷ ảnh chụp nhanh sau khi không cần đến nữa.
Tạo ảnh chụp nhanh về hoạt động khám phá
Hàm xrCreateSpatialDiscoverySnapshotAsyncEXT được định nghĩa như sau:
XrResult xrCreateSpatialDiscoverySnapshotAsyncEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialDiscoverySnapshotCreateInfoEXT* createInfo,
XrFutureEXT* future);
Nội dung mô tả về tham số
spatialContextlà một XrSpatialContextEXT được tạo trước đó bằng cách sử dụng xrCreateSpatialContextAsyncEXT .createInfolà con trỏ đến XrSpatialDiscoverySnapshotCreateInfoEXT .futurelà con trỏ đếnXrFutureEXT.
Ứng dụng có thể khám phá các thực thể không gian bằng cách tạo ảnh chụp nhanh khám phá bằng xrCreateSpatialDiscoverySnapshotAsyncEXT .
Hàm này bắt đầu một thao tác không đồng bộ và tạo một XrFutureEXT tương ứng, có thể sử dụng với xrPollFutureEXT và các hàm liên quan. Giá trị trả về của hàm này chỉ cho biết liệu các tham số có được chấp nhận để lên lịch cho hoạt động không đồng bộ hay không. Hàm hoàn thành tương ứng là xrCreateSpatialDiscoverySnapshotCompleteEXT , có thể sử dụng khi một tương lai từ hàm này ở trạng thái READY, với kết quả được hàm đó điền vào cấu trúc hoàn thành XrCreateSpatialDiscoverySnapshotCompletionEXT .
Ứng dụng có thể gửi nhiều yêu cầu tạo ảnh chụp nhanh khám phá mà không cần đợi yêu cầu trước đó hoàn tất. Thời gian chạy có thể xử lý và hoàn tất việc tạo bản tổng quan nhanh theo thứ tự bất kỳ. Thời gian chạy có thể trì hoãn việc hoàn tất quá trình tạo ảnh chụp nhanh khám phá để điều tiết ứng dụng nếu cần giảm mức sử dụng tài nguyên hệ thống do các chính sách về nguồn điện, nhiệt hoặc các chính sách khác của thiết bị.
Ứng dụng có thể sử dụng XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes để lọc danh sách thực thể và các thành phần có dữ liệu mà thời gian chạy phải đưa vào ảnh chụp nhanh. Nếu ứng dụng cung cấp danh sách hợp lệ các loại thành phần không gian trong XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes , thì thời gian chạy chỉ được đưa các thực thể không gian vào ảnh chụp nhanh có ít nhất một trong các thành phần được cung cấp trong XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes . Ngoài ra, thời gian chạy chỉ được bao gồm dữ liệu cho những thành phần trong ảnh chụp nhanh.
Thời gian chạy phải trả về XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT nếu bất kỳ XrSpatialComponentTypeEXT nào trong XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes không được bật cho các chức năng không gian được truyền đến XrSpatialContextCreateInfoEXT :: capabilityConfigs khi tạo spatialContext .
Nếu ứng dụng không cung cấp danh sách các loại thành phần không gian trong XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes , thì thời gian chạy phải bao gồm tất cả các thực thể không gian trong ảnh chụp nhanh có tập hợp thành phần được liệt kê trong XrSpatialCapabilityConfigurationBaseHeaderEXT ::enabledComponents cho các chức năng được định cấu hình cho spatialContext . Thời gian chạy phải bao gồm dữ liệu cho tất cả các thành phần được bật của những chức năng được định cấu hình cho spatialContext .
Nếu XrEventDataReferenceSpaceChangePending được đưa vào hàng đợi trước khi hoàn tất future và XrEventDataReferenceSpaceChangePending :: poseValid là false, thì thời gian chạy có thể tạo một XrSpatialSnapshotEXT không có thực thể nào trong đó hoặc đặt XrSpatialEntityTrackingStateEXT của các thực thể không còn có thể định vị được trong XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace tại XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time thành XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT hoặc XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT . Thời gian chạy không được đặt XrCreateSpatialContextCompletionEXT :: futureResult thành mã lỗi do XrEventDataReferenceSpaceChangePending .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_EXT_spatial_entityphải được bật trước khi gọi xrCreateSpatialDiscoverySnapshotAsyncEXT -
spatialContextphải là một tay điều khiển XrSpatialContextEXT hợp lệ -
createInfophải là một con trỏ đến cấu trúc XrSpatialDiscoverySnapshotCreateInfoEXT hợp lệ -
futurephải là một con trỏ đến giá trịXrFutureEXT
Mã trả về
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXTXR_ERROR_VALIDATION_FAILURE
Cấu trúc XrSpatialDiscoverySnapshotCreateInfoEXT được định nghĩa như sau:
typedef struct XrSpatialDiscoverySnapshotCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialDiscoverySnapshotCreateInfoEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.componentTypeCountlà mộtuint32_tmô tả số lượng phần tử trong mảngcomponentTypes.componentTypeslà một mảng XrSpatialComponentTypeEXT .
Cấu trúc XrSpatialDiscoverySnapshotCreateInfoEXT mô tả thông tin để tạo một tay điều khiển XrSpatialSnapshotEXT khi khám phá các thực thể không gian.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_entitytrước khi sử dụng XrSpatialDiscoverySnapshotCreateInfoEXT -
typephải làXR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc . Xem thêm: XrSpatialBoundsBoxfANDROID , XrSpatialBoundsFrustumfANDROID , XrSpatialBoundsSpherefANDROID , XrSpatialDiscoveryPersistenceContextFilterANDROIDX1 , XrSpatialDiscoveryPersistenceUuidFilterEXT , XrSpatialDiscoveryRoomBoundaryFilterANDROIDSYS , XrSpatialDiscoveryUniqueEntitiesFilterANDROID , XrSpatialFilterTrackingStateEXT , XrSpatialRaycastInfoANDROID - Nếu
componentTypeCountkhông phải là0, thìcomponentTypesphải là con trỏ đến một mảng gồm các giá trịcomponentTypeCounthợp lệ của XrSpatialComponentTypeEXT
Hàm xrCreateSpatialDiscoverySnapshotCompleteEXT được định nghĩa như sau:
XrResult xrCreateSpatialDiscoverySnapshotCompleteEXT(
XrSpatialContextEXT spatialContext,
const XrCreateSpatialDiscoverySnapshotCompletionInfoEXT* createSnapshotCompletionInfo,
XrCreateSpatialDiscoverySnapshotCompletionEXT* completion);
Nội dung mô tả về tham số
spatialContextlà XrSpatialContextEXT đã được truyền trước đó đến xrCreateSpatialDiscoverySnapshotAsyncEXT ::spatialContext.createSnapshotCompletionInfolà con trỏ đến XrCreateSpatialDiscoverySnapshotCompletionInfoEXT, cung cấp thông tin về việc hoàn tất yêu cầu tạo ảnh chụp nhanh khám phá.completionlà con trỏ đến XrCreateSpatialDiscoverySnapshotCompletionEXT .
xrCreateSpatialDiscoverySnapshotCompleteEXT hoàn tất thao tác không đồng bộ do xrCreateSpatialDiscoverySnapshotAsyncEXT bắt đầu. Thời gian chạy phải trả về XR_ERROR_FUTURE_PENDING_EXT nếu XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future không ở trạng thái sẵn sàng. Thời gian chạy phải trả về XR_ERROR_FUTURE_INVALID_EXT nếu XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future đã hoàn tất hoặc bị huỷ.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Phải bật tiện ích
XR_EXT_spatial_entitytrước khi gọi xrCreateSpatialDiscoverySnapshotCompleteEXT -
spatialContextphải là một tay điều khiển XrSpatialContextEXT hợp lệ -
createSnapshotCompletionInfophải là một con trỏ đến cấu trúc XrCreateSpatialDiscoverySnapshotCompletionInfoEXT hợp lệ -
completionphải là con trỏ đến cấu trúc XrCreateSpatialDiscoverySnapshotCompletionEXT
Mã trả về
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_FUTURE_INVALID_EXTXR_ERROR_FUTURE_PENDING_EXTXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
Cấu trúc XrCreateSpatialDiscoverySnapshotCompletionInfoEXT được định nghĩa như sau:
typedef struct XrCreateSpatialDiscoverySnapshotCompletionInfoEXT {
XrStructureType type;
const void* next;
XrSpace baseSpace;
XrTime time;
XrFutureEXT future;
} XrCreateSpatialDiscoverySnapshotCompletionInfoEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc.baseSpacelà XrSpace chứa tất cả vị trí của XrSpatialSnapshotEXT được phát hiện.timelàXrTimenơi tất cả vị trí của XrSpatialSnapshotEXT khám phá sẽ được đặt.futurelàXrFutureEXTnhận được từ xrCreateSpatialDiscoverySnapshotAsyncEXT
Vị trí trong nhiều dữ liệu thành phần có trong ảnh chụp nhanh đã tạo sẽ được biểu thị trong baseSpace , nằm tại time .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_entitytrước khi sử dụng XrCreateSpatialDiscoverySnapshotCompletionInfoEXT -
typephải làXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc -
baseSpacephải là một tên người dùng XrSpace hợp lệ
Cấu trúc XrCreateSpatialDiscoverySnapshotCompletionEXT được định nghĩa như sau:
typedef struct XrCreateSpatialDiscoverySnapshotCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialSnapshotEXT snapshot;
} XrCreateSpatialDiscoverySnapshotCompletionEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc.futureResultlà XrResult của thao tác tạo ảnh chụp nhanh khám phá không gian.snapshotlà một XrSpatialSnapshotEXT có thể dùng để truy vấn dữ liệu thành phần của các thực thể không gian được phát hiện.
Mã trả về trong tương lai
Giá trị futureResult:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHED
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_entitytrước khi sử dụng XrCreateSpatialDiscoverySnapshotCompletionEXT -
typephải làXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc -
futureResultphải là một giá trị XrResult hợp lệ - Nếu
snapshotkhông phải là XR_NULL_HANDLE , thìsnapshotphải là một tay điều khiển XrSpatialSnapshotEXT hợp lệ
Sự kiện đề xuất khám phá
Cấu trúc XrEventDataSpatialDiscoveryRecommendedEXT được định nghĩa như sau:
typedef struct XrEventDataSpatialDiscoveryRecommendedEXT {
XrStructureType type;
const void* next;
XrSpatialContextEXT spatialContext;
} XrEventDataSpatialDiscoveryRecommendedEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc.spatialContextlà XrSpatialContextEXT mà thời gian chạy đề xuất khám phá.
Ứng dụng có thể truy xuất sự kiện này bằng cách sử dụng xrPollEvent . Ứng dụng có thể tránh thực hiện quá nhiều lệnh gọi đến xrCreateSpatialDiscoverySnapshotAsyncEXT để khám phá các thực thể không gian bằng cách chờ sự kiện này. Nếu ứng dụng tạo nhiều ảnh chụp nhanh khám phá có cùng XrSpatialDiscoverySnapshotCreateInfoEXT giữa hai sự kiện XrEventDataSpatialDiscoveryRecommendedEXT, thì ảnh chụp nhanh thu được có thể chứa cùng một thực thể, do đó, việc tạo ảnh chụp nhanh và truy vấn dữ liệu sẽ gây lãng phí.
Việc chờ sự kiện này tạo ảnh chụp nhanh mới về hoạt động khám phá sẽ đảm bảo ứng dụng không làm quá tải hệ thống bằng các yêu cầu khám phá mà thời gian chạy có thể không trả về bất kỳ dữ liệu mới nào, đồng thời giúp tránh nguy cơ lạm dụng tài nguyên hệ thống và bị điều tiết do chính sách về nguồn điện hoặc nhiệt của thiết bị. Điều này cũng giúp tạo ra sự tương đồng giữa các thời gian chạy đang khám phá các thực thể không gian một cách nhanh chóng bằng tính năng theo dõi trực tiếp và các thời gian chạy đang cung cấp các thực thể không gian từ trạng thái đã ghi trước đó (trong đó thời gian chạy có thể chỉ đưa sự kiện đề xuất khám phá vào hàng đợi một lần cho mỗi XrSpatialContextEXT).
Thời gian chạy không được đưa sự kiện này vào hàng đợi để thông báo cho ứng dụng về các thay đổi hoặc điều chỉnh đối với dữ liệu thành phần của các thực thể không gian hiện có. Ứng dụng có thể sử dụng xrCreateSpatialUpdateSnapshotEXT để theo dõi thông tin cập nhật dữ liệu thành phần cho các thực thể không gian mà ứng dụng quan tâm.
Thời gian chạy có thể đưa một sự kiện đề xuất khám phá vào hàng đợi mà không cần đợi ứng dụng gọi xrCreateSpatialDiscoverySnapshotAsyncEXT trước. Ví dụ: thời gian chạy có thể dựa trên quyết định đưa sự kiện đề xuất khám phá vào hàng đợi dựa trên cấu hình của XrSpatialContextEXT, hiểu biết của chính thời gian chạy về môi trường xung quanh người dùng (khám phá các thực thể mới hoặc mất các thực thể hiện có) hoặc để gợi ý nhịp độ yêu cầu khám phá thích hợp cho ứng dụng để không làm quá tải tài nguyên hệ thống. Thời gian chạy có thể chọn không bao giờ đưa sự kiện này vào hàng đợi cho XrSpatialContextEXT nếu không tìm thấy thực thể nào trong môi trường của người dùng trong suốt thời gian hoạt động của XrSpatialContextEXT đó.
Thời gian chạy không được đưa sự kiện này vào hàng đợi cho một spatialContext nhất định cho đến khi ứng dụng hoàn tất quá trình tạo bằng cách sử dụng xrCreateSpatialContextCompleteEXT .
Sau khi ứng dụng gọi xrDestroySpatialContextEXT, thời gian chạy không được đưa thêm bất kỳ sự kiện đề xuất khám phá nào vào hàng đợi cho bối cảnh không gian đó, cũng như không được trả về bất kỳ sự kiện nào như vậy cho bối cảnh đó từ xrPollEvent .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_entitytrước khi sử dụng XrEventDataSpatialDiscoveryRecommendedEXT -
typephải làXR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Dữ liệu thành phần truy vấn
Hàm xrQuerySpatialComponentDataEXT được định nghĩa như sau:
XrResult xrQuerySpatialComponentDataEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialComponentDataQueryConditionEXT* queryCondition,
XrSpatialComponentDataQueryResultEXT* queryResult);
Nội dung mô tả về tham số
snapshotlà một XrSpatialSnapshotEXT do xrCreateSpatialDiscoverySnapshotCompleteEXT hoặc xrCreateSpatialUpdateSnapshotEXT cung cấp trước đó.queryConditionlà một con trỏ tới cấu trúc XrSpatialComponentDataQueryConditionEXT.queryResultlà một con trỏ tới cấu trúc XrSpatialComponentDataQueryResultEXT.
Ứng dụng có thể sử dụng xrQuerySpatialComponentDataEXT để truy vấn dữ liệu thành phần của các thực thể trong ảnh chụp nhanh bằng cách đính kèm cấu trúc danh sách vào XrSpatialComponentDataQueryResultEXT :: next tương ứng với mỗi XrSpatialComponentTypeEXT trong XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Nếu ứng dụng đính kèm một cấu trúc danh sách vào XrSpatialComponentDataQueryResultEXT :: next không tương ứng với bất kỳ thành phần nào được liệt kê trong XrSpatialComponentDataQueryConditionEXT :: componentTypes , thì thời gian chạy phải trả về XR_ERROR_VALIDATION_FAILURE .
Ứng dụng có thể chọn đính kèm các cấu trúc danh sách chỉ tương ứng với một nhóm nhỏ thành phần được liệt kê trong XrSpatialComponentDataQueryConditionEXT :: componentTypes . Ứng dụng có thể chọn bỏ qua hoàn toàn cấu trúc danh sách nếu chỉ muốn biết mã nhận dạng và trạng thái theo dõi của các thực thể không gian đáp ứng queryCondition . Thời gian chạy không được coi việc thiếu cấu trúc danh sách trong chuỗi XrSpatialComponentDataQueryResultEXT :: next là lỗi.
Nếu XrEventDataReferenceSpaceChangePending được đưa vào hàng đợi và XrEventDataReferenceSpaceChangePending :: changeTime đã trôi qua trong khi ứng dụng đang truy vấn dữ liệu thành phần từ XrSpatialSnapshotEXT , thì ứng dụng có thể sử dụng dữ liệu sự kiện để điều chỉnh tư thế cho phù hợp.
Thời gian chạy phải điền XrSpatialComponentDataQueryResultEXT :: entityIds chỉ với các thực thể có tất cả thành phần được chỉ định trong XrSpatialComponentDataQueryConditionEXT :: componentTypes . Nếu XrSpatialComponentDataQueryConditionEXT :: componentTypeCount là 0, thì thời gian chạy phải điền queryResult bằng tất cả các thực thể (và trạng thái theo dõi của chúng) có trong ảnh chụp nhanh. Nếu các điều kiện truy vấn bổ sung được thêm vào XrSpatialComponentDataQueryConditionEXT :: next , thì thời gian chạy phải coi các điều kiện đó là "AND" với khả năng cung cấp các loại thành phần, tức là thời gian chạy phải điền XrSpatialComponentDataQueryResultEXT ::entityIds chỉ với các thực thể đáp ứng tất cả các điều kiện được cung cấp. Thời gian chạy phải điền dữ liệu thành phần vào cấu trúc danh sách theo cùng thứ tự với các thực thể trong XrSpatialComponentDataQueryResultEXT :: entityIds, tức là dữ liệu thành phần tại một chỉ mục nhất định trong mảng cấu trúc danh sách phải tương ứng với thực thể tại cùng một chỉ mục.
Nếu trạng thái theo dõi của một thực thể không phải là XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT , thì thời gian chạy không được thay đổi dữ liệu tại chỉ mục tương ứng với thực thể đó trong mảng có trong cấu trúc danh sách đính kèm với XrSpatialComponentDataQueryResultEXT .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_entitytrước khi gọi xrQuerySpatialComponentDataEXT -
snapshotphải là một tên người dùng XrSpatialSnapshotEXT hợp lệ -
queryConditionphải là con trỏ đến cấu trúc XrSpatialComponentDataQueryConditionEXT hợp lệ -
queryResultphải là con trỏ đến cấu trúc XrSpatialComponentDataQueryResultEXT
Mã trả về
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_VALIDATION_FAILURE
Ví dụ: ứng dụng tạo một XrSpatialSnapshotEXT chứa 5 thực thể, trong đó:
- Thực thể 1 và 2 có các thành phần
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTvàXR_SPATIAL_COMPONENT_TYPE_PARENT_EXT - Thực thể 3 và 4 có các thành phần
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTvàXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT - Thực thể 5 có các thành phần
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTvàXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
1
1
2
2
3
3
4
4
5
5
Bounded2D
Bounded2D
Có
Có
Có
Có
Không
Không
Không
Không
Có
Có
Cha mẹ
Cha mẹ
Có
Có
Có
Có
Không
Không
Không
Không
Không
Không
Mesh3D
Mesh3D
Không
Không
Không
Không
Có
Có
Có
Có
Có
Có
Bounded3D
Bounded3D
Không
Không
Không
Không
Có
Có
Có
Có
Không
Không Văn bản không phải là SVG – không thể hiển thị
Hình 20. Ví dụ về ảnh chụp nhanh
xrQuerySpatialComponentDataEXT trên ảnh chụp nhanh ở trên có XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT được liệt kê trong điều kiện truy vấn sẽ dẫn đến việc thực thể số 1, số 2 và số 5 được trả về ứng dụng và ứng dụng có thể đính kèm một mảng XrSpatialBounded2DDataEXT dưới dạng một phần của cấu trúc XrSpatialComponentBounded2DListEXT vào chuỗi tiếp theo của XrSpatialComponentDataQueryResultEXT để lấy dữ liệu bounded2D.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
1
1
2
2
5
5
Bounded2D
Bounded2D
Dữ liệu cho entityId #1
Dữ liệu cho thực...
Dữ liệu cho entityId #2
Dữ liệu cho thực...
Dữ liệu cho entityId #5
Dữ liệu cho thực...
entityIds
entityIds
tiếp theo
tiếp theo
XrSpatialComponent DataQueryResultEXT
XrSpatialComponent Dat...
ranh giới
ranh giới
XrSpatialComponent Bounded2DListEXT
XrSpatialComponent Bou... Văn bản không phải là SVG – không thể hiển thị
Hình 21. Ví dụ về kết quả truy vấn
xrQuerySpatialComponentDataEXT trên ảnh chụp nhanh ở trên với các thành phần XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT và XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT được liệt kê trong điều kiện truy vấn sẽ dẫn đến việc thực thể số 3 và số 4 được trả về ứng dụng và ứng dụng có thể đính kèm các mảng XrBoxf và XrSpatialMeshDataEXT dưới dạng một phần của cấu trúc XrSpatialComponentBounded3DListEXT và XrSpatialComponentMesh3DListEXT tương ứng với chuỗi tiếp theo của XrSpatialComponentDataQueryResultEXT để lấy dữ liệu thành phần.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
3
3
4
4
Bounded3D
Bounded3D
Dữ liệu cho entityId #3
Dữ liệu cho thực...
Dữ liệu cho entityId #4
Dữ liệu cho thực...
Mesh3D
Mesh3D
Dữ liệu cho entityId #3
Dữ liệu cho thực...
Dữ liệu cho entityId #4
Dữ liệu cho thực...
entityIds
entityIds
tiếp theo
tiếp theo
XrSpatialComponent DataQueryResultEXT
XrSpatialComponent Da...
ranh giới
ranh giới
tiếp theo
tiếp theo
XrSpatialComponent Bounded3DListEXT
XrSpatialComponent Bo...
XrSpatialComponent Mesh3DListEXT
XrSpatialComponent Me...
lưới
meshes Văn bản không phải là SVG – không thể hiển thị
Hình 22. Ví dụ về kết quả truy vấn
Cấu trúc XrSpatialComponentDataQueryConditionEXT được định nghĩa như sau:
typedef struct XrSpatialComponentDataQueryConditionEXT {
XrStructureType type;
const void* next;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialComponentDataQueryConditionEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc.componentTypeCountlà mộtuint32_tmô tả số lượng phần tử trong mảngcomponentTypes.componentTypeslà một mảng XrSpatialComponentTypeEXT để lấy dữ liệu từ ảnh chụp nhanh.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_EXT_spatial_entityphải được bật trước khi sử dụng XrSpatialComponentDataQueryConditionEXT -
typephải làXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc . Xem thêm: XrSpatialDiscoveryPersistenceUuidFilterEXT , XrSpatialFilterArchetypeEXT , XrSpatialFilterTrackingStateEXT - Nếu
componentTypeCountkhông phải là0, thìcomponentTypesphải là con trỏ đến một mảng gồm các giá trịcomponentTypeCounthợp lệ của XrSpatialComponentTypeEXT
Cấu trúc XrSpatialComponentDataQueryResultEXT được định nghĩa như sau:
typedef struct XrSpatialComponentDataQueryResultEXT {
XrStructureType type;
void* next;
uint32_t entityIdCapacityInput;
uint32_t entityIdCountOutput;
XrSpatialEntityIdEXT* entityIds;
uint32_t entityStateCapacityInput;
uint32_t entityStateCountOutput;
XrSpatialEntityTrackingStateEXT* entityStates;
} XrSpatialComponentDataQueryResultEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc.entityIdCapacityInputlà dung lượng của mảngentityIdshoặc 0 để cho biết yêu cầu truy xuất dung lượng cần thiết.entityIdCountOutputlà số lượngXrSpatialEntityIdEXTtrongentityIdshoặc dung lượng cần thiết trong trường hợpentityIdCapacityInputkhông đủ.entityIdslà một mảngXrSpatialEntityIdEXT. Giá trị này có thể làNULLnếuentityIdCapacityInputlà 0.entityStateCapacityInputlà dung lượng của mảngentityStateshoặc 0 để cho biết yêu cầu truy xuất dung lượng cần thiết.entityStateCountOutputlà số lượng XrSpatialEntityTrackingStateEXT trongentityStateshoặc dung lượng bắt buộc trong trường hợpentityStateCapacityInputkhông đủ. Phải luôn giống vớientityIdCountOutput.entityStateslà một mảng XrSpatialEntityTrackingStateEXT . Giá trị này có thể làNULLnếuentityStateCapacityInputlà 0.- Hãy xem phần Tham số dung lượng bộ nhớ đệm để biết nội dung mô tả chi tiết về cách truy xuất kích thước
entityIdscần thiết.
Ứng dụng có thể sử dụng entityIds với xrCreateSpatialEntityFromIdEXT để tạo tay điều khiển XrSpatialEntityEXT cho các thực thể mà ứng dụng muốn nhận thông tin cập nhật thường xuyên. Sau đó, ứng dụng có thể sử dụng các tay điều khiển XrSpatialEntityEXT này với xrCreateSpatialUpdateSnapshotEXT để tạo ảnh chụp nhanh cập nhật có dữ liệu mới nhất mà thời gian chạy biết được về các thành phần cho thực thể được cung cấp.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_EXT_spatial_entityphải được bật trước khi sử dụng XrSpatialComponentDataQueryResultEXT -
typephải làXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc . Xem thêm: XrSpatialComponentAnchorListEXT , XrSpatialComponentAnnotationQuadListANDROID , XrSpatialComponentBounded2DListEXT , XrSpatialComponentBounded3DListEXT , XrSpatialComponentConfidenceListANDROIDSYS , XrSpatialComponentImage2DListEXT , XrSpatialComponentKeyboardSemanticLabelListEXT , XrSpatialComponentMarkerListEXT , XrSpatialComponentMaterialTypeListANDROIDSYS , XrSpatialComponentMesh2DListEXT , XrSpatialComponentMesh3DListEXT , XrSpatialComponentMesh3DNormalsListEXT , XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT , XrSpatialComponentMesh3DVertexSemanticLabelsListEXT , XrSpatialComponentMouseSemanticLabelListEXT , XrSpatialComponentObjectSemanticLabelListANDROID , XrSpatialComponentObjectSemanticLabelListEXT , XrSpatialComponentOccupancyGridListANDROIDX1 , XrSpatialComponentParentListEXT , XrSpatialComponentPersistenceListEXT , XrSpatialComponentPersistenceScopesListANDROIDX1 , XrSpatialComponentPlaneAlignmentListEXT , XrSpatialComponentPlaneSemanticLabelListEXT , XrSpatialComponentPolygon2DListEXT , XrSpatialComponentRaycastResultListANDROID , XrSpatialComponentRoomEmptinessListANDROIDSYS , XrSpatialComponentRoomListANDROIDSYS , XrSpatialComponentStreetscapeGeometryMetadataListANDROIDX2 , XrSpatialComponentSubsumedByListANDROID - Nếu
entityIdCapacityInputkhông phải là0, thìentityIdsphải là con trỏ đến một mảng gồm các giá trịentityIdCapacityInputXrSpatialEntityIdEXT - Nếu
entityStateCapacityInputkhông phải là0, thìentityStatesphải là con trỏ đến một mảng giá trịentityStateCapacityInputXrSpatialEntityTrackingStateEXT
typedef enum XrSpatialEntityTrackingStateEXT {
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT = 1,
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT = 2,
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT = 3,
XR_SPATIAL_ENTITY_TRACKING_STATE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialEntityTrackingStateEXT;
XrSpatialEntityTrackingStateEXT liệt kê các trạng thái theo dõi thực thể không gian có thể xảy ra:
Các enum có ý nghĩa như sau:
Nội dung mô tả enum
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT
Thời gian chạy đã ngừng theo dõi thực thể này và sẽ không bao giờ tiếp tục theo dõi thực thể này.
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT
Môi trường thời gian chạy đã tạm dừng theo dõi thực thể này nhưng có thể tiếp tục theo dõi trong tương lai.
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT
Môi trường thời gian chạy hiện đang theo dõi thực thể này và dữ liệu thành phần của thực thể này là hợp lệ.
THEO DÕI
BỊ TẠM DỪNG
ĐÃ DỪNG
Hình 23. XrSpatialEntityTrackingStateEXT
- Thời gian chạy có thể thay đổi trạng thái của thực thể không gian từ
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTthànhXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTnếu tạm ngưng theo dõi thực thể không gian đó nhưng có khả năng tiếp tục theo dõi trong tương lai. Một số ví dụ về trường hợp thời gian chạy có thể thực hiện việc này bao gồm (nhưng không giới hạn ở) nếu ứng dụng mất tiêu điểm nhập; hoặc nếu thực thể không gian đã cho ở quá xa người dùng để có thể theo dõi chính xác; hoặc nếu có quá nhiều thực thể đang được theo dõi và thời gian chạy muốn giảm chi phí theo dõi. XrSpatialEntityTrackingStateEXT giúp ứng dụng tách biệt khỏi các chính sách theo dõi khác nhau của mỗi thời gian chạy. - Thời gian chạy có thể thay đổi trạng thái của một thực thể từ
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTthànhXR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXThoặcXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT. - Thời gian chạy phải thay đổi trạng thái của thực thể không gian từ
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXThoặcXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTthànhXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXTnếu thực thể không gian bị mất và quá trình theo dõi thực thể đó sẽ không bao giờ được khôi phục hoặc tiếp tục. Ví dụ: nếu thiết bị mất tính năng theo dõi, khởi động lại phiên theo dõi nhưng không thể định vị lại trong môi trường của thiết bị, thì thiết bị sẽ coi các thực thể được phát hiện trong phiên theo dõi này là thực thể mới. - Sau khi trạng thái theo dõi của một thực thể được đặt thành
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT, thời gian chạy không được thay đổi trạng thái đó thành bất kỳ trạng thái nào khác. - Khi truy vấn dữ liệu thành phần của một thực thể không gian bằng xrQuerySpatialComponentDataEXT , thời gian chạy phải đặt dữ liệu hợp lệ trong nội dung của vùng đệm do ứng dụng cung cấp trong chuỗi tiếp theo của XrSpatialComponentDataQueryResultEXT nếu trạng thái thực thể là
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT. Nếu trạng thái thực thể làXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXThoặcXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT, thì thời gian chạy không được thay đổi nội dung của vùng đệm.
Thành ngữ hai lệnh gọi cho dữ liệu thành phần
Cấu trúc XrSpatialBufferEXT được định nghĩa như sau:
typedef struct XrSpatialBufferEXT {
XrSpatialBufferIdEXT bufferId;
XrSpatialBufferTypeEXT bufferType;
} XrSpatialBufferEXT;
Nội dung mô tả về thành viên
bufferIdXrSpatialBufferIdEXTcủa dữ liệu vùng đệm.bufferTypelà XrSpatialBufferTypeEXT để cho biết loại dữ liệu trongbufferId. Ứng dụng có thể sử dụngbufferTypeđể xác định hàm cần dùng để truy xuất dữ liệu thực tế của vùng đệm.
Một số thành phần không gian có dữ liệu kích thước biến đổi, do đó cần sử dụng thành ngữ hai lệnh gọi để truy xuất dữ liệu. Trong những trường hợp như vậy, cấu trúc dữ liệu thành phần không gian sẽ cung cấp XrSpatialBufferEXT cho mỗi vùng đệm có kích thước biến cần thiết trong dữ liệu của thành phần đó.
Đối với cùng một bufferId , thời gian chạy phải cung cấp cùng một dữ liệu từ truy vấn dữ liệu thành phần này sang truy vấn dữ liệu thành phần khác, ngay cả giữa các ảnh chụp nhanh. bufferId khác nhau giữa các lệnh gọi truy vấn dữ liệu thành phần cho ứng dụng biết rằng dữ liệu của thành phần đó có thể đã thay đổi.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_EXT_spatial_entityphải được bật trước khi sử dụng XrSpatialBufferEXT -
bufferTypephải là một giá trị XrSpatialBufferTypeEXT hợp lệ
XR_DEFINE_ATOM(XrSpatialBufferIdEXT)
XrSpatialBufferIdEXT được dùng để biểu thị mọi loại dữ liệu có kích thước biến đổi cho một thành phần không gian.
Thời gian chạy phải giữ XrSpatialBufferIdEXT và dữ liệu của nó trong bộ nhớ trong ít nhất là vòng đời của XrSpatialSnapshotEXT chứa nó. Thời gian chạy có thể giữ XrSpatialBufferIdEXT và dữ liệu của nó trong bộ nhớ lâu hơn vòng đời của XrSpatialSnapshotEXT để trả về cùng một mã nhận dạng trong ảnh chụp nhanh do ứng dụng tạo sau này. Đối với cùng một XrSpatialBufferIdEXT , thời gian chạy phải luôn trả về cùng một dữ liệu thông qua hàm xrGetSpatialBuffer* thích hợp.
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;
Bảng liệt kê XrSpatialBufferTypeEXT xác định các loại dữ liệu khác nhau của vùng đệm được biểu thị XrSpatialBufferIdEXT .
Nội dung mô tả về giá trị liệt kê
XR_SPATIAL_BUFFER_TYPE_STRING_EXT. Bạn có thể truyềnXrSpatialBufferIdEXTđến xrGetSpatialBufferStringEXT để truy xuất vùng đệm chuỗi.XR_SPATIAL_BUFFER_TYPE_UINT8_EXT. Bạn có thể truyềnXrSpatialBufferIdEXTđến xrGetSpatialBufferUint8EXT để truy xuất vùng đệmuint8_t.XR_SPATIAL_BUFFER_TYPE_UINT16_EXT. Bạn có thể truyềnXrSpatialBufferIdEXTđến xrGetSpatialBufferUint16EXT để truy xuất vùng đệmuint16_t.XR_SPATIAL_BUFFER_TYPE_UINT32_EXT. Bạn có thể truyềnXrSpatialBufferIdEXTđến xrGetSpatialBufferUint32EXT để truy xuất vùng đệmuint32_t.XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT.XrSpatialBufferIdEXTcó thể được truyền đến xrGetSpatialBufferFloatEXT để truy xuất vùng đệmfloat.XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT.XrSpatialBufferIdEXTcó thể được truyền đến xrGetSpatialBufferVector2fEXT để truy xuất vùng đệm XrVector2f.XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT.XrSpatialBufferIdEXTcó thể được truyền đến xrGetSpatialBufferVector3fEXT để truy xuất vùng đệm XrVector3f.
Hàm xrGetSpatialBufferStringEXT được định nghĩa như sau:
XrResult xrGetSpatialBufferStringEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
char* buffer);
Nội dung mô tả về tham số
snapshotlà một tay điều khiển cho XrSpatialSnapshotEXT .infolưu giữ thông tin về vùng đệm cần truy vấn.bufferCapacityInputlà dung lượng của mảng hoặc 0 để cho biết yêu cầu truy xuất dung lượng cần thiết.bufferCountOutputlà số ký tự hoặc dung lượng cần thiết trong trường hợpbufferCapacityInputkhông đủ.bufferlà một mảngchar. Giá trị này có thể làNULLnếubufferCapacityInputlà 0.- Hãy xem phần Tham số dung lượng bộ nhớ đệm để biết nội dung mô tả chi tiết về cách truy xuất kích thước
buffercần thiết.
Ứng dụng có thể lấy dữ liệu cho XrSpatialBufferEXT do một thành phần cung cấp, trong đó XrSpatialBufferEXT :: bufferType là XR_SPATIAL_BUFFER_TYPE_STRING_EXT bằng cách sử dụng xrGetSpatialBufferStringEXT .
Thời gian chạy phải trả về XR_ERROR_VALIDATION_FAILURE nếu XrSpatialBufferTypeEXT cho XrSpatialBufferGetInfoEXT :: bufferId không phải là XR_SPATIAL_BUFFER_TYPE_STRING_EXT .
Thời gian chạy phải trả về XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT nếu XrSpatialBufferGetInfoEXT :: bufferId không thuộc về snapshot .
buffer do thời gian chạy điền phải là một chuỗi UTF-8 kết thúc bằng ký tự rỗng.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_EXT_spatial_entityphải được bật trước khi gọi xrGetSpatialBufferStringEXT -
snapshotphải là một tên người dùng XrSpatialSnapshotEXT hợp lệ -
infophải là con trỏ đến cấu trúc XrSpatialBufferGetInfoEXT hợp lệ -
bufferCountOutputphải là con trỏ đến giá trịuint32_t - Nếu
bufferCapacityInputkhông phải là0, thìbufferphải là một con trỏ đến một mảng gồmbufferCapacityInputgiá trị char
Mã trả về
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Hàm xrGetSpatialBufferUint8EXT được định nghĩa như sau:
XrResult xrGetSpatialBufferUint8EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint8_t* buffer);
Nội dung mô tả về tham số
snapshotlà một tay điều khiển cho XrSpatialSnapshotEXT .infolưu giữ thông tin về vùng đệm cần truy vấn.bufferCapacityInputlà dung lượng của mảng hoặc 0 để cho biết yêu cầu truy xuất dung lượng cần thiết.bufferCountOutputlà số phần tử trong mảngbufferhoặc dung lượng cần thiết trong trường hợpbufferCapacityInputkhông đủ.bufferlà một mảnguint8_t. Giá trị này có thể làNULLnếubufferCapacityInputlà 0.- Hãy xem phần Tham số dung lượng bộ nhớ đệm để biết nội dung mô tả chi tiết về cách truy xuất kích thước
buffercần thiết.
Ứng dụng có thể lấy dữ liệu cho XrSpatialBufferEXT do một thành phần cung cấp, trong đó XrSpatialBufferEXT :: bufferType là XR_SPATIAL_BUFFER_TYPE_UINT8_EXT bằng cách sử dụng xrGetSpatialBufferUint8EXT .
Thời gian chạy phải trả về XR_ERROR_VALIDATION_FAILURE nếu XrSpatialBufferTypeEXT cho XrSpatialBufferGetInfoEXT :: bufferId không phải là XR_SPATIAL_BUFFER_TYPE_UINT8_EXT .
Thời gian chạy phải trả về XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT nếu XrSpatialBufferGetInfoEXT :: bufferId không thuộc về snapshot .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Phải bật tiện ích
XR_EXT_spatial_entitytrước khi gọi xrGetSpatialBufferUint8EXT -
snapshotphải là một tên người dùng XrSpatialSnapshotEXT hợp lệ -
infophải là con trỏ đến cấu trúc XrSpatialBufferGetInfoEXT hợp lệ -
bufferCountOutputphải là con trỏ đến giá trịuint32_t - Nếu
bufferCapacityInputkhông phải là0, thìbufferphải là con trỏ đến một mảng gồm các giá trịbufferCapacityInputuint8_t
Mã trả về
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Hàm xrGetSpatialBufferUint16EXT được định nghĩa như sau:
XrResult xrGetSpatialBufferUint16EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint16_t* buffer);
Nội dung mô tả về tham số
snapshotlà một tay điều khiển cho XrSpatialSnapshotEXT .infolưu giữ thông tin về vùng đệm cần truy vấn.bufferCapacityInputlà dung lượng của mảng hoặc 0 để cho biết yêu cầu truy xuất dung lượng cần thiết.bufferCountOutputlà số phần tử trong mảngbufferhoặc dung lượng cần thiết trong trường hợpbufferCapacityInputkhông đủ.bufferlà một mảnguint16_t. Giá trị này có thể làNULLnếubufferCapacityInputlà 0.- Hãy xem phần Tham số dung lượng bộ nhớ đệm để biết nội dung mô tả chi tiết về cách truy xuất kích thước
buffercần thiết.
Ứng dụng có thể lấy dữ liệu cho XrSpatialBufferEXT do một thành phần cung cấp, trong đó XrSpatialBufferEXT :: bufferType là XR_SPATIAL_BUFFER_TYPE_UINT16_EXT bằng cách sử dụng xrGetSpatialBufferUint16EXT .
Thời gian chạy phải trả về XR_ERROR_VALIDATION_FAILURE nếu XrSpatialBufferTypeEXT cho XrSpatialBufferGetInfoEXT :: bufferId không phải là XR_SPATIAL_BUFFER_TYPE_UINT16_EXT .
Thời gian chạy phải trả về XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT nếu XrSpatialBufferGetInfoEXT :: bufferId không thuộc về snapshot .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_entitytrước khi gọi xrGetSpatialBufferUint16EXT -
snapshotphải là một tên người dùng XrSpatialSnapshotEXT hợp lệ -
infophải là con trỏ đến cấu trúc XrSpatialBufferGetInfoEXT hợp lệ -
bufferCountOutputphải là con trỏ đến giá trịuint32_t - Nếu
bufferCapacityInputkhông phải là0, thìbufferphải là con trỏ đến một mảng gồm các giá trịbufferCapacityInputuint16_t
Mã trả về
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Hàm xrGetSpatialBufferUint32EXT được định nghĩa như sau:
XrResult xrGetSpatialBufferUint32EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint32_t* buffer);
Nội dung mô tả về tham số
snapshotlà một tay điều khiển cho XrSpatialSnapshotEXT .infolưu giữ thông tin về vùng đệm cần truy vấn.bufferCapacityInputlà dung lượng của mảng hoặc 0 để cho biết yêu cầu truy xuất dung lượng cần thiết.bufferCountOutputlà số phần tử trong mảngbufferhoặc dung lượng cần thiết trong trường hợpbufferCapacityInputkhông đủ.bufferlà một mảnguint32_t. Giá trị này có thể làNULLnếubufferCapacityInputlà 0.- Hãy xem phần Tham số dung lượng bộ nhớ đệm để biết nội dung mô tả chi tiết về cách truy xuất kích thước
buffercần thiết.
Ứng dụng có thể lấy dữ liệu cho XrSpatialBufferEXT do một thành phần cung cấp, trong đó XrSpatialBufferEXT :: bufferType là XR_SPATIAL_BUFFER_TYPE_UINT32_EXT bằng cách sử dụng xrGetSpatialBufferUint32EXT .
Thời gian chạy phải trả về XR_ERROR_VALIDATION_FAILURE nếu XrSpatialBufferTypeEXT cho XrSpatialBufferGetInfoEXT :: bufferId không phải là XR_SPATIAL_BUFFER_TYPE_UINT32_EXT .
Thời gian chạy phải trả về XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT nếu XrSpatialBufferGetInfoEXT :: bufferId không thuộc về snapshot .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_entitytrước khi gọi xrGetSpatialBufferUint32EXT -
snapshotphải là một tên người dùng XrSpatialSnapshotEXT hợp lệ -
infophải là con trỏ đến cấu trúc XrSpatialBufferGetInfoEXT hợp lệ -
bufferCountOutputphải là con trỏ đến giá trịuint32_t - Nếu
bufferCapacityInputkhông phải là0, thìbufferphải là con trỏ đến một mảng gồm các giá trịbufferCapacityInputuint32_t
Mã trả về
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Hàm xrGetSpatialBufferFloatEXT được định nghĩa như sau:
XrResult xrGetSpatialBufferFloatEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
float* buffer);
Nội dung mô tả về tham số
snapshotlà một tay điều khiển cho XrSpatialSnapshotEXT .infolưu giữ thông tin về vùng đệm cần truy vấn.bufferCapacityInputlà dung lượng của mảng hoặc 0 để cho biết yêu cầu truy xuất dung lượng cần thiết.bufferCountOutputlà số phần tử trong mảngbufferhoặc dung lượng cần thiết trong trường hợpbufferCapacityInputkhông đủ.bufferlà một mảngfloat. Giá trị này có thể làNULLnếubufferCapacityInputlà 0.- Hãy xem phần Tham số dung lượng bộ nhớ đệm để biết nội dung mô tả chi tiết về cách truy xuất kích thước
buffercần thiết.
Ứng dụng có thể lấy dữ liệu cho XrSpatialBufferEXT do một thành phần cung cấp, trong đó XrSpatialBufferEXT :: bufferType là XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT bằng cách sử dụng xrGetSpatialBufferFloatEXT .
Thời gian chạy phải trả về XR_ERROR_VALIDATION_FAILURE nếu XrSpatialBufferTypeEXT cho XrSpatialBufferGetInfoEXT :: bufferId không phải là XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT .
Thời gian chạy phải trả về XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT nếu XrSpatialBufferGetInfoEXT :: bufferId không thuộc về snapshot .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Phải bật tiện ích
XR_EXT_spatial_entitytrước khi gọi xrGetSpatialBufferFloatEXT -
snapshotphải là một tay điều khiển XrSpatialSnapshotEXT hợp lệ -
infophải là con trỏ đến cấu trúc XrSpatialBufferGetInfoEXT hợp lệ -
bufferCountOutputphải là con trỏ đến giá trịuint32_t - Nếu
bufferCapacityInputkhông phải là0, thìbufferphải là con trỏ đến một mảng gồm các giá trịbufferCapacityInputfloat
Mã trả về
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Hàm xrGetSpatialBufferVector2fEXT được định nghĩa như sau:
XrResult xrGetSpatialBufferVector2fEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
XrVector2f* buffer);
Nội dung mô tả về tham số
snapshotlà một tay điều khiển cho XrSpatialSnapshotEXT .infolưu giữ thông tin về vùng đệm cần truy vấn.bufferCapacityInputlà dung lượng của mảng hoặc 0 để cho biết yêu cầu truy xuất dung lượng cần thiết.bufferCountOutputlà số phần tử trong mảngbufferhoặc dung lượng cần thiết trong trường hợpbufferCapacityInputkhông đủ.bufferlà một mảng XrVector2f . Giá trị này có thể làNULLnếubufferCapacityInputlà 0.- Hãy xem phần Tham số dung lượng bộ nhớ đệm để biết nội dung mô tả chi tiết về cách truy xuất kích thước
buffercần thiết.
Ứng dụng có thể lấy dữ liệu cho XrSpatialBufferEXT do một thành phần cung cấp, trong đó XrSpatialBufferEXT :: bufferType là XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT bằng cách sử dụng xrGetSpatialBufferVector2fEXT .
Thời gian chạy phải trả về XR_ERROR_VALIDATION_FAILURE nếu XrSpatialBufferTypeEXT cho XrSpatialBufferGetInfoEXT :: bufferId không phải là XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT .
Thời gian chạy phải trả về XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT nếu XrSpatialBufferGetInfoEXT :: bufferId không thuộc về snapshot .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_EXT_spatial_entityphải được bật trước khi gọi xrGetSpatialBufferVector2fEXT -
snapshotphải là một tên người dùng XrSpatialSnapshotEXT hợp lệ -
infophải là con trỏ đến cấu trúc XrSpatialBufferGetInfoEXT hợp lệ -
bufferCountOutputphải là con trỏ đến giá trịuint32_t - Nếu
bufferCapacityInputkhông phải là0, thìbufferphải là con trỏ đến một mảng cấu trúcbufferCapacityInputXrVector2f
Mã trả về
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Hàm xrGetSpatialBufferVector3fEXT được định nghĩa như sau:
XrResult xrGetSpatialBufferVector3fEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
XrVector3f* buffer);
Nội dung mô tả về tham số
snapshotlà một tay điều khiển cho XrSpatialSnapshotEXT .infolưu giữ thông tin về vùng đệm cần truy vấn.bufferCapacityInputlà dung lượng của mảng hoặc 0 để cho biết yêu cầu truy xuất dung lượng cần thiết.bufferCountOutputlà số phần tử trong mảngbufferhoặc dung lượng bắt buộc trong trường hợpbufferCapacityInputkhông đủ.bufferlà một mảng XrVector3f . Giá trị này có thể làNULLnếubufferCapacityInputlà 0.- Hãy xem phần Tham số dung lượng bộ nhớ đệm để biết nội dung mô tả chi tiết về cách truy xuất kích thước
buffercần thiết.
Ứng dụng có thể lấy dữ liệu cho XrSpatialBufferEXT do một thành phần cung cấp, trong đó XrSpatialBufferEXT :: bufferType là XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT bằng cách sử dụng xrGetSpatialBufferVector3fEXT .
Thời gian chạy phải trả về XR_ERROR_VALIDATION_FAILURE nếu XrSpatialBufferTypeEXT cho XrSpatialBufferGetInfoEXT :: bufferId không phải là XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT .
Thời gian chạy phải trả về XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT nếu XrSpatialBufferGetInfoEXT :: bufferId không thuộc về snapshot .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_EXT_spatial_entityphải được bật trước khi gọi xrGetSpatialBufferVector3fEXT -
snapshotphải là một tên người dùng XrSpatialSnapshotEXT hợp lệ -
infophải là con trỏ đến cấu trúc XrSpatialBufferGetInfoEXT hợp lệ -
bufferCountOutputphải là con trỏ đến giá trịuint32_t - Nếu
bufferCapacityInputkhông phải là0, thìbufferphải là một con trỏ đến một mảng cấu trúcbufferCapacityInputXrVector3f
Mã trả về
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Cấu trúc XrSpatialBufferGetInfoEXT được định nghĩa như sau:
typedef struct XrSpatialBufferGetInfoEXT {
XrStructureType type;
const void* next;
XrSpatialBufferIdEXT bufferId;
} XrSpatialBufferGetInfoEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc.bufferIdmộtXrSpatialBufferIdEXTcho vùng đệm có dữ liệu cần truy xuất.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_EXT_spatial_entityphải được bật trước khi sử dụng XrSpatialBufferGetInfoEXT -
typephải làXR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
#define XR_NULL_SPATIAL_BUFFER_ID_EXT 0
XR_NULL_SPATIAL_BUFFER_ID_EXT là một giá trị dành riêng đại diện cho một XrSpatialBufferIdEXT không hợp lệ. Giá trị này có thể được truyền đến và trả về từ các hàm API chỉ khi được cho phép cụ thể.
Tạo ảnh chụp nhanh về bản cập nhật
Hàm xrCreateSpatialUpdateSnapshotEXT được định nghĩa như sau:
XrResult xrCreateSpatialUpdateSnapshotEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialUpdateSnapshotCreateInfoEXT* createInfo,
XrSpatialSnapshotEXT* snapshot);
Nội dung mô tả về tham số
spatialContextlà một XrSpatialContextEXT được tạo trước đó bằng xrCreateSpatialContextAsyncEXT .createInfolà một con trỏ đến XrSpatialUpdateSnapshotCreateInfoEXT .snapshotlà con trỏ đến kết quả XrSpatialSnapshotEXT .
Ứng dụng có thể sử dụng xrCreateSpatialUpdateSnapshotEXT để tạo ảnh chụp nhanh và lấy dữ liệu thành phần mới nhất cho các thực thể cụ thể mà thời gian chạy biết. Ứng dụng có thể cung cấp các tay điều khiển XrSpatialEntityEXT và các loại thành phần mà ứng dụng quan tâm khi tạo ảnh chụp nhanh.
Ứng dụng có thể sử dụng XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes để lọc danh sách các thành phần có dữ liệu phải được đưa vào ảnh chụp nhanh. Nếu ứng dụng cung cấp danh sách hợp lệ các loại thành phần không gian trong XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes , thì thời gian chạy chỉ được đưa các thực thể không gian vào ảnh chụp nhanh có ít nhất một trong các thành phần được cung cấp trong XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes . Ngoài ra, thời gian chạy chỉ được bao gồm dữ liệu cho các thành phần đó trong ảnh chụp nhanh.
Thời gian chạy phải trả về XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT nếu bất kỳ XrSpatialComponentTypeEXT nào trong XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes không được bật cho các chức năng không gian được truyền đến XrSpatialContextCreateInfoEXT :: capabilityConfigs khi tạo spatialContext .
Nếu ứng dụng không cung cấp danh sách các loại thành phần không gian trong XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes , thì thời gian chạy phải bao gồm tất cả các thực thể không gian được liệt kê trong XrSpatialUpdateSnapshotCreateInfoEXT :: entities trong ảnh chụp nhanh và phải bao gồm dữ liệu cho tất cả các thành phần được bật của các chức năng được định cấu hình cho spatialContext .
Thời gian chạy không được bao gồm các thực thể không gian không có trong XrSpatialUpdateSnapshotCreateInfoEXT :: entities trong snapshot .
Ứng dụng có thể tạo số lượng ảnh chụp nhanh tuỳ ý nhưng phải lưu ý đến bộ nhớ được phân bổ cho mỗi ảnh chụp nhanh mới và phải huỷ ảnh chụp nhanh sau khi không cần đến nữa.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_EXT_spatial_entityphải được bật trước khi gọi xrCreateSpatialUpdateSnapshotEXT -
spatialContextphải là một tay điều khiển XrSpatialContextEXT hợp lệ -
createInfophải là một con trỏ đến cấu trúc XrSpatialUpdateSnapshotCreateInfoEXT hợp lệ -
snapshotphải là một con trỏ đến một tay điều khiển XrSpatialSnapshotEXT
Mã trả về
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
Cấu trúc XrSpatialUpdateSnapshotCreateInfoEXT được định nghĩa như sau:
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;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.entityCountlà mộtuint32_tmô tả số lượng phần tử trong mảngentities.entitieslà một mảng XrSpatialEntityEXT mà thời gian chạy phải bao gồm dữ liệu thành phần trong ảnh chụp nhanh.componentTypeCountlà mộtuint32_tmô tả số lượng phần tử trong mảngcomponentTypes.componentTypeslà một mảng XrSpatialComponentTypeEXT mà thời gian chạy phải đưa dữ liệu vào ảnh chụp nhanh.baseSpacelà XrSpace tương ứng với tất cả vị trí của XrSpatialSnapshotEXT cập nhật.timelàXrTimenơi tất cả vị trí của bản cập nhật XrSpatialSnapshotEXT sẽ được đặt.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_entitytrước khi sử dụng XrSpatialUpdateSnapshotCreateInfoEXT -
typephải làXR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc -
entitiesphải là một con trỏ trỏ đến một mảng gồmentityCounttay điều khiển XrSpatialEntityEXT hợp lệ - Nếu
componentTypeCountkhông phải là0, thìcomponentTypesphải là con trỏ đến một mảng gồm các giá trịcomponentTypeCounthợp lệ của XrSpatialComponentTypeEXT -
baseSpacephải là một tên người dùng XrSpace hợp lệ - Tham số
entityCountphải lớn hơn0 - Cả
baseSpacevà các phần tử củaentitiesđều phải được tạo, phân bổ hoặc truy xuất từ cùng một XrSession
Huỷ ảnh chụp nhanh
Hàm xrDestroySpatialSnapshotEXT được định nghĩa như sau:
XrResult xrDestroySpatialSnapshotEXT(
XrSpatialSnapshotEXT snapshot);
Nội dung mô tả về tham số
snapshotlà một XrSpatialSnapshotEXT do xrCreateSpatialDiscoverySnapshotCompleteEXT hoặc xrCreateSpatialUpdateSnapshotEXT cung cấp trước đó.
Ứng dụng có thể gọi xrDestroySpatialSnapshotEXT để huỷ tay điều khiển XrSpatialSnapshotEXT và các tài nguyên liên quan.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_EXT_spatial_entityphải được bật trước khi gọi xrDestroySpatialSnapshotEXT -
snapshotphải là một tên người dùng XrSpatialSnapshotEXT hợp lệ
Độ an toàn cho chuỗi
- Quyền truy cập vào
snapshotvà mọi tay điều khiển con phải được đồng bộ hoá bên ngoài
Mã trả về
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Thành phần phổ biến
2D có giới hạn
Dữ liệu thành phần
Cấu trúc XrSpatialBounded2DDataEXT được định nghĩa như sau:
typedef struct XrSpatialBounded2DDataEXT {
XrPosef center;
XrExtent2Df extents;
} XrSpatialBounded2DDataEXT;
Nội dung mô tả về thành viên
centerlà một XrPosef xác định tâm hình học của thành phần 2D có giới hạn.extentslà phạm vi của thành phần 2D có giới hạn dọc theo trục x (extents.width), trục y (extents.height), căn giữa trêncenter.
extents của XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT đề cập đến kích thước của thực thể trong mặt phẳng x-y của hệ toạ độ của mặt phẳng. Một mặt phẳng có vị trí {0, 0, 0}, độ xoay {0, 0, 0, 1} (không xoay) và phạm vi {1, 1} là mặt phẳng 1 mét x 1 mét có tâm tại {0, 0, 0} với vectơ pháp tuyến mặt trước hướng về phía +Z trong không gian của thành phần.
X X Y Y Z Z Chiều cao Chiều cao Y Y Z Z X X Mặt phẳng dọc Mặt phẳng dọc Mặt phẳng ngang Mặt phẳng ngang Chiều rộng Chiều rộng Chiều rộng Chiều rộng Chiều cao Chiều cao
Hình 24. Hệ toạ độ thành phần Bounded2D
Lưu ý
OpenXR sử dụng mặt phẳng X-Y với +Z làm pháp tuyến mặt phẳng, nhưng các API khác có thể sử dụng mặt phẳng X-Z với +Y làm pháp tuyến mặt phẳng. Mặt phẳng X-Y có thể được chuyển đổi thành mặt phẳng X-Z bằng cách xoay -π/2 radian quanh trục +X.
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_EXT_spatial_entityphải được bật trước khi sử dụng XrSpatialBounded2DDataEXT
Cấu trúc danh sách thành phần để truy vấn dữ liệu
Cấu trúc XrSpatialComponentBounded2DListEXT được định nghĩa như sau:
typedef struct XrSpatialComponentBounded2DListEXT {
XrStructureType type;
void* next;
uint32_t boundCount;
XrSpatialBounded2DDataEXT* bounds;
} XrSpatialComponentBounded2DListEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.boundCountlà mộtuint32_tmô tả số lượng phần tử trong mảngbounds.boundslà một mảng XrSpatialBounded2DDataEXT .
Thời gian chạy phải trả về XR_ERROR_VALIDATION_FAILURE từ xrQuerySpatialComponentDataEXT nếu XrSpatialComponentBounded2DListEXT nằm trong chuỗi tiếp theo của XrSpatialComponentDataQueryResultEXT :: next nhưng XrSpatialComponentDataQueryConditionEXT ::componentTypeCount không phải là 0 và XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT không có trong XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Thời gian chạy phải trả về XR_ERROR_SIZE_INSUFFICIENT từ xrQuerySpatialComponentDataEXT nếu boundCount nhỏ hơn XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Nếu xrQuerySpatialComponentDataEXT :: snapshot được tạo từ xrCreateSpatialDiscoverySnapshotCompleteEXT , thì thời gian chạy phải cung cấp XrSpatialBounded2DDataEXT :: center trong XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace và XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time .
Nếu xrQuerySpatialComponentDataEXT :: snapshot được tạo từ xrCreateSpatialUpdateSnapshotEXT , thì thời gian chạy phải cung cấp XrSpatialBounded2DDataEXT :: center trong XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace và XrSpatialUpdateSnapshotCreateInfoEXT :: time .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Tiện ích
XR_EXT_spatial_entityphải được bật trước khi sử dụng XrSpatialComponentBounded2DListEXT -
typephải làXR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc -
boundsphải là một con trỏ đến một mảng gồmboundCountcấu trúc XrSpatialBounded2DDataEXT - Tham số
boundCountphải lớn hơn0
Cấu hình
Nếu XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT được liệt kê trong XrSpatialCapabilityComponentTypesEXT :: componentTypes cho một số chức năng, thì ứng dụng có thể bật chức năng đó bằng cách đưa giá trị enum vào danh sách XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Thành phần này không yêu cầu bất kỳ cấu hình đặc biệt nào để đưa vào chuỗi XrSpatialCapabilityConfigurationBaseHeaderEXT tiếp theo.
3D có giới hạn
Dữ liệu thành phần
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT sử dụng XrBoxf cho dữ liệu của mình.
Cấu trúc danh sách thành phần để truy vấn dữ liệu
Cấu trúc XrSpatialComponentBounded3DListEXT được xác định như sau:
typedef struct XrSpatialComponentBounded3DListEXT {
XrStructureType type;
void* next;
uint32_t boundCount;
XrBoxf* bounds;
} XrSpatialComponentBounded3DListEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.boundCountlà mộtuint32_tmô tả số lượng phần tử trong mảngbounds.boundslà một mảng XrBoxf .
Thời gian chạy phải trả về XR_ERROR_VALIDATION_FAILURE từ xrQuerySpatialComponentDataEXT nếu XrSpatialComponentBounded3DListEXT nằm trong chuỗi tiếp theo của XrSpatialComponentDataQueryResultEXT :: next nhưng XrSpatialComponentDataQueryConditionEXT ::componentTypeCount không phải là 0 và XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT không có trong XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Thời gian chạy phải trả về XR_ERROR_SIZE_INSUFFICIENT từ xrQuerySpatialComponentDataEXT nếu boundCount nhỏ hơn XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Nếu xrQuerySpatialComponentDataEXT :: snapshot được tạo từ xrCreateSpatialDiscoverySnapshotCompleteEXT , thì thời gian chạy phải cung cấp XrBoxf :: center trong XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace tại XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time .
Nếu xrQuerySpatialComponentDataEXT :: snapshot được tạo từ xrCreateSpatialUpdateSnapshotEXT , thì thời gian chạy phải cung cấp XrBoxf :: center trong XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace tại XrSpatialUpdateSnapshotCreateInfoEXT :: time .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_entitytrước khi sử dụng XrSpatialComponentBounded3DListEXT -
typephải làXR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc -
boundsphải là con trỏ trỏ đến một mảng gồmboundCountcấu trúc XrBoxf - Tham số
boundCountphải lớn hơn0
Cấu hình
Nếu XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT được liệt kê trong XrSpatialCapabilityComponentTypesEXT :: componentTypes cho một số chức năng, thì ứng dụng có thể bật chức năng đó bằng cách đưa enum vào danh sách XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Thành phần này không yêu cầu bất kỳ cấu hình đặc biệt nào để đưa vào chuỗi XrSpatialCapabilityConfigurationBaseHeaderEXT tiếp theo.
Cha mẹ
Dữ liệu thành phần
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT sử dụng XrSpatialEntityIdEXT cho dữ liệu của mình.
Cấu trúc danh sách thành phần để truy vấn dữ liệu
Cấu trúc XrSpatialComponentParentListEXT được định nghĩa như sau:
typedef struct XrSpatialComponentParentListEXT {
XrStructureType type;
void* next;
uint32_t parentCount;
XrSpatialEntityIdEXT* parents;
} XrSpatialComponentParentListEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.parentCountlà mộtuint32_tmô tả số lượng phần tử trong mảngparents.parentslà một mảngXrSpatialEntityIdEXT.
Thời gian chạy phải trả về XR_ERROR_VALIDATION_FAILURE từ xrQuerySpatialComponentDataEXT nếu XrSpatialComponentParentListEXT nằm trong chuỗi tiếp theo của XrSpatialComponentDataQueryResultEXT :: next nhưng XrSpatialComponentDataQueryConditionEXT ::componentTypeCount không phải là 0 và XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT không có trong XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Thời gian chạy phải trả về XR_ERROR_SIZE_INSUFFICIENT từ xrQuerySpatialComponentDataEXT nếu parentCount nhỏ hơn XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Phải bật tiện ích
XR_EXT_spatial_entitytrước khi sử dụng XrSpatialComponentParentListEXT -
typephải làXR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc -
parentsphải là con trỏ trỏ đến một mảng gồmparentCountgiá trịXrSpatialEntityIdEXT - Tham số
parentCountphải lớn hơn0
Cấu hình
Nếu XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT được liệt kê trong XrSpatialCapabilityComponentTypesEXT :: componentTypes cho một số chức năng, thì ứng dụng có thể bật chức năng đó bằng cách đưa enum vào danh sách XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Thành phần này không yêu cầu bất kỳ cấu hình đặc biệt nào để đưa vào chuỗi XrSpatialCapabilityConfigurationBaseHeaderEXT tiếp theo.
Lưới 3D
Dữ liệu thành phần
Cấu trúc XrSpatialMeshDataEXT được định nghĩa như sau:
typedef struct XrSpatialMeshDataEXT {
XrPosef origin;
XrSpatialBufferEXT vertexBuffer;
XrSpatialBufferEXT indexBuffer;
} XrSpatialMeshDataEXT;
Nội dung mô tả về thành viên
originlà một XrPosef xác định gốc của lưới. Tất cả đỉnh của lưới phải tương ứng với gốc này.vertexBufferlà một XrSpatialBufferEXT cung cấp mã nhận dạng cho một vùng đệm đại diện cho vùng đệm đỉnh của thực thể mà thành phần này đang hoạt động. Vị trí của các đỉnh phải tương ứng vớiorigin.indexBufferlà một XrSpatialBufferEXT cung cấp mã nhận dạng cho một vùng đệm đại diện cho một mảng chỉ mục tam giác, chỉ định chỉ mục của các đỉnh lưới trongvertexBuffer. Các chỉ mục tam giác phải được trả về theo thứ tự ngược chiều kim đồng hồ và ba chỉ mục biểu thị một tam giác.
Loại thành phần sử dụng XrSpatialMeshDataEXT phải chỉ định XrSpatialBufferTypeEXT của vertexBuffer và indexBuffer .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_entitytrước khi sử dụng XrSpatialMeshDataEXT -
vertexBufferphải là một cấu trúc XrSpatialBufferEXT hợp lệ -
indexBufferphải là một cấu trúc XrSpatialBufferEXT hợp lệ
Cấu trúc danh sách thành phần để truy vấn dữ liệu
Cấu trúc XrSpatialComponentMesh3DListEXT được định nghĩa như sau:
typedef struct XrSpatialComponentMesh3DListEXT {
XrStructureType type;
void* next;
uint32_t meshCount;
XrSpatialMeshDataEXT* meshes;
} XrSpatialComponentMesh3DListEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc.meshCountlà mộtuint32_tmô tả số lượng phần tử trong mảngmeshes.mesheslà một mảng XrSpatialMeshDataEXT .
Ứng dụng có thể truy vấn thành phần lưới 3D của các thực thể không gian trong XrSpatialSnapshotEXT bằng cách thêm XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT vào XrSpatialComponentDataQueryConditionEXT :: componentTypes và thêm XrSpatialComponentMesh3DListEXT vào chuỗi con trỏ tiếp theo của XrSpatialComponentDataQueryResultEXT .
Thời gian chạy phải trả về XR_ERROR_VALIDATION_FAILURE từ xrQuerySpatialComponentDataEXT nếu XrSpatialComponentMesh3DListEXT nằm trong chuỗi tiếp theo của XrSpatialComponentDataQueryResultEXT :: next nhưng XrSpatialComponentDataQueryConditionEXT ::componentTypeCount không phải là 0 và XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT không được đưa vào XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Thời gian chạy phải trả về XR_ERROR_SIZE_INSUFFICIENT từ xrQuerySpatialComponentDataEXT nếu meshCount nhỏ hơn XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Đối với XrSpatialMeshDataEXT do thời gian chạy điền vào mảng meshes, XrSpatialBufferEXT :: bufferType cho XrSpatialMeshDataEXT :: vertexBuffer phải là XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT và XrSpatialBufferEXT :: bufferType cho XrSpatialMeshDataEXT :: indexBuffer phải là XR_SPATIAL_BUFFER_TYPE_UINT32_EXT .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_EXT_spatial_entitytrước khi sử dụng XrSpatialComponentMesh3DListEXT -
typephải làXR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc -
meshesphải là một con trỏ đến một mảng gồm các cấu trúcmeshCountXrSpatialMeshDataEXT - Tham số
meshCountphải lớn hơn0
Cấu hình
Nếu XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT được liệt kê trong XrSpatialCapabilityComponentTypesEXT :: componentTypes cho một số chức năng, thì ứng dụng có thể bật chức năng đó bằng cách đưa enum vào danh sách XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents của cấu trúc bắt nguồn từ XrSpatialCapabilityConfigurationBaseHeaderEXT của chức năng hỗ trợ thành phần này.
Thành phần này không yêu cầu bất kỳ cấu hình đặc biệt nào để đưa vào chuỗi XrSpatialCapabilityConfigurationBaseHeaderEXT tiếp theo.
Bộ lọc trạng thái theo dõi
Cấu trúc XrSpatialFilterTrackingStateEXT được định nghĩa như sau:
typedef struct XrSpatialFilterTrackingStateEXT {
XrStructureType type;
const void* next;
XrSpatialEntityTrackingStateEXT trackingState;
} XrSpatialFilterTrackingStateEXT;
Nội dung mô tả về thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc.trackingStatelà XrSpatialEntityTrackingStateEXT mà ứng dụng muốn áp dụng bộ lọc.
Ứng dụng có thể sử dụng XrSpatialFilterTrackingStateEXT trong chuỗi tiếp theo của XrSpatialDiscoverySnapshotCreateInfoEXT để giới hạn phạm vi khám phá chỉ cho những thực thể có trạng thái theo dõi là trackingState .
Ứng dụng có thể sử dụng XrSpatialFilterTrackingStateEXT trong chuỗi tiếp theo của XrSpatialComponentDataQueryConditionEXT để chỉ định phạm vi truy vấn dữ liệu thành phần từ một ảnh chụp nhanh chỉ cho các thực thể có trạng thái theo dõi là trackingState .
Cách sử dụng hợp lệ (Ngầm ẩn)
- Phải bật tiện ích
XR_EXT_spatial_entitytrước khi sử dụng XrSpatialFilterTrackingStateEXT -
typephải làXR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXT -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc -
trackingStatephải là một giá trị XrSpatialEntityTrackingStateEXT hợp lệ
Mã ví dụ
Mức sử dụng ứng dụng
Các ứng dụng thường sử dụng tiện ích thực thể không gian theo mẫu sau:
- Trước tiên, ứng dụng sẽ liệt kê các chức năng không gian của hệ thống bằng xrEnumerateSpatialCapabilitiesEXT . Sau đó, hàm này sẽ kiểm tra mảng XrSpatialCapabilityEXT được trả về và liệt kê các thành phần cũng như tính năng được hỗ trợ cho từng chức năng đó bằng cách sử dụng lần lượt xrEnumerateSpatialCapabilityComponentTypesEXT và xrEnumerateSpatialCapabilityFeaturesEXT. Điều này giúp ứng dụng có được bức tranh toàn cảnh về các thành phần mà ứng dụng có thể bật và các cấu hình mà chức năng này chấp nhận.
- Sau đó, ứng dụng sẽ tạo một hoặc nhiều tay điều khiển XrSpatialContextEXT có cấu hình chức năng không gian cụ thể, trong đó các cấu hình này bật và định cấu hình một chức năng cụ thể trong bối cảnh không gian, đồng thời bật và định cấu hình các thành phần cho những chức năng đó.
- Đối với mỗi XrSpatialContextEXT , ứng dụng sẽ đợi nhận các sự kiện XrEventDataSpatialDiscoveryRecommendedEXT cho XrSpatialContextEXT đó trước khi sử dụng xrCreateSpatialDiscoverySnapshotAsyncEXT để khám phá các thực thể không gian. Sau khi thao tác không đồng bộ này hoàn tất, ứng dụng sẽ nhận được một tay điều khiển XrSpatialSnapshotEXT.
- Ứng dụng truy vấn các thực thể và dữ liệu thành phần có trong XrSpatialSnapshotEXT này bằng cách sử dụng xrQuerySpatialComponentDataEXT . Ứng dụng đọc dữ liệu thành phần mới nhất của các thực thể được truy vấn từ các cấu trúc được đính kèm vào chuỗi XrSpatialComponentDataQueryResultEXT tiếp theo nếu trạng thái thực thể là
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT. - Nếu có các thực thể cụ thể mà ứng dụng xác định là thú vị và muốn nhận thông tin cập nhật theo thời gian, thì ứng dụng sẽ tạo tay điều khiển XrSpatialEntityEXT cho các thực thể đó bằng cách sử dụng xrCreateSpatialEntityFromIdEXT . Ứng dụng nhận được thông tin cập nhật cho các thực thể thú vị đó bằng cách sử dụng xrCreateSpatialUpdateSnapshotEXT và sử dụng cùng một hàm xrQuerySpatialComponentDataEXT trên XrSpatialSnapshotEXT mới tạo để nhận dữ liệu thành phần mới nhất cho các thực thể đó.
Khám phá các thực thể không gian và truy vấn dữ liệu thành phần
Đoạn mã ví dụ sau đây minh hoạ cách khám phá các thực thể không gian cho chức năng "Foo" truy vấn dữ liệu thành phần của thực thể đó.
/****************************/
/* 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));
Dữ liệu vùng đệm truy vấn
Mã ví dụ sau đây minh hoạ cách lấy dữ liệu của một thành phần cung cấp 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.
}
}
Nguyên tắc về tiện ích bổ sung
Nếu một tiện ích đang xác định một XrSpatialComponentTypeEXT mới cung cấp thêm dữ liệu về một thực thể không gian,
- tiện ích này cũng phải xác định cấu trúc danh sách cho thành phần đó, cho phép ứng dụng truyền một mảng đến thời gian chạy để điền dữ liệu cho từng thực thể không gian đáp ứng xrQuerySpatialComponentDataEXT ::
queryCondition. Một số ví dụ về cấu trúc danh sách như vậy là XrSpatialComponentParentListEXT và XrSpatialComponentBounded2DListEXT . Nếu kích thước dữ liệu thành phần có thể thay đổi và yêu cầu ứng dụng sử dụng thành ngữ hai lệnh gọi để truy vấn, thì dữ liệu thành phần phải cung cấp XrSpatialBufferEXT cho mỗi dữ liệu có kích thước thay đổi trong cấu trúc danh sách và phải chỉ định XrSpatialBufferTypeEXT cho mỗi vùng đệm. Sau đó, ứng dụng có thể truy vấn dữ liệu vùng đệm bằng các hàm được xác định trong Thành ngữ hai lệnh gọi cho dữ liệu thành phần . Ví dụ về cấu trúc như vậy là XrSpatialMeshDataEXT, bao gồm XrSpatialComponentMesh3DListEXT . - Tiện ích này cũng có thể cung cấp các cấu trúc mà ứng dụng có thể liên kết với XrSpatialComponentDataQueryConditionEXT ::
nextđể cung cấp thêm bộ lọc cho truy vấn liên quan đến dữ liệu của thành phần này.
- tiện ích này cũng phải xác định cấu trúc danh sách cho thành phần đó, cho phép ứng dụng truyền một mảng đến thời gian chạy để điền dữ liệu cho từng thực thể không gian đáp ứng xrQuerySpatialComponentDataEXT ::
Tiện ích có thể xác định các cấu trúc mở rộng XrSpatialDiscoverySnapshotCreateInfoEXT để cung cấp thêm bộ lọc cho tính năng khám phá. Các bộ lọc để tạo ảnh chụp nhanh không được ảnh hưởng đến cấu hình của bối cảnh không gian, mà thay vào đó, các bộ lọc này được dùng để cung cấp gợi ý cho thời gian chạy về những thực thể và dữ liệu cần đưa vào ảnh chụp nhanh theo dõi theo cấu hình hiện tại của bối cảnh không gian (và do đó là cấu hình hiện tại của các dịch vụ cơ bản).
Nếu một tiện ích xác định XrSpatialCapabilityEXT mới,
- cũng nên chỉ định danh sách XrSpatialComponentTypeEXT mà thời gian chạy phải cung cấp trên các thực thể cho chức năng đó.
- thì cũng phải cung cấp các cấu trúc bắt nguồn từ XrSpatialCapabilityConfigurationBaseHeaderEXT để cho phép định cấu hình chức năng đó.
Nếu một tiện ích xác định XrSpatialCapabilityFeatureEXT mới, thì tiện ích đó cũng phải xác định một cấu trúc cấu hình tương ứng có thể được liên kết với con trỏ tiếp theo của XrSpatialCapabilityConfigurationBaseHeaderEXT mà ứng dụng có thể sử dụng để bật tính năng này khi tạo XrSpatialContextEXT .
Một tiện ích xác định XrSpatialCapabilityEXT mới nên tuân theo mẫu này cho quy cách –
- Tổng quan
- Hỗ trợ thời gian chạy
- Cấu hình
- Thành phần được đảm bảo
- Mã ví dụ
Một tiện ích xác định XrSpatialComponentTypeEXT mới phải tuân theo mẫu này cho quy cách –
- Dữ liệu thành phần
- Cấu trúc danh sách thành phần để truy vấn dữ liệu
- Cấu hình
Khi viết một API cung cấp cho ứng dụng một
XrSpatialBufferIdEXT, API đó phải đi kèm với một XrSpatialBufferTypeEXT để thông báo cho ứng dụng biết loại dữ liệu của vùng đệm và ứng dụng có thể sử dụng một hàmxrGetSpatialBuffer*thích hợp để truy xuất nội dung thực tế của vùng đệm.
Nguyên tắc về thiết kế và tiện ích nhãn ngữ nghĩa
Mặc dù tiện ích này không xác định bất kỳ thành phần nào để truyền tải thông tin nhãn ngữ nghĩa của một thực thể, nhưng tiện ích này đưa ra các quy tắc và nguyên tắc thiết kế cho mọi tiện ích xác định thành phần đó. Trong văn bản sau, " nên " và " phải " ràng buộc tác giả của chức năng đó, thay vì ràng buộc việc triển khai thời gian chạy hoặc ứng dụng sử dụng API.
- Nếu một tiện ích đang xác định nhãn ngữ nghĩa cho bất kỳ XrSpatialCapabilityEXT nào, thì tiện ích đó nên xác định một XrSpatialComponentTypeEXT mới cũng như một kiểu liệt kê mới có một tập hợp nhãn ("tập hợp nhãn ngữ nghĩa") làm dữ liệu cho thành phần đó.
- Một enum đại diện cho một tập hợp nhãn ngữ nghĩa phải có một giá trị để cho biết rằng thực thể không được phân loại vào bất kỳ nhãn nào của tập hợp này. Tên của giá trị liệt kê này phải bao gồm "UNCATEGORIZED", ví dụ:
XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT. Giá trị này cho các ứng dụng biết rằng thời gian chạy nhận ra thực thể này, nhưng có các nhóm nhãn ngữ nghĩa khác mà thực thể này được phân loại. - Việc liệt kê XrSpatialComponentTypeEXT mới được xác định này trong xrEnumerateSpatialCapabilityComponentTypesEXT ngụ ý rằng thời gian chạy hỗ trợ tập hợp nhãn ngữ nghĩa (và do đó là các nhãn được xác định trong tập hợp) tương ứng với loại thành phần đó.
- Ứng dụng thể hiện mong muốn khám phá các thực thể có nhãn thuộc tập hợp nhãn ngữ nghĩa này bằng cách đưa XrSpatialComponentTypeEXT tương ứng vào mảng XrSpatialCapabilityConfigurationBaseHeaderEXT ::
enabledComponentscủa cấu trúc cấu hình cho chức năng mà loại thành phần được liệt kê. - Một thực thể không gian có thể có nhiều thành phần, mỗi thành phần cung cấp cho thực thể đó một nhãn từ tập hợp nhãn ngữ nghĩa riêng. Hãy xem ví dụ sau đây với một số tập hợp nhãn ngữ nghĩa giả định –
XrSpatialObjectSemanticLabel, có thể có các giá trị như ghế, ghế sofa, bàn, v.v.,XrSpatialSofaBrand, có thể có các giá trị như IKEA, Wayfair, v.v. vàXrSpatialIkeaSofa, có thể có tên mẫu ghế sofa cụ thể của IKEA. Trong trường hợp này, cùng một thực thể ghế sofa có cả 3 thành phần (nhãn từ cả 3 tập hợp nhãn ngữ nghĩa), mỗi thành phần cung cấp một mức độ chi tiết khác nhau về thông tin của thực thể. - Nếu một tiện ích đang xác định một XrSpatialComponentTypeEXT mới cung cấp một tập hợp nhãn ngữ nghĩa mới chứa nhiều nhãn ngoài nhãn
UNCATEGORIZED, thì tiện ích đó nên cân nhắc việc xác định một XrSpatialCapabilityFeatureEXT cho phép các ứng dụng chỉ kích hoạt một nhóm nhỏ các nhãn được xác định trong tập hợp nhãn ngữ nghĩa tương ứng với loại thành phần đó. Tập hợp con này (được cung cấp trong chuỗi tiếp theo của cấu hình chức năng) đóng vai trò là gợi ý để môi trường thời gian chạy tối ưu hoá quy trình theo dõi và chỉ theo dõi tập hợp con được cung cấp. Ví dụ về cấu trúc tính năng như vậy được cung cấp bên dưới . - Tiện ích không được thêm nhãn vào tập hợp nhãn ngữ nghĩa hiện có. Thay vào đó, họ phải xác định một kiểu liệt kê mới chứa các giá trị liệt kê tương đương có ngữ nghĩa giống hệt nhau và có giá trị bằng với các giá trị trong tập hợp khác, ngoài các giá trị liệt kê mới được thêm vào. Thông số kỹ thuật của bộ nhãn ngữ nghĩa mới được xác định cũng phải thiết lập mối liên kết giữa bộ nhãn cũ và bộ nhãn mới. Xem ví dụ bên dưới .
Ví dụ về định nghĩa tính năng không gian cho tập hợp con nhãn ngữ nghĩa
// 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;
Ví dụ về phần mở rộng nhãn ngữ nghĩa không gian
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;
Hãy xem ví dụ ở trên, trong đó một tiện ích xác định một kiểu liệt kê XrSpatialExamplePlaneSemanticLabelExtensionEXT để mở rộng XrSpatialPlaneSemanticLabelEXT hiện có bằng các giá trị đại diện cho cửa ra vào và cửa sổ. Thông số kỹ thuật cho kiểu liệt kê mới phải bao gồm văn bản cho biểu mẫu sau –
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
|====
Macro mới
Loại chân bàn mới
XrSpatialBufferIdEXTXrSpatialEntityIdEXT
Các loại đối tượng mới
Lệnh mới
- xrCreateSpatialContextAsyncEXT
- xrCreateSpatialContextCompleteEXT
- xrCreateSpatialDiscoverySnapshotAsyncEXT
- xrCreateSpatialDiscoverySnapshotCompleteEXT
- xrCreateSpatialEntityFromIdEXT
- xrCreateSpatialUpdateSnapshotEXT
- xrDestroySpatialContextEXT
- xrDestroySpatialEntityEXT
- xrDestroySpatialSnapshotEXT
- xrEnumerateSpatialCapabilitiesEXT
- xrEnumerateSpatialCapabilityComponentTypesEXT
- xrEnumerateSpatialCapabilityFeaturesEXT
- xrGetSpatialBufferFloatEXT
- xrGetSpatialBufferStringEXT
- xrGetSpatialBufferUint16EXT
- xrGetSpatialBufferUint32EXT
- xrGetSpatialBufferUint8EXT
- xrGetSpatialBufferVector2fEXT
- xrGetSpatialBufferVector3fEXT
- xrQuerySpatialComponentDataEXT
Cấu trúc mới
- XrCreateSpatialContextCompletionEXT
- XrCreateSpatialDiscoverySnapshotCompletionEXT
- XrCreateSpatialDiscoverySnapshotCompletionInfoEXT
- XrEventDataSpatialDiscoveryRecommendedEXT
- XrSpatialBounded2DDataEXT
- XrSpatialBufferEXT
- XrSpatialBufferGetInfoEXT
- XrSpatialCapabilityComponentTypesEXT
- XrSpatialCapabilityConfigurationBaseHeaderEXT
- XrSpatialComponentDataQueryConditionEXT
- XrSpatialComponentDataQueryResultEXT
- XrSpatialContextCreateInfoEXT
- XrSpatialDiscoverySnapshotCreateInfoEXT
- XrSpatialEntityFromIdCreateInfoEXT
- XrSpatialMeshDataEXT
- XrSpatialUpdateSnapshotCreateInfoEXT
Mở rộng XrSpatialComponentDataQueryResultEXT :
Mở rộng XrSpatialDiscoverySnapshotCreateInfoEXT , XrSpatialComponentDataQueryConditionEXT :
Enum mới
- XrSpatialBufferTypeEXT
- XrSpatialCapabilityEXT
- XrSpatialCapabilityFeatureEXT
- XrSpatialComponentTypeEXT
- XrSpatialEntityTrackingStateEXT
Hằng số enum mới
XR_EXT_SPATIAL_ENTITY_EXTENSION_NAMEXR_EXT_spatial_entity_SPEC_VERSIONMở rộng XrObjectType :
XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXTXR_OBJECT_TYPE_SPATIAL_ENTITY_EXTXR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT
Mở rộng XrResult :
XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXTXR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXTXR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT
Mở rộng XrStructureType :
XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXTXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXTXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXTXR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXTXR_TYPE_SPATIAL_BUFFER_GET_INFO_EXTXR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXTXR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXTXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXTXR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXTXR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXTXR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXTXR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXTXR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXTXR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT
Vấn đề
Có phải một thực thể luôn chỉ bắt nguồn từ một chức năng duy nhất không?
- Đã giải quyết
- Trả lời: Không. Việc này hoàn toàn phụ thuộc vào thời gian chạy dựa trên khả năng theo dõi riêng và cách thời gian chạy muốn biểu thị một thực thể được phát hiện. Thông số kỹ thuật không quy định bất kỳ cách trình bày cụ thể nào về thực thể không gian, ngoại trừ các thành phần được đảm bảo của một chức năng nhất định để đặt ra kỳ vọng tối thiểu. Thời gian chạy có thể hợp nhất các thực thể được phát hiện bằng các chức năng riêng biệt và biểu thị các thực thể đó dưới dạng một thực thể duy nhất có các thành phần được đảm bảo của tất cả chức năng giúp xác định thực thể đó. Ví dụ: cả tính năng theo dõi mặt phẳng và tính năng theo dõi đối tượng đều có thể phát hiện bảng, trong đó tính năng theo dõi mặt phẳng cung cấp thành phần
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTtrên thực thể và tính năng theo dõi đối tượng cung cấpXR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT. Một môi trường thời gian chạy nhất định có thể cung cấp bảng dưới dạng 2 thực thể riêng biệt, mỗi thực thể có một tập hợp thành phần được đảm bảo riêng, trong khi một số môi trường thời gian chạy nhất định có thể chỉ cung cấp 1 thực thể để đại diện cho bảng và có cảXR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTvàXR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTtrên cùng một thực thể. Điều quan trọng cần lưu ý ở đây là một thực thể không gian nhất định có thể có tối đa một thành phần của bất kỳ loại thành phần nào. Do đó, nếu dữ liệu thành phần do các chức năng khác nhau tạo ra xung đột với một thực thể nhất định, thì thời gian chạy phải biểu thị các dữ liệu đó dưới dạng 2 thực thể riêng biệt.
Danh sách phiên bản
Bản sửa đổi 1, 12/4/2024 (Nihav Jain, Google)
- Nội dung mô tả ban đầu về tiện ích