在 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];