ARCore สำหรับ Jetpack XR สามารถตรวจจับพื้นผิวเรียบในสภาพแวดล้อมของผู้ใช้และ ให้ข้อมูลเกี่ยวกับพื้นผิวเหล่านั้น เช่น ท่าทาง ขนาด และการวางแนว ซึ่งจะช่วยให้แอปค้นหาพื้นผิวต่างๆ เช่น โต๊ะ เพื่อวางออบเจ็กต์ได้
สร้างเซสชัน ARCore สำหรับ Jetpack XR
เข้าถึงข้อมูลระนาบผ่านเซสชัน ARCore สำหรับ Jetpack XR ดูทําความเข้าใจวงจรของเซสชันเพื่อรับ Session
กำหนดค่าเซสชัน
ระบบไม่ได้เปิดใช้การตรวจจับระนาบโดยค่าเริ่มต้นในเซสชัน XR หากต้องการเปิดใช้การติดตามระนาบ ให้กำหนดค่าเซสชันและตั้งค่าโหมด PlaneTrackingMode.HORIZONTAL_AND_VERTICAL
ดังนี้
val newConfig = session.config.copy( planeTracking = Config.PlaneTrackingMode.HORIZONTAL_AND_VERTICAL, ) when (val result = session.configure(newConfig)) { is SessionConfigureConfigurationNotSupported -> TODO(/* Some combinations of configurations are not valid. Handle this failure case. */) is SessionConfigureSuccess -> TODO(/* Success! */) else -> TODO(/* A different unhandled exception was thrown. */) }
เรียกข้อมูลสถานะของเครื่องบินที่ตรวจพบ
ARCore สำหรับ Jetpack XR จะให้สถานะของระนาบผ่าน
StateFlow
ที่ปล่อยสถานะของระนาบ การติดตาม
เครื่องบินในเซสชันจะแจ้งเตือนแอปของคุณเมื่อมีการเพิ่ม อัปเดต หรือ
นำเครื่องบินออก
Plane.subscribe(session).collect { planes -> // Planes have changed; update plane rendering }
ระนาบมีคุณสมบัติดังต่อไปนี้
label
: คำอธิบายเชิงความหมายของPlane
ที่ระบุ อาจเป็นWALL
,FLOOR
,CEILING
หรือTABLE
centerPose
: ท่าทางของจุดกึ่งกลางของระนาบที่ตรวจพบextents
: ขนาดของระนาบที่ตรวจพบเป็นเมตรvertices
: รายการจุดยอดของรูปหลายเหลี่ยมนูนที่ประมาณ ระนาบ
ทำการทดสอบการชนกับเครื่องบิน
การทดสอบการยิงรังสีเป็นวิธีการคำนวณจุดตัดของรังสีกับออบเจ็กต์ที่เซสชันติดตาม การใช้งานการทดสอบการแตะที่พบบ่อยคือการชี้ไปที่โต๊ะและวางออบเจ็กต์ในตำแหน่งนั้น การทดสอบการตรวจหาการแตะจะส่งผลให้ได้ รายการออบเจ็กต์ที่ตรวจพบการแตะ กล่าวคือ การทดสอบการคลิกไม่ได้หยุดที่ออบเจ็กต์แรกที่คลิก อย่างไรก็ตาม บ่อยครั้งที่คุณอาจสนใจเฉพาะการเข้าชมออบเจ็กต์แรกของ ประเภทที่กำหนด
หากต้องการทำการทดสอบการเข้าชม ให้ใช้ 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 }