Gebäude und Gelände in der Umgebung auf Android NDK (C) verwenden

Die Streetscape Geometry APIs stellen die Geometrie von Gelände, Gebäuden oder anderen Strukturen in einer Szene zur Verfügung. Die Geometrie kann zum Verdecken, Rendern oder Platzieren von AR-Inhalten über Hit-Test-APIs verwendet werden. Die Geometriedaten für Streetscape werden über Google Street View-Bilder abgerufen.

Geospatial API einrichten

Wenn Sie Streetscape Geometry 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.

Streetscape-Geometrie aktivieren

Die Geospatial API ruft Streetscape Geometry-Daten ab, wenn ArGeospatialMode auf ArGeospatialModeEnabled und ArStreetscapeGeometryMode auf ArStreetscapeGeometryModeEnabled festgelegt ist.

// Create a session config.
ArConfig* ar_config = NULL;
ArConfig_create(ar_session, &ar_config);

// Enable the Geospatial API.
ArConfig_setGeospatialMode(ar_session, ar_config, AR_GEOSPATIAL_MODE_ENABLED);
CHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS);

// Enable Streetscape Geometry.
ArConfig_setStreetscapeGeometryMode(ar_session, ar_config, AR_STREETSCAPE_GEOMETRY_MODE_ENABLED);
CHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS);

// Release config resources.
ArConfig_destroy(ar_config);

Streetscape-Geometrie in einer ARCore-Sitzung abrufen

Verwenden Sie ArSession_getAllTrackables() und AR_TRACKABLE_STREETSCAPE_GEOMETRY, um Ergebnisse zu filtern.

ArTrackableList* trackable_list = NULL;
ArTrackableList_create(ar_session, &trackable_list);
ArSession_getAllTrackables(ar_session, AR_TRACKABLE_STREETSCAPE_GEOMETRY, trackable_list);

ArStreetscapeGeometry

ArStreetscapeGeometry enthält Informationen zu einem Gebäude:

Gebäude – LOD 1

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

Gebäude-LOD 2

AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_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.

Informationen zu ArMesh

ArMesh ist ein Polygonnetz, das eine Rekonstruktion der Oberfläche der Streetscape-Geometrie darstellt. Jede ArMesh enthält einen Vertex- und einen Index-Buffer:

AR-Inhalte an ein ArStreetscapeGeometry anhängen

Es gibt zwei Möglichkeiten, AR-Inhalte an Streetscape Geometry anzuhängen:

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

ArFrame_hitTest kann für Treffertests für die Streetscape-Geometrie verwendet werden. Wenn Überschneidungen gefunden werden, enthält ArHitResult Informationen zur Pose am Auftreffpunkt sowie einen Verweis auf die ArStreetscapeGeometry, die getroffen wurde. Diese Straßenansichtsgeometrie kann an ArTrackable_acquireNewAnchor() übergeben werden, um einen daran angehängten Anker zu erstellen.

ArHitResultList *hit_result_list = NULL;
ArHitResult *hit_result = NULL;
ArHitResultList_create(ar_session, &hit_result_list);
ArHitResult_create(ar_session, &hit_result);

ArFrame_hitTestRay(ar_session, ar_frame, origin, direction, hit_result_list);
ArHitResultList_getItem(ar_session, hit_result_list, 0, hit_result);

ArAnchor *out_anchor = NULL;
ArStatus status = ArHitResult_acquireNewAnchor(ar_session, hit_result, &out_anchor);
CHECK(status == AR_SUCCESS);

Raumbezogene Tiefe aktivieren

Geospatial Depth kombiniert die Geometrie der Straßenansicht mit lokalen Sensordaten, um die Tiefendaten zu verbessern. Wenn die raumbezogene Tiefe aktiviert ist, werden die Ausgabetiefe und die Rohtiefebilder so geändert, dass zusätzlich zur lokal beobachteten Tiefe eine gerasterte Straßenansichtsgeometrie enthalten ist. Dadurch kann die Genauigkeit von Posen mit „Tiefe“ verbessert werden.