Membuat anchor dengan ARCore untuk Jetpack XR

Anchor menjelaskan lokasi dan orientasi tetap di dunia nyata. Melampirkan objek ke anchor membantu objek tampak ditempatkan secara realistis di dunia nyata.

Membuat sesi ARCore untuk Jetpack XR

Membuat anchor melalui sesi ARCore untuk Jetpack XR. Lihat Memahami siklus proses Sesi untuk mendapatkan Session.

Mengonfigurasi Sesi

Membuat dan memuat anchor tidak memerlukan konfigurasi sesi. Namun, persistensi anchor tidak diaktifkan secara default pada sesi XR. Untuk mempertahankan dan memuat anchor, konfigurasikan sesi:

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! */)
}

Mengaitkan konten ke lokasi tetap dalam ruang

Anchor dibuat menggunakan Pose, yang dapat ditafsirkan secara relatif terhadap Trackable yang ada atau tidak.

Membuat anchor yang relatif terhadap Trackable

Saat anchor dibuat relatif terhadap Trackable, seperti Plane, yang membuat anchor mengikuti Trackable yang terpasang saat bergerak melalui ruang.

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

Membuat anchor tanpa Trackable

Untuk membuat anchor yang tidak terpasang ke Trackable:

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

Melampirkan entitas ke anchor

Untuk merender model di lokasi ini, [buat GltfModel][5] dan tetapkan induknya ke AnchorEntity.

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

Memahami TrackingState

Setiap Trackable memiliki TrackingState yang harus diperiksa sebelum digunakan. Trackable yang memiliki TrackableState Tracking memiliki Pose yang secara aktif diupdate oleh sistem. Trackable yang merupakan Paused dapat menjadi Tracking di masa mendatang, sedangkan Stopped tidak akan pernah menjadi Tracking.

Mempertahankan Anchor di seluruh sesi

Anchor yang tidak dipertahankan akan menghilang setelah sesi dihancurkan. Dengan mempertahankan anchor, aplikasi Anda akan mengingat posisi anchor tersebut dalam data aplikasi pribadinya. Anchor ini dapat diambil dalam sesi berikutnya dan ditautkan di lokasi yang sama di dunia.

Untuk mempertahankan anchor, gunakan anchor.persist() seperti yang ditunjukkan di sini:

val uuid = anchor.persist()

Aplikasi Anda dapat mengambil anchor menggunakan UUID dalam sesi mendatang:

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

Jika Anda tidak lagi memerlukan anchor, panggil unpersist(). Tindakan ini akan menghapus anchor dari penyimpanan aplikasi Anda dan membuat UUID yang diberikan tidak dapat diambil untuk panggilan ke Anchor.load().

Anchor.unpersist(session, uuid)

Aplikasi Anda juga dapat meminta daftar semua anchor yang telah dipertahankan dan masih ada di penyimpanan aplikasi Anda:

val uuids = Anchor.getPersistedAnchorUuids(session)