ARCore untuk Jetpack XR dapat mendeteksi permukaan datar di lingkungan pengguna dan memberikan informasi tentang permukaan tersebut seperti pose, ukuran, dan orientasinya. Hal ini dapat membantu aplikasi Anda menemukan platform seperti meja untuk menempatkan objek.
Mengakses sesi
Mengakses informasi bidang melalui ARCore untuk Jetpack XR Session. Jika Anda meningkatkan kualitas UI spasial menggunakan Jetpack Compose untuk XR, akses sesi
dari Jetpack Compose untuk XR. Jika Anda menggunakan
entitas spasial dari library Jetpack SceneCore, akses sesi
dari Jetpack XR Runtime.
Mengonfigurasi sesi
Deteksi bidang tidak diaktifkan secara default pada sesi XR. Untuk mengaktifkan pelacakan bidang, konfigurasikan sesi dan tetapkan mode PlaneTrackingMode.HORIZONTAL_AND_VERTICAL:
val newConfig = session.config.copy( planeTracking = Config.PlaneTrackingMode.HORIZONTAL_AND_VERTICAL, ) when (val result = session.configure(newConfig)) { is SessionConfigureSuccess -> TODO(/* Success! */) else -> TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */) }
Mengambil status bidang yang dirasakan
ARCore untuk Jetpack XR menyediakan status bidang melalui
StateFlow yang memancarkan status bidang. Berlangganan
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 }
Pesawat memiliki properti berikut:
label: deskripsi semantik dariPlanetertentu. Dapat berupaWALL,FLOOR,CEILING, atauTABLE.centerPose: Pose pusat bidang yang terdeteksi.extents: Dimensi bidang yang terdeteksi, dalam meter.vertices: Daftar verteks poligon cembung yang mendekati bidang.
Melakukan hit-test terhadap bidang
Pengujian hit adalah metode untuk menghitung persimpangan sinar dengan objek yang dilacak oleh sesi. Aplikasi umum dari uji hit adalah mengarahkan ke meja dan menempatkan objek di lokasi tersebut. Melakukan hit-test akan menghasilkan daftar objek yang terkena. Dengan kata lain, uji hit tidak berhenti pada objek pertama yang terkena. 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 }