ARCore สำหรับ Jetpack XR สามารถตรวจหาพื้นผิวเรียบในสภาพแวดล้อมของผู้ใช้ และระบุข้อมูลเกี่ยวกับพื้นผิวดังกล่าว เช่น การวางแนว ขนาด และการวางตำแหน่ง ซึ่งจะช่วยให้แอปค้นหาพื้นผิวต่างๆ เช่น โต๊ะ เพื่อวางวัตถุได้
สร้างเซสชัน ARCore สำหรับ Jetpack XR
เข้าถึงข้อมูลเครื่องบินผ่านเซสชัน ARCore สำหรับ Jetpack XR ดูหัวข้อทำความเข้าใจวงจรของเซสชันเพื่อรับ Session
กำหนดค่าเซสชัน
ระบบไม่ได้เปิดใช้การตรวจจับเครื่องบินในเซสชัน XR โดยค่าเริ่มต้น หากต้องการเปิดใช้การติดตามเครื่องบิน ให้กําหนดค่าเซสชันโดยทำดังนี้
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! */) }
ดึงข้อมูลสถานะของเครื่องบินที่รับรู้
ARCore สำหรับ Jetpack XR จะระบุสถานะของเครื่องบินผ่าน StateFlow
ที่แสดงสถานะของเครื่องบิน การติดตามเที่ยวบินในเซสชันจะแจ้งให้แอปทราบเมื่อมีการเพิ่ม อัปเดต หรือนำเที่ยวบินออก
Plane.subscribe(session).collect { planes -> // Planes have changed; update plane rendering }
เครื่องบินมีพร็อพเพอร์ตี้ต่อไปนี้
label
: คำอธิบายเชิงความหมายของPlane
ที่ระบุ อาจเป็นWall
,Floor
,Ceiling
หรือTable
centerPose
: การวางตัวของจุดศูนย์กลางของเครื่องบินที่ตรวจพบextents
: ขนาดของเครื่องบินที่ตรวจพบเป็นเมตรvertices
: รายการจุดยอดของรูปหลายเหลี่ยมที่Convexซึ่งใกล้เคียงกับระนาบ
ทำการทดสอบการชนกับเครื่องบิน
Hit-test เป็นวิธีการคํานวณจุดตัดของรังสีกับวัตถุที่เซสชันติดตาม การใช้งาน Hit-Test ที่พบบ่อยคือการชี้ไปที่ตารางและวางวัตถุในตำแหน่งนั้น การดำเนินการทดสอบการทํางานจะแสดงรายการออบเจ็กต์ที่พบ กล่าวคือ Hit-Test จะไม่หยุดที่วัตถุแรกที่พบ อย่างไรก็ตาม บ่อยครั้งที่คุณอาจสนใจเฉพาะออบเจ็กต์แรกที่พบของประเภทหนึ่งๆ
หากต้องการทำการทดสอบการทํางาน ให้ใช้ Interaction.hitTest()
กับ 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 }