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

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żyj ArSession_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:

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:

Załączanie treści AR do ArStreetscapeGeometry

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

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.