ตรวจหาเครื่องบินโดยใช้ ARCore สำหรับ Jetpack XR

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
}