Streetscape 幾何圖形 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
包含建築物的相關資訊:
-
ArStreetscapeGeometry_getType()
將 StreetscapeGeometry 指定為地形或建築物。 -
ArStreetscapeGeometry_acquireMesh()
取得與此地形或建築物相對應的多邊形ArMesh
。 -
ArStreetscapeGeometry_getMeshPose()
說明幾何圖形的起源。ArMesh
中的所有點都應由ArStreetscapeGeometry_getMeshPose()
轉換。 -
ArStreetscapeGeometry_getQuality()
提供網格資料品質。如要瞭解細節層級,請參閱 CityGML 2.0 標準。
建築物 LOD 1
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_1
包含向上延伸至平坦的建築物平面圖。建築物高度可能不準確。
建構 LOD 2
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2
的幾何圖形較高,網格的牆面和屋頂會更接近建築物的形狀。不過,某些小型功能 (例如煙囪或屋頂通風口) 仍可能在網格外發出。
瞭解 ArMesh
ArMesh
是多邊形網格,代表街景幾何圖形的表面重建作業。每個 ArMesh
都包含頂點緩衝區和索引緩衝區:
ArMesh_getVertexListSize()
擷取這個網格中的頂點數量。ArMesh_getVertexList()
取得網格頂點的連接位置,以相對於ArStreetscapeGeometry_getMeshPose()
的座標為準。ArMesh_getIndexListSize()
擷取這個網格中的索引數量。ArMesh_getIndexList()
取得構成表面的頂點索引。
將 AR 內容附加至 ArStreetscapeGeometry
有兩種方式可將 AR 內容附加至街景服務幾何圖形:
- 啟用地理空間深度,並使用深度命中測試。這是我們建議的簡單方法。
- 使用
ArTrackable_acquireNewAnchor()
在ArStreetscapeGeometry
附加的特定姿勢中建立錨點。這個錨定標記會沿用上層ArStreetscapeGeometry
的追蹤狀態。
對 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);
啟用地理空間深度
地理空間深度:結合街景服務幾何圖形 來強化深度資料。啟用地理空間深度後, 除了在本機觀察到的深度之外,輸出的深度和原始深度影像都經過修改,加入光柵化的街景服務幾何圖形。 這可能會提高使用深度資料偵測姿勢的準確度。