在 iOS 设备上使用周围的建筑物和地形

Streetscape Geometry API 提供场景中地形、建筑物或其他结构的几何图形。该几何图形可用于通过碰撞检测 API 进行遮挡、渲染或放置 AR 内容。街景几何图形数据是通过 Google 街景图像获取的。

试用示例

GeospatialExample 应用演示了如何获取和渲染街景几何图形。

设置 Geospatial API

如需使用街景几何图形,您需要在项目中设置 Geospatial API。 按照启用 Geospatial API 中的说明设置 Geospatial API。

启用街景几何图形

GARGeospatialMode 设置为 GARGeospatialModeEnabledGARStreetscapeGeometryMode 设置为 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 的引用。此 Streetscape Geometry 可以传递给 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];