Streetscape Geometry API menyediakan geometri medan, bangunan, atau struktur lainnya dalam sebuah tampilan. Geometri ini dapat digunakan untuk oklusi, rendering, atau penempatan konten AR melalui API hit-test. Data Streetscape Geometry diperoleh melalui gambar Google Street View.
Menyiapkan Geospatial API
Untuk menggunakan Streetscape Geometry, Anda harus menyiapkan Geospatial API di project. Ikuti petunjuk tentang cara Mengaktifkan Geospatial API untuk menyiapkan Geospatial API.
Mengaktifkan Streetscape Geometry
Geospatial API memperoleh data Streetscape Geometry jika ArGeospatialMode
ditetapkan ke ArGeospatialModeEnabled
dan ArStreetscapeGeometryMode
ditetapkan 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 ditransformasikan 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 ke bagian atas yang datar. Tinggi bangunan mungkin tidak akurat.
LOD Bangunan 2
AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2
akan memiliki geometri fidelitas lebih tinggi. Dinding dan atap mesh akan lebih cocok dengan bentuk bangunan. Fitur yang lebih kecil seperti cerobong asap atau ventilasi atap mungkin masih menyembul ke luar mesh.
Memahami ArMesh
ArMesh
adalah mesh poligon yang merepresentasikan rekonstruksi permukaan Streetscape Geometry.
Setiap ArMesh
menyertakan buffer verteks dan buffer indeks:
ArMesh_getVertexListSize()
Mengambil jumlah vertex dalam mesh ini.ArMesh_getVertexList()
Dapatkan posisi gabungan verteks mesh, dalam koordinat yang terkait denganArStreetscapeGeometry_getMeshPose()
.ArMesh_getIndexListSize()
Mengambil jumlah indeks dalam mesh ini.ArMesh_getIndexList()
Mendapatkan indeks vertex 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 direkomendasikan dan lebih mudah.
- Gunakan
ArTrackable_acquireNewAnchor()
untuk membuat anchor pada pose tertentu yang terpasang keArStreetscapeGeometry
. Anchor ini akan mewarisi status pelacakannya dariArStreetscapeGeometry
induk.
Menjalankan hit-test terhadap ArStreetscapeGeometry
ArFrame_hitTest
dapat digunakan untuk melakukan hit-test terhadap Streetscape Geometry. Jika persimpangan ditemukan, ArHitResult
akan berisi informasi pose tentang lokasi hit serta referensi ke ArStreetscapeGeometry
yang dihit. Streetscape Geometry ini dapat diteruskan ke ArTrackable_acquireNewAnchor()
untuk membuat anchor yang terpasang padanya.
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 kualitas data kedalaman. Saat Geospatial Depth diaktifkan, kedalaman output dan gambar kedalaman mentah diubah untuk menyertakan Streetscape Geometry yang dirasterkan selain kedalaman yang diamati secara lokal. Tindakan ini dapat meningkatkan akurasi pose menggunakan Kedalaman.