ARCore untuk Jetpack XR dapat mendeteksi permukaan datar di lingkungan pengguna dan memberikan informasi tentangnya seperti pose, ukuran, dan orientasinya. Hal ini dapat membantu aplikasi Anda menemukan platform seperti meja untuk menempatkan objek.
Membuat sesi ARCore untuk Jetpack XR
Mengakses informasi bidang melalui sesi ARCore untuk Jetpack XR. Lihat
Memahami siklus proses Sesi
untuk mendapatkan Session
.
Mengonfigurasi Sesi
Deteksi bidang tidak diaktifkan secara default pada sesi XR. Untuk mengaktifkan pelacakan bidang, konfigurasikan sesi:
val newConfig = session.config.copy( planeTracking = Config.PlaneTrackingMode.HorizontalAndVertical, ) when (val result = session.configure(newConfig)) { is SessionConfigureConfigurationNotSupported -> TODO(/* Some combinations of configurations are not valid. Handle this failure case. */) is SessionConfigurePermissionsNotGranted -> TODO(/* The required permissions in result.permissions have not been granted. */) is SessionConfigureSuccess -> TODO(/* Success! */) }
Mengambil status bidang yang dirasakan
ARCore untuk Jetpack XR menyediakan status bidang melalui
StateFlow
yang memunculkan status bidang. Berlangganan
ke pesawat dalam sesi akan memberi tahu aplikasi Anda saat pesawat ditambahkan, diperbarui, atau
dihapus.
Plane.subscribe(session).collect { planes -> // Planes have changed; update plane rendering }
Bidang memiliki properti berikut:
label
: deskripsi semantik dariPlane
tertentu. Dapat berupaWall
,Floor
,Ceiling
, atauTable
.centerPose
: Pose pusat bidang yang terdeteksi.extents
: Dimensi bidang yang terdeteksi, dalam meter.vertices
: Daftar vertex poligon cembung yang mendekati bidang.
Melakukan hit-test terhadap bidang
Hit-test adalah metode untuk menghitung persimpangan sinar dengan objek yang dilacak oleh sesi. Penerapan umum hit-test adalah dengan mengarahkan kursor ke tabel dan menempatkan objek di lokasi tersebut. Melakukan hit-test akan menghasilkan daftar objek hit. Dengan kata lain, hit-test tidak berhenti pada objek pertama yang dihit. Namun, sering kali Anda hanya tertarik pada hit objek pertama dari jenis tertentu.
Untuk melakukan hit-test, gunakan Interaction.hitTest()
dengan
Ray
:
val results = androidx.xr.arcore.hitTest(session, ray) // When interested in the first Table hit: val tableHit = results.firstOrNull { val trackable = it.trackable trackable is Plane && trackable.state.value.label == Plane.Label.Table }