Gebäude und Gelände in der Umgebung auf iOS-Geräten verwenden

Die Streetscape Geometry APIs liefern die Geometrie von Gelände, Gebäuden oder anderen Strukturen in einer Szene. Die Geometrie kann für die Okklusion, das Rendering oder das Platzieren von AR-Inhalten über Hit-Test-APIs verwendet werden. Daten zur Straßenraumgeometrie werden aus Google Street View-Bildern gewonnen.

Beispiel testen

In der GeospatialExample App wird veranschaulicht, wie Sie Straßenansichten-Geometrien abrufen und rendern.

Geospatial API einrichten

Wenn Sie Streetscape-Geometrie verwenden möchten, müssen Sie die Geospatial API in Ihrem Projekt einrichten. Folgen Sie der Anleitung unter Geospatial API aktivieren, um die Geospatial API einzurichten.

Geometrie für Straßenzüge aktivieren

Die Geospatial API ruft Daten zur Straßengeometrie ab, wenn GARGeospatialMode auf GARGeospatialModeEnabled und GARStreetscapeGeometryMode auf GARStreetscapeGeometryModeEnabled festgelegt ist.

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

Street View-Geometrie in einer ARCore-Sitzung abrufen

Mit GARFrame.streetscapeGeometries können Sie alle GARStreetscapeGeometry-Objekte abrufen.

GARStreetscapeGeometry

GARStreetscapeGeometry enthält Informationen zu einem Gebäude:

Gebäude – LOD 1

GARStreetscapeGeometryQualityBuildingLOD_1 besteht aus Gebäudegrundrissen, die nach oben zu einer flachen Oberseite extrudiert werden. Gebäudehöhen können ungenau sein.

Gebäude-LOD 2

GARStreetscapeGeometryQualityBuildingLOD_2 hat eine höhere Geometrietreue. Mesh-Wände und -Dächer entsprechen der Form des Gebäudes besser. Kleinere Elemente wie Schornsteine oder Dachlüftungsöffnungen können noch über das Mesh hinausragen.

GARMesh

GARMesh ist ein Polygon-Mesh, das eine Oberflächenrekonstruktion der Straßengeometrie darstellt. Jede GARMesh enthält einen Vertex- und einen Index-Buffer:

AR-Inhalte an eine GARStreetscapeGeometry anhängen

Verwenden Sie GARSesssion.createAnchorOnStreetscapeGeometry:transform:error:, um einen Anker in einer bestimmten Pose in der Nähe von GARStreetscapeGeometry.meshTransform zu erstellen. Der Tracking-Status dieses Ankers wird vom übergeordneten Element GARStreetscapeGeometry übernommen.

Führen Sie einen Treffertest für GARStreetscapeGeometry durch.

GARSession.raycastStreetscapeGeometry:direction:error: kann für einen Treffertest mit der Straßenraumgeometrie verwendet werden. Wenn Überschneidungen gefunden werden, enthält GARStreetscapeGeometryRaycastResult Informationen zur Pose am Auftreffpunkt sowie einen Verweis auf die GARStreetscapeGeometry, die getroffen wurde. Diese Straßenansichtsgeometrie kann an GARSesssion.createAnchorOnStreetscapeGeometry:transform:error: übergeben werden, um einen daran angehängten Anker zu erstellen.

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