Le API Streetscape Geometry forniscono la geometria di terreni, edifici o altre strutture in una scena. La geometria può essere utilizzata per occlusione, rendering o posizionamento di contenuti AR tramite API hit-test. I dati di Streetscape Geometry vengono ottenuti tramite le immagini di Google Street View.
Configurare l'API Geospatial
Per utilizzare la geometria della strada, devi configurare l'API Geospatial nel tuo progetto. Segui le istruzioni su come attivare l'API Geospatial per configurare l'API geospaziale.
Attiva la geometria di Streetscape
L'API Geospatial ottiene i dati di Streetscape Geometry quando ArGeospatialMode
è impostato su ArGeospatialModeEnabled
e ArStreetscapeGeometryMode
è impostato su 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);
Ottenere la geometria Streetscape in una sessione ARCore
UtilizzaArSession_getAllTrackables()
e AR_TRACKABLE_STREETSCAPE_GEOMETRY
per filtrare i risultati.
ArTrackableList* trackable_list = NULL; ArTrackableList_create(ar_session, &trackable_list); ArSession_getAllTrackables(ar_session, AR_TRACKABLE_STREETSCAPE_GEOMETRY, trackable_list);
Informazioni su ArStreetscapeGeometry
ArStreetscapeGeometry
contiene informazioni su un edificio:
-
ArStreetscapeGeometry_getType()
Identifica StreetscapeGeometry come terreno o un edificio. -
ArStreetscapeGeometry_acquireMesh()
Crea un poligonoArMesh
corrispondente al terreno o all'edificio in questione. -
ArStreetscapeGeometry_getMeshPose()
Descrive l'origine della geometria. Tutti i punti inArMesh
devono essere trasformati daArStreetscapeGeometry_getMeshPose()
. -
ArStreetscapeGeometry_getQuality()
Fornisce la qualità dei dati mesh. I livelli di dettaglio sono descritti nello standard CityGML 2.0.
LOD dell'edificio 1
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_1
è costituito da impronte di edifici estruse verso l'alto fino a una parte superiore piana. Le altezze degli edifici potrebbero non essere precise.
Edificio livello 2
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2
avrà una geometria con una fedeltà superiore. Le pareti e i tetti in retina si adattano meglio alla forma dell'edificio. Elementi più piccoli come canne fumarie o prese d'aria sul tetto potrebbero comunque infiltrarsi nella rete.
Informazioni su ArMesh
ArMesh
è una mesh poligonale che rappresenta una ricostruzione della superficie della geometria della strada.
Ogni ArMesh
include un buffer di vertici e un buffer di indici:
ArMesh_getVertexListSize()
Recupera il numero di vertici in questa mesh.ArMesh_getVertexList()
Ottenere le posizioni concatenate dei vertici della mesh, in coordinate relative aArStreetscapeGeometry_getMeshPose()
.ArMesh_getIndexListSize()
Recupero il numero di indici in questo mesh.ArMesh_getIndexList()
Ottieni gli indici dei vertici che compongono un lato.
Allega contenuti AR a un ArStreetscapeGeometry
Esistono due modi per allegare contenuti AR a Streetscape Geometry:
- Attiva la profondità geospaziale e utilizza un test di corrispondenza della profondità. Questo è il metodo consigliato e più semplice.
- Utilizza
ArTrackable_acquireNewAnchor()
per creare un ancoraggio in una determinata posizione associata a unArStreetscapeGeometry
. Questo ancora erediterà lo stato di monitoraggio dall'elemento principaleArStreetscapeGeometry
.
Esegui un test di corrispondenza su ArStreetscapeGeometry
ArFrame_hitTest
può essere utilizzato per eseguire un test di hit rispetto alla geometria di Streetscape. Se vengono individuati degli incroci, ArHitResult
contiene informazioni sulla posa in relazione alla posizione dell'hit, nonché un riferimento alla ArStreetscapeGeometry
che è stata rilevata. Questa geometria del paesaggio urbano può essere passata a ArTrackable_acquireNewAnchor()
per creare un'ancora collegata.
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);
Attiva profondità geospaziale
La profondità geospaziale combina la geometria di paesaggi urbani con input dei sensori locali per migliorare i dati sulla profondità. Quando la funzionalità Profondità geospaziale è attivata, le immagini di profondità di output e di profondità non elaborate vengono modificate per includere la geometria di Streetscape rasterizzata oltre alla profondità osservata localmente. In questo modo, la precisione delle pose potrebbe migliorare utilizzando la funzionalità Profondità.