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

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
}