在 iOS 上使用周遭建築物和地形

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

試用範例

GeospatialExample 應用程式示範如何取得及算繪街景幾何圖形。

設定 Geospatial API

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

啟用街景幾何圖形

當 GARGeospatialMode 設為 GARGeospatialModeEnabled,而 GARStreetscapeGeometryMode 設為 GARStreetscapeGeometryModeEnabled 時,Geospatial API 會取得街景幾何圖形資料。

GARSessionConfiguration *configuration = [[GARSessionConfiguration alloc] init];
configuration.geospatialMode = GARGeospatialModeEnabled;
configuration.streetscapeGeometryMode = GARStreetscapeGeometryModeEnabled;
[garSession setConfiguration:configuration error:&error];

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

使用 GARFrame.streetscapeGeometries 取得所有 GARStreetscapeGeometry 物件。

瞭解 GARStreetscapeGeometry

GARStreetscapeGeometry 包含建築物資訊:

建構 LOD 1

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

建構 LOD 2

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

瞭解 GARMesh

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

將 AR 內容附加至 GARStreetscapeGeometry

使用 GARSesssion.createAnchorOnStreetscapeGeometry:transform:error: 在 GARStreetscapeGeometry.meshTransform 附近的特定姿勢建立錨點。這個錨點會從父項 GARStreetscapeGeometry 繼承追蹤狀態。

針對 GARStreetscapeGeometry 執行命中測試

GARSession.raycastStreetscapeGeometry:direction:error: 可用於對街景幾何圖形進行命中測試。如果偵測到交集,GARStreetscapeGeometryRaycastResult 就會包含撞擊位置的姿勢資訊,以及撞擊的 GARStreetscapeGeometry 參照。這個街景幾何圖形可傳遞至 GARSesssion.createAnchorOnStreetscapeGeometry:transform:error:,以建立連結至此的錨點。

NSArray<GARStreetscapeGeometryRaycastResult *> *results =
    [session raycastStreetscapeGeometry:arRaycastQuery.origin
                              direction:arRaycastQuery.direction
                                  error:&error];
[session createAnchorOnStreetscapeGeometry:results[0].streetscapeGeometry
                                 transform:results[0].worldTransform
                                     error:&error];