在 Android NDK (C) 上使用您周遭的建築物和地形

Streetscape Geometry API 可提供場景中地形、建築物或其他結構物的幾何圖形。您可以透過命中測試 API 使用幾何圖形來遮蔽、算繪或放置 AR 內容。街景幾何圖形資料是透過 Google 街景服務圖像取得。

設定 Geospatial API

如要使用街景地形,您必須在專案中設定地理空間 API。按照「啟用 Geospatial API」一節中的操作說明設定 Geospatial API。

啟用街景幾何圖形

ArGeospatialMode 設為 ArGeospatialModeEnabled,而 ArStreetscapeGeometryMode 設為 ArStreetscapeGeometryModeEnabled 時,Geospatial API 會取得街景幾何圖形資料。

// 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);

在 ARCore 工作階段中取得街景幾何圖形

使用 ArSession_getAllTrackables()AR_TRACKABLE_STREETSCAPE_GEOMETRY 篩選結果。

ArTrackableList* trackable_list = NULL;
ArTrackableList_create(ar_session, &trackable_list);
ArSession_getAllTrackables(ar_session, AR_TRACKABLE_STREETSCAPE_GEOMETRY, trackable_list);

瞭解 ArStreetscapeGeometry

ArStreetscapeGeometry 包含建築物資訊:

建構 LOD 1

AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_1 包含建築物足跡,向上延伸至平頂。建築物高度可能不準確。

建構 LOD 2

AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2 會提供更高解析度的幾何圖形。網格牆和屋頂會更貼近建築物的形狀。煙囪或屋頂通風口等較小的建築物特徵可能仍會突出網格。

瞭解 ArMesh

ArMesh 是多邊形網格,代表街景幾何圖形的表面重建作業。每個 ArMesh 都包含頂點緩衝區和索引緩衝區:

將 AR 內容附加至 ArStreetscapeGeometry

將 AR 內容附加至街景地形的兩種方式如下:

針對 ArStreetscapeGeometry 執行命中測試

ArFrame_hitTest 可用於對街景幾何圖形進行命中測試。如果偵測到交集,ArHitResult 就會包含撞擊位置的姿勢資訊,以及撞擊的 ArStreetscapeGeometry 參照。這個街景幾何圖形可傳遞至 ArTrackable_acquireNewAnchor(),以建立連結至此的錨點。

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);

啟用地理空間景深

地理空間深度功能會結合街景幾何圖形和本機感應器輸入內容,以強化深度資料。啟用地理空間深度後,除了當地觀察到的深度,輸出深度和原始深度圖片也會修改為包含光柵化街景幾何圖形。這可能會提高使用深度資料的姿勢準確度。