API Hình học cảnh đường phố cung cấp hình học của địa hình, toà nhà hoặc các cấu trúc khác trong một cảnh. Bạn có thể sử dụng hình học để che khuất, kết xuất hoặc đặt nội dung AR thông qua các API kiểm thử lượt nhấn. Dữ liệu Hình học cảnh quan đường phố được lấy thông qua hình ảnh của Chế độ xem đường phố của Google.
Thiết lập API không gian địa lý
Để sử dụng Streetscape Geometry, bạn cần thiết lập API không gian địa lý trong dự án. Làm theo hướng dẫn về Bật API không gian địa lý để thiết lập API không gian địa lý.
Bật Hình học cảnh quan đường phố
API Không gian địa lý thu thập dữ liệu Hình học cảnh quan đường phố khi ArGeospatialMode
được đặt thành ArGeospatialModeEnabled
và ArStreetscapeGeometryMode
được đặt thành ArStreetscapeGeometryModeEnabled
.
// Create a session config. ArConfig* ar_config = NULL; ArConfig_create(ar_session, &ar_config); // Enable the Geospatial API. ArConfig_setGeospatialMode(ar_session, ar_config, AR_GEOSPATIAL_MODE_ENABLED); CHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS); // Enable Streetscape Geometry. ArConfig_setStreetscapeGeometryMode(ar_session, ar_config, AR_STREETSCAPE_GEOMETRY_MODE_ENABLED); CHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS); // Release config resources. ArConfig_destroy(ar_config);
Nhận Hình học cảnh đường phố trong phiên ARCore
Sử dụngArSession_getAllTrackables()
và sử dụng AR_TRACKABLE_STREETSCAPE_GEOMETRY
để lọc kết quả.
ArTrackableList* trackable_list = NULL; ArTrackableList_create(ar_session, &trackable_list); ArSession_getAllTrackables(ar_session, AR_TRACKABLE_STREETSCAPE_GEOMETRY, trackable_list);
Tìm hiểu về ArStreetscapeGeometry
ArStreetscapeGeometry
chứa thông tin về một toà nhà:
-
ArStreetscapeGeometry_getType()
Xác định StreetscapeGeometry là địa hình hoặc toà nhà. -
ArStreetscapeGeometry_acquireMesh()
Nhận đa giácArMesh
tương ứng với địa hình hoặc toà nhà này. -
ArStreetscapeGeometry_getMeshPose()
Mô tả nguồn gốc của hình học. Tất cả các điểm trongArMesh
phải được biến đổi bằngArStreetscapeGeometry_getMeshPose()
. -
ArStreetscapeGeometry_getQuality()
Cho biết chất lượng của dữ liệu lưới. Các cấp độ chi tiết được mô tả trong tiêu chuẩn CityGML 2.0.
Xây dựng LOD 1
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_1
bao gồm các dấu vết xây dựng được đẩy lên trên đến một đỉnh phẳng. Chiều cao của tòa nhà có thể không chính xác.
Xây dựng LOD 2
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2
sẽ có hình học có độ trung thực cao hơn. Các bức tường và mái lưới sẽ khớp với hình dạng của tòa nhà hơn. Các đặc điểm nhỏ hơn như ống khói hoặc lỗ thông gió trên mái nhà vẫn có thể nhô ra ngoài lưới.
Tìm hiểu về ArMesh
ArMesh
là một lưới đa giác thể hiện quá trình tái tạo bề mặt của Hình học cảnh quan đường phố.
Mỗi ArMesh
bao gồm một vùng đệm đỉnh và vùng đệm chỉ mục:
ArMesh_getVertexListSize()
Truy xuất số đỉnh trong lưới này.ArMesh_getVertexList()
Lấy các vị trí được nối của các đỉnh lưới, theo toạ độ tương ứng vớiArStreetscapeGeometry_getMeshPose()
.ArMesh_getIndexListSize()
Truy xuất số lượng chỉ mục trong lưới này.ArMesh_getIndexList()
Lấy chỉ mục của các đỉnh tạo nên một mặt.
Đính kèm nội dung AR vào ArStreetscapeGeometry
Có hai cách để đính kèm nội dung AR vào Hình học cảnh đường phố:
- Bật Độ sâu không gian địa lý và sử dụng Kiểm thử lượt nhấn độ sâu. Đây là phương thức được đề xuất và dễ dàng hơn.
- Sử dụng
ArTrackable_acquireNewAnchor()
để tạo một neo tại một tư thế nhất định được đính kèm vàoArStreetscapeGeometry
. Mục liên kết này sẽ kế thừa trạng thái theo dõi từArStreetscapeGeometry
mẹ.
Thực hiện kiểm thử nhấn đối với ArStreetscapeGeometry
Bạn có thể dùng ArFrame_hitTest
để kiểm thử nhấn đối với Hình học cảnh quan đường phố. Nếu phát hiện thấy giao điểm, ArHitResult
sẽ chứa thông tin về tư thế tại vị trí nhấn cũng như tham chiếu đến ArStreetscapeGeometry
đã được nhấn. Bạn có thể truyền Hình học cảnh quan đường phố này đến ArTrackable_acquireNewAnchor()
để tạo một neo được đính kèm vào hình học đó.
ArHitResultList *hit_result_list = NULL; ArHitResult *hit_result = NULL; ArHitResultList_create(ar_session, &hit_result_list); ArHitResult_create(ar_session, &hit_result); ArFrame_hitTestRay(ar_session, ar_frame, origin, direction, hit_result_list); ArHitResultList_getItem(ar_session, hit_result_list, 0, hit_result); ArAnchor *out_anchor = NULL; ArStatus status = ArHitResult_acquireNewAnchor(ar_session, hit_result, &out_anchor); CHECK(status == AR_SUCCESS);
Bật độ sâu không gian địa lý
Chiều sâu không gian địa lý kết hợp Hình học cảnh đường phố với dữ liệu đầu vào của cảm biến cục bộ để nâng cao dữ liệu chiều sâu. Khi bạn bật Chiều sâu không gian địa lý, chiều sâu đầu ra và hình ảnh chiều sâu thô sẽ được sửa đổi để bao gồm cả Hình học cảnh đường phố được quét cùng với chiều sâu được quan sát cục bộ. Điều này có thể cải thiện độ chính xác của các tư thế bằng cách sử dụng thông tin Độ sâu.