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
gesetzt 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 SieArSession_getAllTrackables()
und AR_TRACKABLE_STREETSCAPE_GEOMETRY
, um die Ergebnisse zu filtern.
ArTrackableList* trackable_list = NULL; ArTrackableList_create(ar_session, &trackable_list); ArSession_getAllTrackables(ar_session, AR_TRACKABLE_STREETSCAPE_GEOMETRY, trackable_list);
Informationen zu ArStreetscapeGeometry
ArStreetscapeGeometry
enthält Informationen zu einem Gebäude:
-
ArStreetscapeGeometry_getType()
Kennzeichnet die StreetscapeGeometry entweder als Gelände oder als Gebäude. -
ArStreetscapeGeometry_acquireMesh()
Erstellen Sie ein PolygonArMesh
, das diesem Gelände oder Gebäude entspricht. -
ArStreetscapeGeometry_getMeshPose()
Beschreibt den Ursprung der Geometrie. Alle Punkte imArMesh
sollten durchArStreetscapeGeometry_getMeshPose()
transformiert werden. -
ArStreetscapeGeometry_getQuality()
Liefert die Qualität der Mesh-Daten. Die Detailebenen werden im CityGML 2.0-Standard beschrieben.
LOD 1 wird erstellt
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.
LOD 2 wird erstellt
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2
hat eine höhere Geometrie. Gitterwände und -dächer passen sich der Form des Gebäudes besser an. Kleinere Elemente wie Schornsteine oder Dachlüfter führen möglicherweise noch außerhalb des Netzes.
Informationen zu ArMesh
ArMesh
ist ein Polygonnetz, das eine Rekonstruktion der Oberfläche der Streetscape-Geometrie darstellt.
Jedes ArMesh
enthält einen Scheitelpunktzwischenspeicher und einen Indexzwischenspeicher:
ArMesh_getVertexListSize()
Ruft die Anzahl der Eckpunkte in diesem Mesh-Netzwerk ab.ArMesh_getVertexList()
Die verketteten Positionen von Mesh-Scheitelpunkten in Koordinaten relativ zuArStreetscapeGeometry_getMeshPose()
ArMesh_getIndexListSize()
Ruft die Anzahl der Indexe in diesem Mesh-Netzwerk ab.ArMesh_getIndexList()
Ermitteln Sie die Indexe der Eckpunkte, aus denen eine Fläche besteht.
AR-Inhalte an ein ArStreetscapeGeometry
anhängen
Es gibt zwei Möglichkeiten, AR-Inhalte an Streetscape Geometry anzuhängen:
- Aktivieren Sie die räumliche Tiefe und führen Sie einen Tiefentest aus. Dies ist die empfohlene und einfachere Methode.
- Mit
ArTrackable_acquireNewAnchor()
können Sie einen Anker in einer bestimmten Pose erstellen, die mit einemArStreetscapeGeometry
verbunden ist. Dieser Anker übernimmt seinen Tracking-Status vom übergeordneten ElementArStreetscapeGeometry
.
Treffertest für ArStreetscapeGeometry
durchführen
ArFrame_hitTest
kann für Treffertests für die Streetscape-Geometrie verwendet werden. Wenn Kreuzungen gefunden werden, enthält ArHitResult
Positionsinformationen zur Trefferposition sowie einen Verweis auf das ArStreetscapeGeometry
-Element, das getroffen wurde. Diese Streetscape-Geometrie kann an ArTrackable_acquireNewAnchor()
übergeben werden, um einen 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
Räumlich-geografische Tiefe kombiniert Streetscape-Geometrie mit lokalen Sensoreingaben, um die Tiefendaten zu verbessern. Wenn „Raumbezogene Tiefe“ aktiviert ist, Die Ausgabetiefe und die unformatierten Tiefenbilder werden so modifiziert, dass sie zusätzlich zur lokal erfassten Tiefe auch eine gerasterte Streetscape-Geometrie enthalten. Dadurch kann die Genauigkeit von Posen mit „Tiefe“ verbessert werden.