Streetscape Geometry API cung cấp hình dạng địa hình, tòa nhà hoặc các cấu trúc khác trong một cảnh. Hình dạng này có thể được dùng để che khuất, hiển thị hoặc đặt nội dung thực tế tăng cường (AR) thông qua API kiểm thử nhấn. Dữ liệu Hình học cảnh quan đường phố được lấy qua hình ảnh trong Chế độ xem đường phố của Google.
Thiết lập API Không gian địa lý
Để sử dụng Hình học cảnh đường phố, bạn cần phải thiết lập API Không gian địa lý trong dự án của mình. Làm theo hướng dẫn về cách Bật API không gian địa lý để thiết lập API không gian địa lý.
Bật Hình học phong cảnh đườ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 ArStreetscapeGeometry
ArStreetscapeGeometry
chứa thông tin về một toà nhà:
-
ArStreetscapeGeometry_getType()
Xác định StreetscapeGeometry là địa hình hoặc một toà nhà. -
ArStreetscapeGeometry_acquireMesh()
Lấy một đ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. Tất cả các điểm trongArMesh
sẽ được chuyển đổi bởiArStreetscapeGeometry_getMeshPose()
. -
ArStreetscapeGeometry_getQuality()
Cung cấp chất lượng của dữ liệu lưới. Mức độ chi tiết được mô tả trong tiêu chuẩn CityGML 2.0.
Toà nhà LOD 1
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_1
bao gồm phạm vi của toà nhà được nhô lên trên mặt phẳng. Chiều cao của toà nhà có thể không chính xác.
Toà nhà LOD 2
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2
sẽ có hình học độ trung thực cao hơn. Tường và mái lưới sẽ phù hợp hơn với hình dạng của toà nhà. 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ể bị chọc vào bên ngoài lưới.
Tìm hiểu ArMesh
ArMesh
là một lưới đa giác thể hiện bản dựng lại 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 vị trí nối với nhau 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 khuôn mặt.
Đính kèm nội dung thực tế tăng cường (AR) vào ArStreetscapeGeometry
Có hai cách để đính kèm nội dung thực tế tăng cường (AR) vào Hình học cảnh đường phố:
- Bật tính năng Độ sâu không gian địa lý và sử dụng tính năng Kiểm tra độ sâu. Đây là phương thức đề xuất và dễ dàng hơn.
- Sử dụng
ArTrackable_acquireNewAnchor()
để tạo một điểm neo ở một tư thế cụ thể được đính kèm vớiArStreetscapeGeometry
. Quảng cáo liên kết này sẽ kế thừa trạng thái theo dõi từArStreetscapeGeometry
gốc.
Thực hiện thử nghiệm nhấn với ArStreetscapeGeometry
Bạn có thể sử dụng ArFrame_hitTest
để kiểm tra nhanh theo Hình học cảnh đường phố. Nếu tìm thấy giao lộ, ArHitResult
chứa thông tin về tư thế về vị trí bị va chạm cũng như thông tin tham chiếu đến ArStreetscapeGeometry
nơi bị va chạm. Bạn có thể truyền Hình học cảnh đường phố này đến ArTrackable_acquireNewAnchor()
để tạo neo đi kèm.
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ý
Độ sâu không gian địa lý kết hợp Hình học cảnh đường phố với đầu vào cảm biến cục bộ để cải thiện dữ liệu về độ sâu. Khi bật Độ sâu không gian địa lý, hình ảnh độ sâu đầu ra và độ sâu thô được sửa đổi để bao gồm Hình học cảnh quan đường phố đã tạo điểm ảnh ngoài độ sâu quan sát được cục bộ. Điều này có thể cải thiện độ chính xác của các tư thế sử dụng tính năng Chiều sâu.