Streetscape Geometry API 可提供场景中地形、建筑物或其他结构的几何图形。几何形状可用于通过点击测试 API 实现遮挡、渲染或放置 AR 内容。街景几何图形数据是通过 Google 街景图像获得的。
试用示例
GeospatialExample 应用演示了如何获取和渲染街景几何图形。
设置 Geospatial API
如需使用 Streetscape Geometry,您需要在项目中设置 Geospatial API。 按照启用 Geospatial API 中的说明设置 Geospatial API。
启用 Streetscape Geometry
当 GARGeospatialMode
设置为 GARGeospatialModeEnabled
且 GARStreetscapeGeometryMode
设置为 GARStreetscapeGeometryModeEnabled
时,Geospatial API 会获取 Streetscape Geometry 数据。
GARSessionConfiguration *configuration = [[GARSessionConfiguration alloc] init];
configuration.geospatialMode = GARGeospatialModeEnabled;
configuration.streetscapeGeometryMode = GARStreetscapeGeometryModeEnabled;
[garSession setConfiguration:configuration error:&error];
在 ARCore 会话中获取街景几何图形
使用GARFrame.streetscapeGeometries
获取所有 GARStreetscapeGeometry
对象。
了解 GARStreetscapeGeometry
GARStreetscapeGeometry
包含建筑物的相关信息:
-
GARStreetscapeGeometry.type
将 StreetscapeGeometry 标识为地形或建筑物。 -
GARStreetscapeGeometry.mesh
获取与该地形或建筑物对应的多边形GARMesh
。 -
GARStreetscapeGeometry.meshTransform
描述几何图形的原点。GARMesh
中的所有点都应通过GARStreetscapeGeometry.meshTransform
进行转换。 -
GARStreetscapeGeometry.quality
提供网格数据的质量。CityGML 2.0 标准中介绍了详细程度。
建筑物 LOD 1
GARStreetscapeGeometryQualityBuildingLOD_1
包含向上凸出到平顶的建筑物底部。建筑物高度可能不准确。
建筑物 LOD 2
GARStreetscapeGeometryQualityBuildingLOD_2
几何图形的保真度更高。网格墙和屋顶会更贴近建筑物的形状。烟囱或屋顶通风口等较小的部件可能仍会在网状物之外伸出。
了解 GARMesh
GARMesh
是一个多边形网格,表示 Streetscape Geometry 的表面重建。
每个 GARMesh
都包含一个顶点缓冲区和索引缓冲区:
GARMesh.vertexCount
用于检索此网格中的顶点数。GARMesh.vertices
获取网格顶点的串联位置,以相对于GARStreetscapeGeometry.meshTransform
。GARMesh.triangleCount
用于检索此网格中索引的数量。GARMesh.triangles
获取构成面的顶点的索引。
将 AR 内容附加到 GARStreetscapeGeometry
使用 GARSesssion.createAnchorOnStreetscapeGeometry:transform:error:
在 GARStreetscapeGeometry.meshTransform
附近的给定姿势处创建锚点。此锚点将从父级 GARStreetscapeGeometry
继承其跟踪状态。
对 GARStreetscapeGeometry
执行点击测试
GARSession.raycastStreetscapeGeometry:direction:error:
可用于针对 Streetscape Geometry 进行点击测试。如果找到交叉路口,GARStreetscapeGeometryRaycastResult
会包含有关命中位置的姿势信息以及对被命中的 GARStreetscapeGeometry
的引用。可将此 Streetscape 几何图形传递给 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];