XR_EXT_spatial_entity
Name String
XR_EXT_spatial_entity
Loại phần mở rộng
Tiện ích Instance
Số máy nhánh đã đăng ký
741
Bản sửa đổi
1
Trạng thái phê chuẩn
Được phê duyệt
Phần mở rộng và các phần phụ thuộc của 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 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 tương đối đồng nhất như được xác định bởi tiện ích này. Vì tiện ích này thiếu định nghĩa cụ thể về bất kỳ lĩnh vực 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. Đôi khi, các ví dụ có trong văn bản đặc tả tiện ích này đề 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 cho mục đích minh hoạ, mà không giới hạn hoặc chỉ định chức năng bổ sung đó.
Sau đây là những phần chung của tiện ích này:
- Thực thể không gian : Chức năng này tập trung vào các thực thể , bản thân các thực thể này 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 được liên kết với chúng để cung cấp dữ liệu và hành vi.
- Các 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à mọi thực thể nhất định có tối đa một thành phần thuộc một loại thành phần nhất định .
- Bối cảnh không gian : Mọi 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 tạo 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 bởi các khả năng . Khả năng là một đơn vị chức năng, ví dụ: (không giới hạn) các neo do ứng dụng xác định, tính năng phát hiện mặt phẳng hoặc tính năng 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 tại thời điểm tạo thực thể như thường lệ) và được bật cho một bối cảnh cụ thể tại thời điểm tạo.
- Mỗi khả năng được liên kết với một tập hợp các loại thành phần mà các thành phần có trên mọi thực thể do khả năng đó hiển thị . Tiện ích xác định một khả năng sẽ chỉ định các loại thành phần bắt buộc đối với khả năng ("đảm bảo"), trong khi tiện ích đó hoặc các tiện ích khác có thể chỉ định các loại thành phần không bắt buộc do một số cách 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ể các thành phần thuộc một loại thành phần nhất định. Các thành phần này có thể sử dụng một cách đồng nhất bất kể khả năng nào đã tạo ra chúng.
- Các tính năng về khả năng không gian : Ngoài ra, một số khả năng yêu cầu phải có cấu hình, do đó được tham số hoá theo các 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 mỗi khả năng cung cấp được hỗ trợ trên hệ thống hiện tại, cả cá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ố hóa khác nhau cho các khả năng , tiện ích này cung cấp một cơ chế để liệt kê các tính năng 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 trên nhiều chức 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. Chúng có thể là bất kỳ loại nào sau đây:
- Vật lý (ví dụ: các bề mặt phẳng như tường và sàn nhà, 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 thao tác, 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ực thể-Thành phần . Mỗi thực thể không gian đều 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ể đó.
Các thực thể không gian được biểu thị bằng một nguyên tử XrSpatialEntityIdEXT hoặc một đối tượng XrSpatialEntityEXT, thông tin chi tiết về đối tượng này được cung cấp trong phần Biểu thị 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 Các 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_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialComponentTypeEXT;
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 cung cấp: một số loại yêu cầu phải bật các tiện ích bổ sung tại thời điểm tạo phiên bản, như được ghi lại.
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 một lưới 3D cho 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 một lưới 2D cho 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 một đ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, mã nhận dạng và vị trí của điểm đánh dấu. 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 vào)
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 (Do tiện ích XR_EXT_spatial_object_tracking thêm vào)
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 điểm 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 duy trì 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
Một 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 vào)
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT
Thành phần cung cấp các vectơ 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 (Do tiện ích XR_EXT_spatial_mesh_tracking thêm vào)
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT
Thành phần cung cấp nhãn ngữ nghĩa cho mỗi đỉnh 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à 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 truy cập 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 thực thể của thực thể bao hàm thực thể được đí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 một 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 vật liệu của 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 trạng thái trống của một 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 chỗ trên thực thể được đí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
Một 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 một hình học cảnh đườ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)
Chức năng không gian và cách thiết lập
Các chức năng không gian xác định khả năng của thời gian chạy để khám phá các thực thể có một tập hợp các thành phần được đảm bảo trên đó. Các ứng dụng cho phép các thành phần của một khả 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 đã 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 khả năng nhất định là "nhãn ngữ nghĩa", thì có nghĩa là ứng dụng có thể bật nhãn ngữ nghĩa thông qua cấu hình cho khả 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;
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
Có khả năng phát hiện và theo dõi mã QR. (Do tiện ích XR_EXT_spatial_marker_tracking thêm vào)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT
Có khả năng phát hiện và theo dõi mã QR siêu nhỏ. (Do tiện ích XR_EXT_spatial_marker_tracking thêm vào)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT
Có 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 vào)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT
Có khả năng phát hiện và theo dõi AprilTag. (Do tiện ích XR_EXT_spatial_marker_tracking thêm vào)
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 chiếu phẳng. (Do tiện ích XR_EXT_spatial_image_tracking thêm vào)
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 vào)
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
Truyền tia dựa trên bộ nhớ đệ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 một 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 của 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 học cảnh quan đường phố (Do tiện ích XR_ANDROIDX2_geospatial_streetscape thêm vào)
Hàm xrEnumerateSpatialCapabilitiesEXT được xác định 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 handle 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ố kích thước 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 .
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 đối tượ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ị XrSpatialCapabilityEXT củacapabilityCapacityInput
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 xác định như sau:
XrResult xrEnumerateSpatialCapabilityComponentTypesEXT(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
XrSpatialCapabilityComponentTypesEXT* capabilityComponents);
Nội dung mô tả về tham số
instancelà một handle cho XrInstance .systemIdlàXrSystemIdmà 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à một con trỏ đến XrSpatialCapabilityComponentTypesEXT , đây là một cấu trúc đầu vào/đầu ra mà trong đó một 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à khả năng đã cho cung cấp trên các thực thể của khả năng đó trong hệ thống như đã định cấu hình.
Ứng dụng có thể dùng các loại thành phần được liệt kê trong XrSpatialCapabilityComponentTypesEXT :: componentTypes để hiểu toàn bộ các thành phần mà systemId hỗ trợ cho capability và có thể dùng danh sách này để xác định cấu hình hợp lệ cho capability khi tạo XrSpatialContextEXT cho thành phần đó.
Thời gian chạy phải trả về XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT nếu capability không được xrEnumerateSpatialCapabilitiesEXT liệt kê .
Thời gian chạy không được liệt kê các loại thành phần không gian mà tiện ích của thành phần đó không được bật cho instance .
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 xrEnumerateSpatialCapabilityComponentTypesEXT -
instancephải là một đối tượng XrInstance hợp lệ -
capabilityphải là 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 xác định như sau:
typedef struct XrSpatialCapabilityComponentTypesEXT {
XrStructureType type;
void* next;
uint32_t componentTypeCapacityInput;
uint32_t componentTypeCountOutput;
XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialCapabilityComponentTypesEXT;
Nội dung mô tả thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con 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ố kích thước 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.
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à con trỏ đến một mảng gồm các giá trịcomponentTypeCapacityInputXrSpatialComponentTypeEXT
Các 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 thời gian chạy tính toán dữ liệu thành phần. Những phương diện tham số hoá/khả năng định cấu hình này được gọi là các tính năng. Ví dụ: đối với khả năng theo dõi hình ảnh, một 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ể được liên kết, chẳng hạn như 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 khả 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 khả năng cho phép ứng dụng chỉ định kích thước cho các đ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 các đ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 tập hợp con 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 vào)
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 phải có cấu trúc cấu hình trong quá trình tạo bối cảnh không gian. (Do tiện ích XR_ANDROID_spatial_discovery_bounds thêm vào)
XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID
Thời gian chạy hỗ trợ bộ lọc XrSpatialBoundsBoxfANDROID cho XrSpatialDiscoverySnapshotCreateInfoEXT; Điều này không yêu cầu phải có cấu trúc cấu hình trong quá trình tạo bối cảnh không gian. (Do tiện ích XR_ANDROID_spatial_discovery_bounds thêm vào)
XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID
Thời gian chạy hỗ trợ bộ lọc XrSpatialBoundsFrustumfANDROID cho XrSpatialDiscoverySnapshotCreateInfoEXT; Điều này không yêu cầu phải có cấu trúc cấu hình trong quá trình tạo bối cảnh không gian. (Do tiện ích XR_ANDROID_spatial_discovery_bounds thêm vào)
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXT
Thời gian chạy hỗ trợ tự động suy luận kích thước thực 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 (Do tiện ích XR_EXT_spatial_image_tracking thêm vào)
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 vào)
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_FIXED_SIZE_IMAGES_EXT
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 về khả năng theo dõi một 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 vào)
Hàm xrEnumerateSpatialCapabilityFeaturesEXT được xác định 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 handle cho XrInstance .systemIdlàXrSystemIdmà các tính năng về khả 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ố kích thước 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 sẽ 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 những khả năng có các tính năng được hiển thị, ứng dụng sẽ chọn (các) tính năng cần bật và cung cấp cấu trúc cấu hình tương ứng trong chuỗi cấu trúc cấu hình khả năng tiếp theo trong XrSpatialContextCreateInfoEXT :: capabilityConfigs .
Nếu capability không phải là một khả 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ả năng không gian mà tiện ích của tính năng đó không được bật cho instance .
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 xrEnumerateSpatialCapabilityFeaturesEXT -
instancephải là một đối tượng XrInstance hợp lệ -
capabilityphải là 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 gồm các giá trị XrSpatialCapabilityFeatureEXT củacapabilityFeatureCapacityInput
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
Ngữ cảnh không gian
Tạo bối cảnh không gian
XR_DEFINE_HANDLE(XrSpatialContextEXT)
Xử lý 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ể dùng mã nhận dạng này để khám phá và cập nhật các thực thể không gian bằng cách sử dụng các hàm khác trong tiện ích này.
Hàm xrCreateSpatialContextAsyncEXT được xác định như sau:
XrResult xrCreateSpatialContextAsyncEXT(
XrSession session,
const XrSpatialContextCreateInfoEXT* createInfo,
XrFutureEXT* future);
Nội dung mô tả về tham số
sessionlà một XrSession mà trong đó ngữ cảnh không gian sẽ hoạt động.createInfolà XrSpatialContextCreateInfoEXT dùng để chỉ định các tham số ngữ cảnh không gian.futurelà một con trỏ đếnXrFutureEXT.
Ứng dụng có thể tạo một đối tượng XrSpatialContextEXT bằng cách:
- Cung cấp các cấu trúc phái sinh XrSpatialCapabilityConfigurationBaseHeaderEXT trong XrSpatialContextCreateInfoEXT ::
capabilityConfigsđể bật các khả năng và bật các thành phần cho khả năng đó. - Định cấu hình chính các chức năng bằng các 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 tay cầm ngữ 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 xrEnumerateSpatialCapabilitiesEXT không liệt kê bất kỳ khả năng nào trong mảng XrSpatialContextCreateInfoEXT :: capabilityConfigs .
Thời gian chạy phải trả về XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT nếu có XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponentCount trong XrSpatialContextCreateInfoEXT :: capabilityConfigs là 0. Cấu hình khả 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 khả năng đó.
Thời gian chạy phải trả về XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT nếu mọi loại thành phần đượ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 khả 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 thời gian chạy hỗ trợ khả 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 cầm ngữ cảnh không gian có chứa khả 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 dài, thì các lệnh gọi đến xrCreateSpatialDiscoverySnapshotAsyncEXT có thể dẫn đến một ảnh chụp nhanh trống. Ứng dụng có thể đợi XrEventDataSpatialDiscoveryRecommendedEXT trước khi 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 những 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 ra một XrFutureEXT tương ứng , có thể 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 thao tác không đồng bộ hay không. Hàm hoàn tất tương ứng là xrCreateSpatialContextCompleteEXT , có thể dùng khi một hàm trong tương lai từ hàm này ở trạng thái READY, với các đầu ra do hàm đó điền vào cấu trúc hoàn tất XrCreateSpatialContextCompletionEXT .
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 xrCreateSpatialContextAsyncEXT -
sessionphải là một đối tượng XrSession hợp lệ -
createInfophải là con trỏ đến một cấu trúc XrSpatialContextCreateInfoEXT hợp lệ -
futurephải là 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_FAILURE
Cấu trúc XrSpatialContextCreateInfoEXT được xác định như sau:
typedef struct XrSpatialContextCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t capabilityConfigCount;
const XrSpatialCapabilityConfigurationBaseHeaderEXT* const* capabilityConfigs;
} XrSpatialContextCreateInfoEXT;
Nội dung mô tả thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con 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 đối tượng XrSpatialContextEXT.
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 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à con trỏ đến một mảng gồmcapabilityConfigCountcấu trúc hợp lệ dựa trên XrSpatialCapabilityConfigurationBaseHeaderEXT. Xem thêm: XrSpatialCapabilityConfigurationAnchorEXT , 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 xác định 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 mà thay vào đó, 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ả thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con 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 xrEnumerateSpatialCapabilitiesEXT liệt kê . 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 .
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à giá trị XrSpatialCapabilityEXT hợp lệ -
enabledComponentsphải là 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 xác định 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ỷ.
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 xrCreateSpatialContextCompleteEXT -
sessionphải là một đối tượ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 xác định như sau:
typedef struct XrCreateSpatialContextCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialContextEXT spatialContext;
} XrCreateSpatialContextCompletionEXT;
Nội dung mô tả thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con 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 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ì trạng thái này sẽ chỉ duy trì 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 đến trước.
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à giá trị XrResult hợp lệ - Nếu
spatialContextkhông phải là XR_NULL_HANDLE , thìspatialContextphải là một đối tượng XrSpatialContextEXT hợp lệ
Hủy bỏ ngữ cảnh không gian
Hàm xrDestroySpatialContextEXT được xác định như sau:
XrResult xrDestroySpatialContextEXT(
XrSpatialContextEXT spatialContext);
Nội dung mô tả về tham số
spatialContextlà một XrSpatialContextEXT do xrCreateSpatialContextAsyncEXT tạo trước đó .
Ứng dụng có thể gọi hàm xrDestroySpatialContextEXT để giải phóng đối tượng spatialContext và các tài nguyên cơ bản khi hoàn tất các tác 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ác chức năng không gian giống 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.
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 xrDestroySpatialContextEXT -
spatialContextphải là một đối tượng XrSpatialContextEXT hợp lệ
Độ an toàn cho luồng
- Quyền truy cập vào
spatialContextvà mọi đối tượng 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 có hiệu lực đối với XrSpatialContextEXT mà trong đó XrSpatialEntityIdEXT được phát hiện và thời gian chạy không được 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 dùng lại cùng một XrSpatialEntityIdEXT trên nhiều XrSpatialContextEXT trong cùng một XrSession, bất kể XrSpatialEntityIdEXT đó đại diện cho cùng một thực thể hay nhiều thực thể.
#define XR_NULL_SPATIAL_ENTITY_ID_EXT 0
XR_NULL_SPATIAL_ENTITY_ID_EXT là một giá trị dành riêng, biểu thị một XrSpatialEntityIdEXT không hợp lệ . Bạn có thể truyền và trả về giá trị này từ các hàm API chỉ khi được cho phép cụ thể.
Xử lý thực thể không gian
XR_DEFINE_HANDLE(XrSpatialEntityEXT)
Xử lý XrSpatialEntityEXT đại diện cho một thực thể không gian. Một ứng dụng có thể tạo một đối tượng như vậy để thể hiện sự quan tâm của mình đối với một thực thể cụ thể trong thời gian chạy.
Tạo Spatial Entity Handle từ mã nhận dạng
Hàm xrCreateSpatialEntityFromIdEXT được xác định 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à một con trỏ đến cấu trúc XrSpatialEntityFromIdCreateInfoEXT.spatialEntitylà giá trị nhận dạng XrSpatialEntityEXT được trả về.
Ứng dụng có thể dùng xrCreateSpatialEntityFromIdEXT để tạo một giá trị nhận dạng XrSpatialEntityEXT. Đây là một giá trị tham 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 .
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 đối tượng XrSpatialContextEXT hợp lệ -
createInfophải là con trỏ đến một cấu trúc XrSpatialEntityFromIdCreateInfoEXT hợp lệ -
spatialEntityphải là một con trỏ đến một đối tượng 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 xác định như sau:
typedef struct XrSpatialEntityFromIdCreateInfoEXT {
XrStructureType type;
const void* next;
XrSpatialEntityIdEXT entityId;
} XrSpatialEntityFromIdCreateInfoEXT;
Nội dung mô tả thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con 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 một đối tượng xử lý.
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ỷ Spatial Entity Handle
Hàm xrDestroySpatialEntityEXT được xác định như sau:
XrResult xrDestroySpatialEntityEXT(
XrSpatialEntityEXT spatialEntity);
Nội dung mô tả về tham số
spatialEntitylà một đối tượng xử lý cho XrSpatialEntityEXT do một hàm tạo trước đó, chẳng hạn như xrCreateSpatialEntityFromIdEXT .
Ứng dụng có thể sử dụng xrDestroySpatialEntityEXT để giải phóng giá trị nhận dạng spatialEntity khi không còn quan tâm đến thực thể mà giá trị nhận dạng này tham chiếu nữa.
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 xrDestroySpatialEntityEXT -
spatialEntityphải là một đối tượng XrSpatialEntityEXT hợp lệ
Độ an toàn cho luồng
- Quyền truy cập vào
spatialEntityvà mọi đối tượng 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. Xử lý XrSpatialSnapshotEXT đại diện cho dữ liệu bất biến của các thực thể không gian đã phát hiện hoặc cập nhật và một tập hợp con 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 cảnh nhất quán về các thực thể và dữ liệu thành phần của chúng. Sau khi được tạo, dữ liệu của ảnh chụp nhanh phải giữ nguyên trong thời gian ảnh chụp nhanh còn hiệu lực.
Ứng dụng có thể tạo bao nhiêu ả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 hủy bỏ ảnh chụp nhanh khi không còn cần đến.
Tạo ảnh chụp nhanh dữ liệu khám phá
Hàm xrCreateSpatialDiscoverySnapshotAsyncEXT được xác định 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à một 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 cách sử dụng xrCreateSpatialDiscoverySnapshotAsyncEXT .
Hàm này bắt đầu một thao tác không đồng bộ và tạo ra một XrFutureEXT tương ứng , có thể 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 thao tác không đồng bộ hay không. Hàm hoàn tất tương ứng là xrCreateSpatialDiscoverySnapshotCompleteEXT , có thể dùng khi một hàm trong tương lai từ hàm này ở trạng thái READY, với các đầu ra do hàm đó điền vào cấu trúc hoàn tất 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 quá trình tạo ảnh chụp 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 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 các thực thể và thành phần mà thời gian chạy phải đưa dữ liệu vào ảnh chụp nhanh. Nếu ứng dụng cung cấp một 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 phải chỉ bao gồm các thực thể không gian trong ả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 các 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 đã bật của những chức năng được định cấu hình cho spatialContext .
Nếu XrEventDataReferenceSpaceChangePending được xếp 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 XrSpatialSnapshotEXT không có thực thể hoặc đặt XrSpatialEntityTrackingStateEXT của các thực thể không còn đị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 .
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 xrCreateSpatialDiscoverySnapshotAsyncEXT -
spatialContextphải là một đối tượng XrSpatialContextEXT hợp lệ -
createInfophải là con trỏ đến một cấu trúc XrSpatialDiscoverySnapshotCreateInfoEXT hợp lệ -
futurephải là 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 xác định như sau:
typedef struct XrSpatialDiscoverySnapshotCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialDiscoverySnapshotCreateInfoEXT;
Nội dung mô tả thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con 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 đối tượng XrSpatialSnapshotEXT khi khám phá các thực thể không gian.
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 , 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ồmcomponentTypeCountgiá trị XrSpatialComponentTypeEXT hợp lệ
Hàm xrCreateSpatialDiscoverySnapshotCompleteEXT được xác định 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à một con trỏ đến XrCreateSpatialDiscoverySnapshotCompletionInfoEXT. Con trỏ này 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ỷ.
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 xrCreateSpatialDiscoverySnapshotCompleteEXT -
spatialContextphải là một đối tượng XrSpatialContextEXT hợp lệ -
createSnapshotCompletionInfophải là con trỏ đến một 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 xác định như sau:
typedef struct XrCreateSpatialDiscoverySnapshotCompletionInfoEXT {
XrStructureType type;
const void* next;
XrSpace baseSpace;
XrTime time;
XrFutureEXT future;
} XrCreateSpatialDiscoverySnapshotCompletionInfoEXT;
Nội dung mô tả thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc.baseSpacelà XrSpace, nơi chứa tất cả vị trí của XrSpatialSnapshotEXT khám phá.timelàXrTimemà tất cả vị trí của XrSpatialSnapshotEXT khám phá sẽ được đặt.futurelàXrFutureEXTnhận được từ xrCreateSpatialDiscoverySnapshotAsyncEXT
Các 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ị bằng baseSpace , nằm ở time .
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 đối tượng XrSpace hợp lệ
Cấu trúc XrCreateSpatialDiscoverySnapshotCompletionEXT được xác định như sau:
typedef struct XrCreateSpatialDiscoverySnapshotCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialSnapshotEXT snapshot;
} XrCreateSpatialDiscoverySnapshotCompletionEXT;
Nội dung mô tả thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con 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 về việc khám phá không gian.snapshotlà một XrSpatialSnapshotEXT mà bạn có thể dùng để truy vấn dữ liệu thành phần của các thực thể không gian đã 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
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à giá trị XrResult hợp lệ - Nếu
snapshotkhông phải là XR_NULL_HANDLE , thìsnapshotphải là một đối tượng XrSpatialSnapshotEXT hợp lệ
Sự kiện đề xuất khám phá
Cấu trúc XrEventDataSpatialDiscoveryRecommendedEXT được xác định như sau:
typedef struct XrEventDataSpatialDiscoveryRecommendedEXT {
XrStructureType type;
const void* next;
XrSpatialContextEXT spatialContext;
} XrEventDataSpatialDiscoveryRecommendedEXT;
Nội dung mô tả thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc.spatialContextlà XrSpatialContextEXT mà thời gian chạy đang đề 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 gọi quá nhiều lần đế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ì các ảnh chụp nhanh kết quả có thể chứa cùng một thực thể và do đó, việc tạo ảnh chụp nhanh và truy vấn dữ liệu sẽ lãng phí.
Việc chờ sự kiện này để tạo một ảnh chụp nhanh khám phá mới đảm bảo rằng ứ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 và giúp tránh nguy cơ sử dụng quá nhiều tài nguyên hệ thống, cũng như bị điều tiết do chính sách về nguồn hoặc nhiệt của thiết bị. Điều này cũng giúp tạo 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 ngay lập tức 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ỉ xếp hàng sự kiện đề xuất khám phá một lần cho mỗi XrSpatialContextEXT).
Thời gian chạy không được xếp hàng sự kiện này để thông báo cho ứng dụng về những 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ể dùng xrCreateSpatialUpdateSnapshotEXT để theo dõi các bản cập nhật dữ liệu thành phần cho những thực thể không gian mà ứng dụng quan tâm.
Thời gian chạy có thể xếp hàng một sự kiện đề xuất khám phá mà không cần đợi ứng dụng gọi trước xrCreateSpatialDiscoverySnapshotAsyncEXT . Ví dụ: thời gian chạy có thể dựa trên quyết định xếp hàng sự kiện đề xuất khám phá theo cấu hình của XrSpatialContextEXT, sự hiểu biết của chính nó 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á phù 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 tồn tại của XrSpatialContextEXT đó .
Thời gian chạy không được xếp hàng sự kiện này 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 xếp hàng thêm bất kỳ sự kiện đề xuất khám phá nào cho ngữ cảnh không gian đó cũng như không trả về bất kỳ sự kiện nào như vậy cho ngữ cảnh đó từ xrPollEvent .
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
Truy vấn dữ liệu thành phần
Hàm xrQuerySpatialComponentDataEXT được xác định 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ỏ đến cấu trúc XrSpatialComponentDataQueryConditionEXT.queryResultlà một con trỏ đến 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 một cấu trúc danh sách vào XrSpatialComponentDataQueryResultEXT :: next tương ứng với từng 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ỏ các thành phần có trong XrSpatialComponentDataQueryConditionEXT :: componentTypes . Ứng dụng có thể chọn bỏ qua hoàn toàn các 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à một lỗi.
Nếu XrEventDataReferenceSpaceChangePending được xếp 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 chỉ điền XrSpatialComponentDataQueryResultEXT :: entityIds bằng 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 sẵ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 những đ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 chỉ điền XrSpatialComponentDataQueryResultEXT ::entityIds bằng những 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ác cấu trúc danh sách theo cùng một thứ tự như 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ác cấu trúc danh sách được đính kèm vào XrSpatialComponentDataQueryResultEXT .
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 đối tượng XrSpatialSnapshotEXT hợp lệ -
queryConditionphải là con trỏ đến một 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 có 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 với 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ề cho ứng dụng và ứng dụng có thể đính kèm một mảng XrSpatialBounded2DDataEXT trong cấu trúc XrSpatialComponentBounded2DListEXT vào chuỗi XrSpatialComponentDataQueryResultEXT tiếp theo để 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 thể...
Dữ liệu cho entityId #2
Dữ liệu cho thực thể...
Dữ liệu cho entityId #5
Dữ liệu cho thực thể...
entityIds
entityIds
tiếp theo
tiếp theo
XrSpatialComponent DataQueryResultEXT
XrSpatialComponent Dat...
bounds
bounds
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ề cho ứng dụng và ứng dụng có thể đính kèm các mảng XrBoxf và XrSpatialMeshDataEXT trong XrSpatialComponentBounded3DListEXT và XrSpatialComponentMesh3DListEXT tương ứng với chuỗi XrSpatialComponentDataQueryResultEXT tiếp theo để lấy dữ liệu thành phần.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
3
3
4
4
Bounded3D
Bounded3D
Dữ liệu cho entityId số 3
Dữ liệu cho thực thể...
Dữ liệu cho entityId #4
Dữ liệu cho thực thể...
Mesh3D
Mesh3D
Dữ liệu cho entityId số 3
Dữ liệu cho thực thể...
Dữ liệu cho entityId #4
Dữ liệu cho thực thể...
entityIds
entityIds
tiếp theo
tiếp theo
XrSpatialComponent DataQueryResultEXT
XrSpatialComponent Da...
bounds
bounds
tiếp theo
tiếp theo
XrSpatialComponent Bounded3DListEXT
XrSpatialComponent Bo...
XrSpatialComponent Mesh3DListEXT
XrSpatialComponent Me...
lưới
meshes Text is not SVG - cannot display
Hình 22. Ví dụ về kết quả truy vấn
Cấu trúc XrSpatialComponentDataQueryConditionEXT được xác định như sau:
typedef struct XrSpatialComponentDataQueryConditionEXT {
XrStructureType type;
const void* next;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialComponentDataQueryConditionEXT;
Nội dung mô tả thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con 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.
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 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ồmcomponentTypeCountgiá trị XrSpatialComponentTypeEXT hợp lệ
Cấu trúc XrSpatialComponentDataQueryResultEXT được xác định 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ả thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con 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 bắt buộc 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 cần thiết 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ố kích thước 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.
Một ứng dụng có thể dùng entityIds với xrCreateSpatialEntityFromIdEXT để tạo các đối tượng XrSpatialEntityEXT cho những 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 đối tượng XrSpatialEntityEXT này với xrCreateSpatialUpdateSnapshotEXT để tạo một ảnh chụp nhanh cập nhật có dữ liệu mới nhất mà thời gian chạy biết về các thành phần cho những thực thể được cung cấp.
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 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 , 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 gồm các 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ể có:
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ể đó.
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT
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 thực thể này trong tương lai.
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT
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 việc 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ề thời điểm mà thời gian chạy có thể thực hiện việc này (nhưng không giới hạn ở) là 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ự cách ly 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à không bao giờ khôi phục hoặc tiếp tục theo dõi được. Ví dụ về trường hợp như vậy là khi thiết bị mất khả 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ị. Do đó, thiết bị sẽ coi các thực thể được phát hiện trong phiên theo dõi này là các 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 bao giờ đượ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 các 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 các 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 xác định như sau:
typedef struct XrSpatialBufferEXT {
XrSpatialBufferIdEXT bufferId;
XrSpatialBufferTypeEXT bufferType;
} XrSpatialBufferEXT;
Nội dung mô tả thành viên
bufferIdXrSpatialBufferIdEXTcủa dữ liệu bộ đệ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 với kích thước thay đổi và do đó, bạn cần sử dụng cấu trúc hai lệnh gọi để truy xuất dữ liệu của các thành phần đó. 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 một XrSpatialBufferEXT cho mỗi vùng đệm có kích thước biến đổi 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 của thành phần này sang truy vấn dữ liệu của thành phần khác, ngay cả khi chuyển từ thông tin tổng quan nhanh này sang thông tin tổng quan nhanh khác. Một bufferId khác giữa các lệnh gọi truy vấn dữ liệu thành phần cho biết cho ứng dụng rằng dữ liệu cho thành phần đó có thể đã thay đổi.
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 XrSpatialBufferEXT -
bufferTypephải là 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 thay đổ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 vòng đời của XrSpatialSnapshotEXT chứa dữ liệu đó. 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 như một phần của ả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;
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ề các phần tử liệt kê
XR_SPATIAL_BUFFER_TYPE_STRING_EXT. Bạn có thể truyềnXrSpatialBufferIdEXTcan đến xrGetSpatialBufferStringEXT để truy xuất một vùng đệm chuỗi.XR_SPATIAL_BUFFER_TYPE_UINT8_EXT.XrSpatialBufferIdEXTcó thể được truyền đến xrGetSpatialBufferUint8EXT để truy xuất một vùng đệmuint8_t.XR_SPATIAL_BUFFER_TYPE_UINT16_EXT.XrSpatialBufferIdEXTcó thể được truyền đến xrGetSpatialBufferUint16EXT để truy xuất một vùng đệmuint16_t.XR_SPATIAL_BUFFER_TYPE_UINT32_EXT.XrSpatialBufferIdEXTcó thể được truyền đến xrGetSpatialBufferUint32EXT để truy xuất vùng đệmuint32_t.XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT. Bạn có thể truyềnXrSpatialBufferIdEXTđến xrGetSpatialBufferFloatEXT để truy xuất mộ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 một vùng đệm XrVector3f.
Hàm xrGetSpatialBufferStringEXT được xác định 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 giá trị nhận dạng 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ố lượng 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ố kích thước 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ể nhận 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.
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 xrGetSpatialBufferStringEXT -
snapshotphải là một đối tượng XrSpatialSnapshotEXT hợp lệ -
infophải là con trỏ đến một 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ịbufferCapacityInputchar
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 xác định 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 giá trị nhận dạng 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ố lượng 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ố kích thước 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ể nhận 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 .
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 xrGetSpatialBufferUint8EXT -
snapshotphải là một đối tượng XrSpatialSnapshotEXT hợp lệ -
infophải là con trỏ đến một 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 xác định 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 giá trị nhận dạng 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ố lượng phần tử trong mảngbufferhoặc dung lượng bắt buộc 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ố kích thước 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ể nhận 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 .
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 đối tượng XrSpatialSnapshotEXT hợp lệ -
infophải là con trỏ đến một 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 xác định 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 giá trị nhận dạng 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ố lượng 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ố kích thước 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ể nhận 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 .
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 đối tượng XrSpatialSnapshotEXT hợp lệ -
infophải là con trỏ đến một 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 xác định 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 giá trị nhận dạng 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ố lượng 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ố kích thước 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 .
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 xrGetSpatialBufferFloatEXT -
snapshotphải là một đối tượng XrSpatialSnapshotEXT hợp lệ -
infophải là con trỏ đến một 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 xác định 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 giá trị nhận dạng 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ố lượng 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 XrVector2f . Giá trị này có thể làNULLnếubufferCapacityInputlà 0.- Hãy xem phần Tham số kích thước 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ể nhận 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 .
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 xrGetSpatialBufferVector2fEXT -
snapshotphải là một đối tượng XrSpatialSnapshotEXT hợp lệ -
infophải là con trỏ đến một 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ồmbufferCapacityInputcấu trúc XrVector2f
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 xác định 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 giá trị nhận dạng 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ố lượng 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 XrVector3f . Giá trị này có thể làNULLnếubufferCapacityInputlà 0.- Hãy xem phần Tham số kích thước 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ể nhận 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 .
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 đối tượng XrSpatialSnapshotEXT hợp lệ -
infophải là con trỏ đến một 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ồmbufferCapacityInputcấu trúc XrVector3f
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 xác định như sau:
typedef struct XrSpatialBufferGetInfoEXT {
XrStructureType type;
const void* next;
XrSpatialBufferIdEXT bufferId;
} XrSpatialBufferGetInfoEXT;
Nội dung mô tả thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con 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.
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 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 XrSpatialBufferIdEXT không hợp lệ . Bạn có thể truyền và trả về giá trị này từ các hàm API chỉ khi được cho phép cụ thể.
Tạo ảnh chụp nhanh về thông tin cập nhật
Hàm xrCreateSpatialUpdateSnapshotEXT được xác định 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à con trỏ đến XrSpatialUpdateSnapshotCreateInfoEXT .snapshotlà con trỏ đến kết quả XrSpatialSnapshotEXT .
Ứng dụng có thể dùng xrCreateSpatialUpdateSnapshotEXT để tạo một ảnh chụp nhanh và nhận dữ liệu thành phần mới nhất cho các thực thể cụ thể theo thời gian chạy. Các ứng dụng có thể cung cấp các đối tượng XrSpatialEntityEXT và các loại thành phần mà chú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 mà dữ liệu phải được đưa vào ảnh chụp nhanh. Nếu ứng dụng cung cấp một 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 bao gồm các thực thể không gian trong ả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 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 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 đã 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 bao nhiêu ả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 hủy bỏ ảnh chụp nhanh khi không còn cần đến.
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 xrCreateSpatialUpdateSnapshotEXT -
spatialContextphải là một đối tượng XrSpatialContextEXT hợp lệ -
createInfophải là con trỏ đến một cấu trúc XrSpatialUpdateSnapshotCreateInfoEXT hợp lệ -
snapshotphải là một con trỏ đến một đối tượng 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 xác định 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ả thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con 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 bao gồm dữ liệu trong thông tin tổng quan nhanh.baseSpacelà XrSpace mà theo đó, tất cả vị trí của XrSpatialSnapshotEXT sẽ được đặt.timelàXrTimemà tất cả các vị trí của bản cập nhật XrSpatialSnapshotEXT sẽ được đặt.
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à con trỏ đến một mảng gồmentityCountgiá trị nhận dạng XrSpatialEntityEXT hợp lệ - Nếu
componentTypeCountkhông phải là0, thìcomponentTypesphải là con trỏ đến một mảng gồmcomponentTypeCountgiá trị XrSpatialComponentTypeEXT hợp lệ -
baseSpacephải là một đối tượng XrSpace hợp lệ - Tham số
entityCountphải lớn hơn0 - Cả
baseSpacevà các phần tử củaentitiesphả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 xác định 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 để hủy bỏ handle XrSpatialSnapshotEXT và các tài nguyên liên kết với handle đó.
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 xrDestroySpatialSnapshotEXT -
snapshotphải là một đối tượng XrSpatialSnapshotEXT hợp lệ
Độ an toàn cho luồng
- Quyền truy cập vào
snapshotvà mọi đối tượng 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 chung
2D có đường viền
Dữ liệu thành phần
Cấu trúc XrSpatialBounded2DDataEXT được xác định như sau:
typedef struct XrSpatialBounded2DDataEXT {
XrPosef center;
XrExtent2Df extents;
} XrSpatialBounded2DDataEXT;
Nội dung mô tả 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ó ranh giới.extentslà phạm vi của thành phần 2D có ranh giới dọc theo trục x (extents.width), trục y (extents.height), được đặt ở giữacenter.
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}, hướng xoay {0, 0, 0, 1} (không xoay) và kích thước {1, 1} đề cập đến một mặt phẳng có kích thước 1 mét x 1 mét, được đặt ở tâm tại {0, 0, 0} với vectơ pháp tuyến của mặt trước hướng về hướng +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 xung quanh trục +X.
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 XrSpatialBounded2DDataEXT
Cấu trúc danh sách thành phần để truy vấn dữ liệu
Cấu trúc XrSpatialComponentBounded2DListEXT được xác định như sau:
typedef struct XrSpatialComponentBounded2DListEXT {
XrStructureType type;
void* next;
uint32_t boundCount;
XrSpatialBounded2DDataEXT* bounds;
} XrSpatialComponentBounded2DListEXT;
Nội dung mô tả thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con 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 bằng 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 .
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 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à con trỏ đến một mảng gồm các cấu trúcboundCountXrSpatialBounded2DDataEXT - 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ố khả 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 để được đưa vào chuỗi tiếp theo của XrSpatialCapabilityConfigurationBaseHeaderEXT .
3D có ranh giới
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ả thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con 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 bằng 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 .
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ỏ đế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ố khả năng, thì ứng dụng có thể bật khả 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 để được đưa vào chuỗi tiếp theo của XrSpatialCapabilityConfigurationBaseHeaderEXT .
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 xác định như sau:
typedef struct XrSpatialComponentParentListEXT {
XrStructureType type;
void* next;
uint32_t parentCount;
XrSpatialEntityIdEXT* parents;
} XrSpatialComponentParentListEXT;
Nội dung mô tả thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con 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 bằng 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 .
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 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ỏ đến một mảng gồm các giá trịparentCountXrSpatialEntityIdEXT - 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ố khả năng, thì ứng dụng có thể bật khả 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 để được đưa vào chuỗi tiếp theo của XrSpatialCapabilityConfigurationBaseHeaderEXT .
Lưới 3D
Dữ liệu thành phần
Cấu trúc XrSpatialMeshDataEXT được xác định như sau:
typedef struct XrSpatialMeshDataEXT {
XrPosef origin;
XrSpatialBufferEXT vertexBuffer;
XrSpatialBufferEXT indexBuffer;
} XrSpatialMeshDataEXT;
Nội dung mô tả thành viên
originlà một XrPosef xác định nguồn gốc của lưới. Tất cả các đỉnh của lưới phải có liên quan đến nguồn 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 nằm trên đó. 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ỉ số tam giác, chỉ định chỉ số của các đỉnh lưới trongvertexBuffer. Bạn phải trả về chỉ mục tam giác theo chiều ngược chiều kim đồng hồ và 3 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 .
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 xác định như sau:
typedef struct XrSpatialComponentMesh3DListEXT {
XrStructureType type;
void* next;
uint32_t meshCount;
XrSpatialMeshDataEXT* meshes;
} XrSpatialComponentMesh3DListEXT;
Nội dung mô tả thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con 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 3D dạng lưới 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 bằng 0 và XR_SPATIAL_COMPONENT_TYPE_MESH_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 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 .
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 -
meshesmust là 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ố khả năng, thì ứng dụng có thể bật khả năng đó bằng cách đưa enum vào danh sách XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents của cấu trúc phái sinh XrSpatialCapabilityConfigurationBaseHeaderEXT của khả 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 để được đưa vào chuỗi tiếp theo của XrSpatialCapabilityConfigurationBaseHeaderEXT .
Bộ lọc trạng thái theo dõi
Cấu trúc XrSpatialFilterTrackingStateEXT được xác định như sau:
typedef struct XrSpatialFilterTrackingStateEXT {
XrStructureType type;
const void* next;
XrSpatialEntityTrackingStateEXT trackingState;
} XrSpatialFilterTrackingStateEXT;
Nội dung mô tả thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con 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 để giới hạn phạm vi truy vấn dữ liệu thành phần từ một ảnh chụp nhanh chỉ cho những thực thể có trạng thái theo dõi là trackingState .
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 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, một ứng dụng sẽ liệt kê các chức năng không gian của hệ thống bằng cách sử dụng xrEnumerateSpatialCapabilitiesEXT . Sau đó, ứng dụng 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ề những thành phần mà ứng dụng có thể bật và những 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 đối tượng XrSpatialContextEXT với các cấu hình khả năng không gian cụ thể, trong đó các cấu hình này cho phép và định cấu hình một khả năng cụ thể trong bối cảnh không gian, đồng thời cho phép và định cấu hình các thành phần cho những khả 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 mã nhận dạng 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 sẽ đọ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 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 có những 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 các đối tượng XrSpatialEntityEXT cho những 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 những thực thể thú vị như vậy 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 những thực thể đó.
Khám phá các thực thể không gian và dữ liệu thành phần truy vấn
Đoạn mã ví dụ sau đây minh hoạ cách khám phá các thực thể không gian cho truy vấn khả năng "Foo" 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));
Truy vấn dữ liệu bộ đệm
Đoạ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
Nếu một tiện ích đang xác định XrSpatialComponentTypeEXT mới, thì tiện ích đó sẽ 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 một 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 là biến 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 một XrSpatialBufferEXT cho từng dữ liệu có kích thước biến trong cấu trúc danh sách và phải chỉ định XrSpatialBufferTypeEXT cho từng vùng đệm. Sau đó, ứng dụng có thể truy vấn dữ liệu bộ đệ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 . Một ví dụ về cấu trúc như vậy là XrSpatialMeshDataEXT có trong 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 các bộ lọc bổ sung 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 một 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 ::
Các tiện ích có thể xác định các cấu trúc mở rộng XrSpatialDiscoverySnapshotCreateInfoEXT để cung cấp các bộ lọc bổ sung cho hoạt động khám phá. Bộ lọc để tạo ảnh chụp nhanh không được ảnh hưởng đến cấu hình của ngữ cảnh không gian, mà thay vào đó, được dùng để cung cấp gợi ý cho thời gian chạy về những thực thể và dữ liệu sẽ được đưa vào ảnh chụp nhanh theo dõi bằng cấu hình hiện tại của ngữ 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 ,
- nó cũng phải chỉ định danh sách XrSpatialComponentTypeEXT mà các thời gian chạy phải cung cấp trên các thực thể cho khả năng đó.
- nó 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ể dùng để bật tính năng này khi tạo XrSpatialContextEXT .
Tiện ích xác định XrSpatialCapabilityEXT mới phải 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ụ
Phần mở rộng xác định một 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 kiểu dữ liệu của bộ đệ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 bộ đệm.
Nguyên tắc về thiết kế và tiện ích của 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 nó đặt ra các quy tắc và nguyên tắc thiết kế cho mọi tiện ích xác định một thành phần như vậy. Trong văn bản sau, " nên " và " phải " sẽ hạn chế các tác giả của chức năng đó, thay vì hạn chế việc triển khai thời gian chạy hoặc một ứ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 thực hiện việc này bằng cách xác định một XrSpatialComponentTypeEXT mới cũng như một giá trị liệt kê mới với 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 phép liệt kê đạ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 trong tập hợp này. Tên của giá trị liệt kê này phải có chứa "UNCATEGORIZED", ví dụ:
XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT. Giá trị này cho biết cho các ứng dụng rằng thời gian chạy có nhận dạng thực thể này, nhưng có những tập hợp 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 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 đó, các nhãn được xác định trong tập hợp) tương ứng với loại thành phần đó.
- Các ứng dụng thể hiện mong muốn khám phá những 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
enabledComponentscủa XrSpatialCapabilityConfigurationBaseHeaderEXT :: cấu trúc cấu hình cho khả năng mà loại thành phần được liệt kê. - Có thể một thực thể không gian duy nhất có nhiều thành phần trên đó, mỗi thành phần cung cấp cho thực thể đó một nhãn từ bộ nhãn ngữ nghĩa riêng. Hãy xem xét ví dụ sau 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 cụ thể của ghế sofa IKEA. Trong trường hợp này, thực thể ghế sofa có cả 3 thành phần (nhãn từ cả 3 bộ nhãn ngữ nghĩa) trên đó, mỗi thành phần cung cấp một mức độ chi tiết khác nhau về thực thể. - Nếu một tiện ích đang xác định 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 XrSpatialCapabilityFeatureEXT cho phép các ứng dụng chỉ kích hoạt một tập hợp con của 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 khả năng, đóng vai trò là một gợi ý cho thời gian chạy để tối ưu hoá các 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 đối tượng như vậy được cung cấp bên dưới . - Các tiện ích không được thêm nhãn vào chế độ liệt kê 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 phần tử 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 phần tử trong tập hợp khác, ngoài các phần tử liệt kê mới được thêm. Quy cách của bộ nhãn ngữ nghĩa mới 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 đối tượ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ề tiện ích 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 xét ví dụ trên, trong đó một tiện ích xác định một phép 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ổ. Quy cách cho giá trị 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
Các loại châ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ể duy nhất 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 tuỳ thuộc vào thời gian chạy dựa trên khả năng theo dõi của chính thời gian chạy và cách thời gian chạy muốn biểu thị một thực thể được phát hiện. Quy cách này không quy định bất kỳ cách biểu diễn cụ thể nào của thực thể không gian, ngoại trừ các thành phần được đảm bảo của một khả năng nhất định để đặt 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ị chúng dưới dạng một thực thể duy nhất với các thành phần được đảm bảo của tất cả các chức năng đã giúp xác định thực thể đó. Ví dụ: các bảng có thể được phát hiện bằng cả khả năng theo dõi mặt phẳng và khả năng theo dõi đối tượng, trong đó khả 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à khả năng theo dõi đối tượng cung cấpXR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT. Một số thời gian chạy 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 nhóm thành phần được đảm bảo riêng, trong khi một số thời gian chạy có thể chỉ cung cấp 1 thực thể để biểu thị 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 thuộc một loại thành phần nhất định . 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 đối 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, ngày 12 tháng 4 năm 2024 (Nihav Jain, Google)
- Nội dung mô tả ban đầu của tiện ích