Interfejsy Streetscape Geometry API zapewniają geometrię terenu, budynków i innych obiektów w scenie. Geometria może służyć do zasłonięcia, renderowania lub umieszczania treści AR za pomocą interfejsów hit-test API. Dane geometryczne Streetscape uzyskuje się ze zdjęć Google Street View.
Konfigurowanie interfejsu Geospatial API
Aby korzystać z funkcji Streetscape Geometry, musisz skonfigurować w projekcie interfejs Geospatial API. Aby skonfigurować interfejs Geospatial API, postępuj zgodnie z instrukcjami włączania interfejsu Geospatial API.
Włącz geometrię Streetscape
Interfejs Geospatial API pobiera dane Streetscape Geometry, gdy ArGeospatialMode
ma wartość ArGeospatialModeEnabled
, a ArStreetscapeGeometryMode
jest ustawiona na 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);
Pobieranie geometrii Streetscape w sesji ARCore
UżyjArSession_getAllTrackables()
i AR_TRACKABLE_STREETSCAPE_GEOMETRY
, aby filtrować wyniki.
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()
Znajdź wielokątArMesh
odpowiadający temu terenowi lub budynku. -
ArStreetscapeGeometry_getMeshPose()
Opisuje pochodzenie geometrii. Wszystkie punkty w elemencieArMesh
powinny zostać przekształcone w obiektyArStreetscapeGeometry_getMeshPose()
. -
ArStreetscapeGeometry_getQuality()
Zapewnia jakość danych sieci typu mesh. Poziomy szczegółowości są opisane w standardzie CityGML 2.0.
Budynek – LOD 1
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_1
składa się z wypukłych rzutów poziomych budynku. Wysokość budynków może być niedokładna.
Budynek LOD 2
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2
będzie mieć geometrię o wyższej jakości. Ściany z siatki i dachy będą lepiej dopasowane do kształtu budynku. Mniejsze elementy, takie jak kominy czy otwory dachowe, mogą nadal pojawiać się na zewnątrz siatki.
ArMesh
ArMesh
to wielokątna siatka reprezentująca zrekonstruowaną powierzchnię geometrii Streetscape.
Każdy obiekt ArMesh
zawiera bufor wierzchołkowy i bufor indeksu:
ArMesh_getVertexListSize()
Pobiera liczbę wierzchołków w tej siatce.ArMesh_getVertexList()
Uzyskaj połączone położenie wierzchołków siatki we współrzędnych względemArStreetscapeGeometry_getMeshPose()
ArMesh_getIndexListSize()
Pobiera liczbę indeksów w tej siatce.ArMesh_getIndexList()
Uzyskaj indeksy wierzchołków tworzących twarz.
Załączanie treści AR do ArStreetscapeGeometry
Treści AR można dołączać do geometrii Streetscape na 2 sposoby:
- Włącz opcję Głębokość geoprzestrzenna i użyj testu działań związanych z głębokością. Jest to zalecana i łatwiejsza metoda.
- Użyj
ArTrackable_acquireNewAnchor()
, aby utworzyć kotwicę w danej pozie dołączonej doArStreetscapeGeometry
. Ta kotwica odziedziczy stan śledzenia z elementu nadrzędnegoArStreetscapeGeometry
.
Przeprowadź test trafień na ArStreetscapeGeometry
ArFrame_hitTest
może służyć do testowania trafień pod kątem geometrii Streetscape. Jeśli znaleziono punkty przecięcia, ArHitResult
zawiera informacje o miejscu dotknięcia oraz odniesienie do ArStreetscapeGeometry
, które zostało dotknięte. Tę geometrię Streetscape można przekazać do obiektu ArTrackable_acquireNewAnchor()
, aby utworzyć dołączoną do niej 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łączanie głębi geoprzestrzennej
Głębia geoprzestrzenna łączy geometrię Streetscape z danymi z lokalnych czujników, aby poprawić dane o głębi. Gdy włączona jest funkcja Głębokość geoprzestrzenna, Obrazy głębi wyjściowej i nieprzetworzonej głębi są modyfikowane tak, by oprócz lokalnie obserwowanej głębi uwzględnić zrasteryzowaną geometrię Streetscape. Może to poprawić dokładność pozycji z wykorzystaniem głębi.