Interfejsy API Streetscape Geometry udostępniają geometrię terenu, budynków i innych struktur w scenie. Geometria może służyć do zasłonięcia, renderowania lub umieszczania treści AR za pomocą interfejsów API testowania kolizji. Dane geometryczne dotyczące ulicy są uzyskiwane na podstawie zdjęć Google Street View.
Konfigurowanie interfejsu Geospatial API
Aby korzystać z geometrii Streetscape, musisz skonfigurować interfejs Geospatial API w projekcie. Aby skonfigurować interfejs Geospatial API, wykonaj instrukcje dotyczące włączania interfejsu Geospatial API.
Włączanie geometrii Streetscape
Interfejs Geospatial API uzyskuje dane geometrii Streetscape, gdy parametr ArGeospatialMode
ma wartość ArGeospatialModeEnabled
, a parametr ArStreetscapeGeometryMode
ma wartość 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
Aby filtrować wyniki, użyjArSession_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);
ArStreetscapeGeometry
ArStreetscapeGeometry
zawiera informacje o budynku:
-
ArStreetscapeGeometry_getType()
Identyfikuje geometrię ulicy jako teren lub budynek. -
ArStreetscapeGeometry_acquireMesh()
Uzyskaj wielokątArMesh
odpowiadający temu rodzajowi terenu lub budynkowi. -
ArStreetscapeGeometry_getMeshPose()
Określa początek układu geometrycznego. Wszystkie punkty wArMesh
powinny zostać przekształcone za pomocąArStreetscapeGeometry_getMeshPose()
. -
ArStreetscapeGeometry_getQuality()
Pozwala określić jakość danych siatki. 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, które kończą się płaskim szczytem. 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. Siatka na ścianach i dachach będzie lepiej dopasowana do kształtu budynku. Mniejsze elementy, takie jak kominy czy otwory wentylacyjne w dachu, mogą wystawać poza siatkę.
ArMesh
ArMesh
to wielokątna siatka reprezentująca odtworzenie powierzchni geometrii ulicy.
Każdy element ArMesh
zawiera bufor wierzchołków i bufor indeksów:
ArMesh_getVertexListSize()
Zwraca liczbę wierzchołków w tej siatce.ArMesh_getVertexList()
Uzyskaj złączone pozycje wierzchołków siatki w swoich współrzędnych względemArStreetscapeGeometry_getMeshPose()
.ArMesh_getIndexListSize()
Pobiera liczbę indeksów w tej siatce.ArMesh_getIndexList()
Uzyskaj indeksy wierzchołków, które tworzą powierzchnię.
Załączanie treści AR do ArStreetscapeGeometry
Treści AR można dołączyć do geometrii Streetscape na 2 sposoby:
- Włącz Głębokie rozróżnianie przestrzenne i wykonaj test trafień głębokości. Jest to zalecana i prostsza metoda.
- Użyj
ArTrackable_acquireNewAnchor()
, aby utworzyć kotwicę w danej pozie dołączonej doArStreetscapeGeometry
. Ten kotwnik odziedziczy stan śledzenia z poziomu elementu nadrzędnegoArStreetscapeGeometry
.
Przeprowadź test trafień w przypadku ArStreetscapeGeometry
ArFrame_hitTest
można użyć do przetestowania dopasowania do geometrii Streetscape. Jeśli znaleziono punkty przecięcia, ArHitResult
zawiera informacje o miejscu uderzenia oraz odniesienie do ArStreetscapeGeometry
, które zostało uderzenie. Geometrię ulicy można przekazać do ArTrackable_acquireNewAnchor()
, aby utworzyć do niej dołączoną 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 danych geograficznych
Głębia geoprzestrzenna łączy geometrię Streetscape z danymi z lokalnych czujników, aby poprawić dane o głębi. Gdy włączona jest opcja Głębia geoprzestrzenna, obrazy głębi wyjściowej i surowej głębi są modyfikowane, aby uwzględnić rastrową geometrię Streetscape, a nie tylko lokalnie obserwowaną głębię. Może to poprawić dokładność wykrywania póz przy użyciu Depth.