Le API Streetscape Geometry forniscono la geometria del terreno, degli edifici o di altre strutture in una scena. La geometria può essere utilizzata per occlusione, rendering o posizionamento di contenuti AR tramite API di hit test. I dati di Street View Geometry sono ottenuti tramite le immagini di Google Street View.
Configura l'API Geospatial
Per utilizzare Streetscape Geometry, devi configurare l'API Geospatial nel tuo progetto. Segui le istruzioni sull'abilitazione dell'API Geospatial per configurare l'API Geospatial.
Attiva Streetscape Geometry
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 Streetscape Geometry 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);
Comprendi ArStreetscapeGeometry
ArStreetscapeGeometry
contiene informazioni su un edificio:
-
ArStreetscapeGeometry_getType()
Identifica StreetscapeGeometry come terreno o come edificio. -
ArStreetscapeGeometry_acquireMesh()
Ottieni un poligonoArMesh
corrispondente a questo terreno o edificio. -
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 edificio 1
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_1
è costituito da impronte di edifici estruse verso l'alto fino a una sommità piatta. L'altezza degli edifici potrebbe non essere accurata.
LOD edificio 2
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2
avrà una geometria a fedeltà più elevata. Le pareti e i tetti a griglia si avvicinano maggiormente alla forma dell'edificio. Elementi più piccoli, come camini o prese d'aria sul tetto, potrebbero comunque fuoriuscire dalla rete.
Comprendi ArMesh
ArMesh
è una maglia poligonale che rappresenta una ricostruzione della superficie della Geometria di Streetscape.
Ogni elemento ArMesh
include un vertex e un buffer indice:
ArMesh_getVertexListSize()
Recupera il numero di vertici in questo mesh.ArMesh_getVertexList()
Ottieni le posizioni concatenate dei vertici della rete mesh, in coordinate relative aArStreetscapeGeometry_getMeshPose()
.ArMesh_getIndexListSize()
Recupera il numero di indici in questo mesh.ArMesh_getIndexList()
Ottieni gli indici dei vertici che compongono una faccia.
Collegare contenuti AR a una ArStreetscapeGeometry
Esistono due modi per allegare contenuti AR a Streetscape Geometry:
- Attiva Profondità geospaziale e utilizza un hit test di profondità. Questo è il metodo più semplice e consigliato.
- Utilizza
ArTrackable_acquireNewAnchor()
per creare un ancoraggio in una determinata posizione collegata a unaArStreetscapeGeometry
. Questo ancoraggio erediterà il proprio stato di monitoraggio dall'elementoArStreetscapeGeometry
principale.
Esegui un hit test su ArStreetscapeGeometry
ArFrame_hitTest
può essere utilizzato per eseguire test su Streetscape Geometry. Se vengono rilevati degli incroci, ArHitResult
contiene informazioni sulla posa sulla posizione dell'hit e un riferimento all'elemento ArStreetscapeGeometry
interessato. Questa geometria di Streetscape può essere passata a ArTrackable_acquireNewAnchor()
per creare un ancoraggio collegato.
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 funzionalità Profondità geospaziale combina Streetscape Geometry con l'input dei sensori locali per migliorare i dati di profondità. Quando la funzionalità Profondità geospaziale è abilitata, le immagini di profondità non elaborate e di output vengono modificate in modo da includere la geometria Streetscape rasterizzata oltre alla profondità osservata localmente. Questa operazione può migliorare la precisione delle pose usando la profondità.