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. 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ż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 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:

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