Menggunakan gedung dan medan di sekitar Anda di Android NDK (C)

Streetscape Geometry API menyediakan geometri medan, bangunan, atau struktur lainnya dalam sebuah tampilan. Geometri dapat digunakan untuk oklusi, rendering, atau menempatkan 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 di project. Ikuti petunjuk di Mengaktifkan Geospatial API untuk menyiapkan Geospatial API.

Mengaktifkan Streetscape Geometry

Geospatial API memperoleh data Streetscape Geometry saat 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

Gunakan ArSession_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:

Membangun LOD 1

AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_1 terdiri dari jejak bangunan yang diekstrusi ke atas hingga bagian atasnya datar. Ketinggian bangunan mungkin tidak akurat.

Membangun LOD 2

AR_STREETSCAPE_GEOMETRY_QUALITY_BUILDING_LOD_2 akan memiliki geometri fidelitas yang lebih tinggi. Dinding dan atap mesh akan lebih cocok dengan bentuk bangunan. Fitur yang lebih kecil seperti cerobong asap atau ventilasi atap mungkin masih menembus di luar mesh.

Memahami ArMesh

ArMesh adalah mesh poligon yang mewakili rekonstruksi permukaan Streetscape Geometry. Setiap ArMesh menyertakan buffer vertex dan buffer indeks:

Melampirkan konten AR ke ArStreetscapeGeometry

Ada dua cara untuk melampirkan konten AR ke Streetscape Geometry:

Melakukan 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 Depth.