Interfejsy Streetscape Geometry API zapewniają geometrię terenu, budynków i innych obiektów w scenie. Geometrii można używać do przesłonięcia, renderowania i umieszczania treści AR za pomocą interfejsów API do testów trafień. 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);
Uzyskiwanie 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 znajdziesz w standardzie CityGML 2.0.
Budynek – LOD 1
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_1
to kontury budynków rozciągnięte w górę na płaskie dach. Wysokość budynków może być niedokładna.
Budynek LOD 2
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2
będzie mieć wyższą dokładność geometrii. Ś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.
Informacje o ArMesh
ArMesh
to wielokątna siatka reprezentująca zrekonstruowaną powierzchnię geometrii Streetscape.
Każdy element 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 narzędzia
ArTrackable_acquireNewAnchor()
, aby utworzyć reklamę zakotwiczoną w danej pozycji dołączonej do elementuArStreetscapeGeometry
. 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. Po znalezieniu przecięć parametr ArHitResult
zawiera informacje o położeniu dotyczące lokalizacji działania oraz odwołanie do trafienia ArStreetscapeGeometry
. 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łącz głębię geoprzestrzenną
Głębokość geoprzestrzenna łączy geometrię Streetscape z lokalnym czujnikiem w celu ulepszenia danych 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.