Korzystanie z budynków i terenu wokół siebie w Androidzie NDK (C)

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 ArStreetscapeGeometryModeArStreetscapeGeometryModeEnabled.

// 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 funkcji ArSession_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:

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:

Dołączanie treści AR do obiektu ArStreetscapeGeometry

Treści AR można dołączać do geometrii Streetscape na 2 sposoby:

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.