ARCore สำหรับ Jetpack XR สามารถตรวจจับพื้นผิวเรียบในสภาพแวดล้อมของผู้ใช้และ ให้ข้อมูลเกี่ยวกับพื้นผิวเหล่านั้น เช่น ท่าทาง ขนาด และการวางแนว ซึ่งจะช่วยให้แอปค้นหาพื้นผิว เช่น โต๊ะ เพื่อวางออบเจ็กต์ได้
เข้าถึงเซสชัน
เข้าถึงข้อมูลเครื่องบินผ่าน ARCore สำหรับ Jetpack XR Session หากคุณกำลังปรับปรุง UI เชิงพื้นที่โดยใช้ Jetpack Compose สำหรับ XR โปรดเข้าถึงเซสชันจาก Jetpack Compose สำหรับ XR หากคุณกำลังทำงานกับเอนทิตีเชิงพื้นที่จากไลบรารี Jetpack SceneCore ให้เข้าถึงเซสชัน
จาก Jetpack XR Runtime
กำหนดค่าเซสชัน
ระบบไม่ได้เปิดใช้การตรวจจับระนาบโดยค่าเริ่มต้นในเซสชัน XR หากต้องการเปิดใช้การติดตามระนาบ ให้กำหนดค่าเซสชันและตั้งค่าโหมด 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. */) }
เรียกข้อมูลสถานะของเครื่องบินที่ตรวจพบ
ARCore สำหรับ Jetpack XR จะให้สถานะของระนาบผ่าน StateFlow ที่ปล่อยสถานะของระนาบ การติดตาม
เครื่องบินในเซสชันจะแจ้งเตือนแอปของคุณเมื่อมีการเพิ่ม อัปเดต หรือ
นำเครื่องบินออก
Plane.subscribe(session).collect { planes -> // Planes have changed; update plane rendering }
ระนาบมีคุณสมบัติดังต่อไปนี้
label: คำอธิบายเชิงความหมายของPlaneที่ระบุ อาจเป็นWALL,FLOOR,CEILINGหรือTABLEcenterPose: ท่าทางของจุดกึ่งกลางระนาบที่ตรวจพบ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 }