Le API Streetscape Geometry forniscono la geometria del terreno, degli edifici o di altre strutture in una scena. La geometria può essere utilizzata per l'occlusione, il rendering o il posizionamento di contenuti AR tramite API di hit-test. I dati di Streetscape Geometry vengono ottenuti tramite le immagini di Google Street View.
Configurare l'API Geospatial
Per utilizzare la geometria di Streetscape, devi configurare l'API Geospatial nel tuo progetto. Segui le istruzioni per abilitare l'API Geospatial per configurare l'API Geospatial.
Attiva la geometria della strada
L'API Geospatial ottiene i dati sulla geometria della strada 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 della strada in una sessione ARCore
UsaArSession_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 edificio. -
ArStreetscapeGeometry_acquireMesh()
Ottieni un poligonoArMesh
che corrisponda 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 della 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 sommità piana. Le altezze degli edifici potrebbero non essere precise.
LOD dell'edificio 2
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2
avrà una geometria con una fedeltà superiore. Le pareti e i tetti mesh si adatteranno meglio alla forma dell'edificio. Elementi più piccoli come camini o prese d'aria sul tetto potrebbero comunque sporgere all'esterno della maglia.
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()
Recupero il numero di vertici in questo mesh.ArMesh_getVertexList()
Ottieni le posizioni concatenate dei vertici del 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 collegare i contenuti AR alla geometria di Streetscape:
- 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'ancora in una determinata posa collegata 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 test di corrispondenza rispetto alla geometria della strada. Se vengono trovate intersezioni, ArHitResult
contiene informazioni sulla posizione dell'impatto e un riferimento all'ArStreetscapeGeometry
colpito. 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);
Attivare la profondità geospaziale
La funzionalità Profondità geospaziale combina la geometria della strada con l'input del sensore locale per migliorare i dati sulla profondità. Quando la profondità geospaziale è attivata, le immagini di profondità in uscita e di profondità non elaborata vengono modificate per includere la geometria della strada rasterizzata oltre alla profondità osservata localmente. In questo modo, la precisione delle pose potrebbe migliorare utilizzando la funzionalità Profondità.