Interfejsy API Streetscape Geometry udostępniają geometrię terenu, budynków i innych obiektów w scenie. Ta geometria może służyć do zasłaniania, renderowania lub umieszczania treści AR za pomocą interfejsów API testów trafień. Dane geometryczne Street View są uzyskiwane ze zdjęć Google Street View.
Konfigurowanie interfejsu Geospatial API
Aby używać Streetscape Geometry, musisz skonfigurować interfejs Geospatial API w swoim projekcie. Aby skonfigurować interfejs Geospatial API, wykonaj instrukcje włączania interfejsu Geospatial API.
Włącz geometrię Streetscape
Interfejs Geospatial API uzyskuje dane ze Streetscape Geometry, gdy element ArGeospatialMode
ma wartość ArGeospatialModeEnabled
, a ArStreetscapeGeometryMode
– ArStreetscapeGeometryModeEnabled
.
// 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);
Uzyskiwanie danych geometrycznych ze Streetscape w sesji ARCore
Aby filtrować wyniki, użyj funkcjiArSession_getAllTrackables()
i AR_TRACKABLE_STREETSCAPE_GEOMETRY
.
ArTrackableList* trackable_list = NULL; ArTrackableList_create(ar_session, &trackable_list); ArSession_getAllTrackables(ar_session, AR_TRACKABLE_STREETSCAPE_GEOMETRY, trackable_list);
Informacje o ArStreetscapeGeometry
ArStreetscapeGeometry
zawiera informacje o budynku:
-
ArStreetscapeGeometry_getType()
Identyfikuje obiekt StreetscapeGeometry jako teren lub budynek. -
ArStreetscapeGeometry_acquireMesh()
Uzyskaj wielokątArMesh
odpowiadający temu terenowi lub budynku. -
ArStreetscapeGeometry_getMeshPose()
Opisuje pochodzenie geometrii. Wszystkie punkty w elemencieArMesh
powinny zostać przekształcone przezArStreetscapeGeometry_getMeshPose()
. -
ArStreetscapeGeometry_getQuality()
Dostarcza jakość danych sieci typu mesh. Poziomy szczegółowości są opisane w standardzie CityGML 2.0.
Budynek – poziom działania 1
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_1
to podstawy budynków wystające w górę na płaski dach. Wysokości budynków mogą być niedokładne.
Budynek – poziom działania 2
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2
będzie mieć większą dokładność geometrii. Ściany z siatki i dachy lepiej dopasują się do kształtu budynku. Mniejsze elementy, takie jak kominy czy otwory dachowe, mogą nadal wystawiać się poza siatkę.
Informacje o ArMesh
ArMesh
to siatka wielokątów przedstawiająca rekonstrukcję geometrii Streetscape.
Każdy element ArMesh
zawiera bufor wierzchołków i bufor indeksu:
ArMesh_getVertexListSize()
Pobiera liczbę wierzchołków w tej siatce.ArMesh_getVertexList()
Uzyskuj połączone pozycje wierzchołków sieci typu mesh według współrzędnych względemArStreetscapeGeometry_getMeshPose()
.ArMesh_getIndexListSize()
Pobiera liczbę indeksów w tej siatce.ArMesh_getIndexList()
Uzyskiwanie indeksów wierzchołków tworzących twarz.
Dołączanie treści AR do obiektu ArStreetscapeGeometry
Treści AR można dołączać do geometrii Streetscape na 2 sposoby:
- Włącz Głębokość geoprzestrzenną i użyj testu trafień związanych z głębokością. Jest to zalecana i prostsza metoda.
- Użyj narzędzia
ArTrackable_acquireNewAnchor()
, aby utworzyć kotwicę w danej pozycji dołączonej do elementuArStreetscapeGeometry
. Ta kotwica odziedziczy stan śledzenia z elementu nadrzędnegoArStreetscapeGeometry
.
Wykonaj test trafień pod adresem ArStreetscapeGeometry
Narzędzia ArFrame_hitTest
można używać do testów z użyciem geometrii Streetscape. Jeśli zostaną znalezione skrzyżowania, ArHitResult
zawiera informacje o pozycji o lokalizacji działania, a także odwołanie do elementu ArStreetscapeGeometry
, który został trafiony. Tę geometrię Streetscape możesz przekazać do ArTrackable_acquireNewAnchor()
, by utworzyć do niej zakotwiczoną kotwicę.
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);
Włącz głębokość geoprzestrzenną
Funkcja Głębokość geoprzestrzenna łączy geometrię Streetscape z danymi z lokalnego czujnika w celu ulepszenia danych o głębi. Po włączeniu Głębokości geoprzestrzennej dane wyjściowe i nieprzetworzona głębokość są modyfikowane tak, aby oprócz lokalnie obserwowanej głębi uwzględniały zrastrowane geometrię Streetscape. Może to poprawić dokładność póz z użyciem głębi.