สร้างจุดยึดด้วย ARCore สำหรับ Jetpack XR

หมุดอธิบายตำแหน่งและการวางแนวที่ตายตัวในโลกแห่งความเป็นจริง การแนบวัตถุกับจุดยึดช่วยให้วัตถุดูวางอยู่ในตำแหน่งที่สมจริงในโลกจริง

สร้างเซสชัน ARCore สำหรับ Jetpack XR

สร้างจุดยึดผ่านเซสชัน ARCore สำหรับ Jetpack XR ดูหัวข้อทำความเข้าใจวงจรของเซสชันเพื่อรับ Session

กำหนดค่าเซสชัน

การสร้างและโหลดหมุดไม่จำเป็นต้องมีการกําหนดค่าเซสชัน อย่างไรก็ตาม ระบบไม่ได้เปิดใช้การคงที่ของหมุดในเซสชัน XR โดยค่าเริ่มต้น หากต้องการเก็บข้อมูลและโหลดหมุด ให้กําหนดค่าเซสชัน ดังนี้

val newConfig = session.config.copy(
    anchorPersistence = Config.AnchorPersistenceMode.Enabled,
)
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! */)
}

ยึดเนื้อหาไว้ที่ตำแหน่งคงที่ในพื้นที่ทำงาน

ระบบจะสร้างจุดยึดโดยใช้ Pose ซึ่งสามารถตีความโดยสัมพันธ์กับ Trackable ที่มีอยู่หรือไม่ก็ได้

สร้างหมุดที่สัมพันธ์กับรายการที่ติดตามได้

เมื่อสร้างจุดยึดตาม Trackable เช่น Plane ซึ่งทำให้จุดยึดติดตาม Trackable ที่แนบอยู่เมื่อ Trackable นั้นเคลื่อนไหวผ่านพื้นที่

when (val result = trackable.createAnchor(pose)) {
    is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ }
    else -> { /* handle failure */ }
}

สร้างหมุดโดยไม่มีรายการที่ติดตามได้

วิธีสร้างหมุดที่ไม่ได้แนบอยู่กับ Trackable

when (val result = Anchor.create(session, pose)) {
    is AnchorCreateSuccess -> { /* anchor stored in `result.anchor`. */ }
    else -> { /* handle failure */ }
}

แนบเอนทิตีกับจุดยึด

หากต้องการแสดงผลโมเดลที่ตำแหน่งนี้ ให้ [สร้าง GltfModel][5] และตั้งค่าส่วนที่เป็นพ่อแม่เป็น AnchorEntity

AnchorEntity.create(session, anchor).apply {
    setParent(session.activitySpace)
    addChild(entity)
}

ทําความเข้าใจ TrackingState

Trackable แต่ละรายการมี TrackingState ที่ควรตรวจสอบก่อนใช้งาน Trackable ที่มี TrackableState เป็น Tracking จะมีการอัปเดต Pose โดยระบบอยู่อย่างต่อเนื่อง Trackable ที่ระบุว่า Paused อาจกลายเป็น Tracking ในอนาคต แต่Trackable ที่ระบุว่า Stopped จะกลายเป็น Tracking ไม่ได้

คงหมุดไว้ตลอดเซสชัน

หมุดที่ไม่คงที่จะหายไปหลังจากเซสชันถูกทำลาย การคงหมุดไว้จะทำให้แอปจดจำตําแหน่งของหมุดนั้นในข้อมูลแอปส่วนตัว ระบบจะเรียกข้อมูลจุดยึดนี้ในเซสชันถัดไปได้ และจุดยึดจะอยู่ในตำแหน่งเดียวกันในโลก

หากต้องการเก็บข้อมูลแอตทริบิวต์ anchor.persist() ไว้ ให้ใช้แอตทริบิวต์ดังกล่าวตามที่แสดงที่นี่

val uuid = anchor.persist()

แอปจะดึงข้อมูลแองเคอร์ได้โดยใช้ UUID ในเซสชันในอนาคต ดังนี้

when (val result = Anchor.load(session, uuid)) {
    is AnchorCreateSuccess -> {
        // Loading was successful. The anchor is stored in result.anchor.
    }
    else -> {
        // handle failure
    }
}

เมื่อไม่ต้องการหมุดยึดแล้ว ให้โทรไปที่ unpersist() ซึ่งจะนําหมุดออกจากพื้นที่เก็บข้อมูลของแอปและทําให้เรียกใช้ UUID ที่ระบุสําหรับการเรียกAnchor.load()ไม่ได้

Anchor.unpersist(session, uuid)

นอกจากนี้ แอปยังขอรายการหมุดทั้งหมดที่จัดเก็บไว้ซึ่งยังคงอยู่ในพื้นที่เก็บข้อมูลของแอปได้ด้วย โดยทำดังนี้

val uuids = Anchor.getPersistedAnchorUuids(session)