Streetscape Geometry API menyediakan geometri medan, bangunan, atau struktur lain dalam adegan. Geometri dapat digunakan untuk oklusi, rendering, atau penempatan konten AR melalui API hit-test. Data Streetscape Geometry diperoleh melalui citra Google Street View.
Menyiapkan Geospatial API
Untuk menggunakan Streetscape Geometry, Anda harus menyiapkan Geospatial API dalam project. Ikuti petunjuk tentang Mengaktifkan Geospatial API untuk menyiapkan Geospatial API.
Aktifkan Streetscape Geometry
Geospatial API mendapatkan data Streetscape Geometry jika ArGeospatialMode
disetel ke ArGeospatialModeEnabled
dan ArStreetscapeGeometryMode
disetel ke 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);
Mendapatkan Streetscape Geometry dalam sesi ARCore
GunakanArSession_getAllTrackables()
dan gunakan AR_TRACKABLE_STREETSCAPE_GEOMETRY
untuk memfilter hasil.
ArTrackableList* trackable_list = NULL; ArTrackableList_create(ar_session, &trackable_list); ArSession_getAllTrackables(ar_session, AR_TRACKABLE_STREETSCAPE_GEOMETRY, trackable_list);
Memahami ArStreetscapeGeometry
ArStreetscapeGeometry
berisi informasi tentang bangunan:
-
ArStreetscapeGeometry_getType()
Mengidentifikasi StreetscapeGeometry sebagai medan atau bangunan. -
ArStreetscapeGeometry_acquireMesh()
Dapatkan poligonArMesh
yang sesuai dengan medan atau bangunan ini. -
ArStreetscapeGeometry_getMeshPose()
Menjelaskan asal geometri. Semua titik diArMesh
harus diubah olehArStreetscapeGeometry_getMeshPose()
. -
ArStreetscapeGeometry_getQuality()
Memberikan kualitas data mesh. Tingkat detail dijelaskan dalam standar CityGML 2.0.
LOD bangunan 1
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_1
terdiri dari jejak bangunan yang diekstrusi ke atas hingga datar. Tinggi bangunan mungkin tidak akurat.
LOD 2 bangunan
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2
akan memiliki geometri fidelitas yang lebih tinggi. Dinding dan atap jaring akan lebih mendekati bentuk bangunan. Bagian yang lebih kecil seperti cerobong atau ventilasi atap mungkin masih muncul di luar jaring.
Memahami ArMesh
ArMesh
adalah mesh poligon yang mewakili rekonstruksi permukaan Geometri Streetscape.
Setiap ArMesh
menyertakan buffering verteks dan buffering indeks:
ArMesh_getVertexListSize()
Mengambil jumlah verteks dalam mesh ini.ArMesh_getVertexList()
Dapatkan posisi gabungan verteks mesh, dalam koordinat yang sesuai denganArStreetscapeGeometry_getMeshPose()
.ArMesh_getIndexListSize()
Mengambil jumlah indeks dalam mesh ini.ArMesh_getIndexList()
Dapatkan indeks titik sudut yang membentuk wajah.
Melampirkan konten AR ke ArStreetscapeGeometry
Ada dua cara untuk melampirkan konten AR ke Streetscape Geometry:
- Aktifkan Geospatial Depth dan gunakan depth hit-test. Ini adalah metode yang disarankan dan lebih mudah.
- Gunakan
ArTrackable_acquireNewAnchor()
untuk membuat anchor pada pose tertentu yang dilampirkan keArStreetscapeGeometry
. Anchor ini akan mewarisi status pelacakannya dari indukArStreetscapeGeometry
.
Menjalankan hit-test terhadap ArStreetscapeGeometry
ArFrame_hitTest
dapat digunakan untuk hit-test terhadap Streetscape Geometry. Jika ditemukan persimpangan, ArHitResult
berisi informasi pose tentang lokasi hit serta referensi ke ArStreetscapeGeometry
yang dihasilkan. Streetscape Geometry ini dapat diteruskan ke ArTrackable_acquireNewAnchor()
untuk membuat anchor yang dilampirkan.
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);
Mengaktifkan Geospatial Depth
Geospatial Depth menggabungkan Streetscape Geometry dengan input sensor lokal untuk meningkatkan data kedalaman. Jika Geospatial Depth diaktifkan, gambar kedalaman output dan kedalaman mentah akan dimodifikasi untuk menyertakan Streetscape Geometry raster selain kedalaman yang diamati secara lokal. Hal ini dapat meningkatkan akurasi pose menggunakan Depth.