অ্যাঙ্কর বাস্তব জগতে কোনও লোকেশন ও তার দিকনির্দেশ বর্ণনা করে। অ্যাঙ্করের সাথে কোনও অবজেক্ট অ্যাটাচ করলে, অবজেক্টটি বাস্তব জগতে বাস্তবসম্মতভাবে প্লেস করা হয়েছে বলে মনে হয় এবং প্রতিটি ফ্রেমে লজিক রান করতে না হওয়ায় আপনার অ্যাপের পাওয়ার সেভ হয়।
সেশন অ্যাক্সেস করা
Jetpack XR Session-এর জন্য ARCore-এর মাধ্যমে অ্যাঙ্কর তৈরি করুন। আপনি যদি XR-এর জন্য Jetpack Compose ব্যবহার করে স্পেশিয়াল UI
উন্নত করেন, তাহলে XR-এর জন্য Jetpack Compose থেকে
সেশন অ্যাক্সেস করুন। আপনি Jetpack SceneCore লাইব্রেরি থেকে স্পেশিয়ালাইজড এন্টিটি
নিয়ে কাজ করলে, Jetpack XR
Runtime থেকে সেশন অ্যাক্সেস করুন।
সেশন কনফিগার করা
অ্যাঙ্কর তৈরি ও লোড করার জন্য সেশন কনফিগার করার প্রয়োজন নেই।
তবে, XR সেশনে ডিফল্ট হিসেবে অ্যাঙ্কর পারসিস্টেন্স চালু করা থাকে না। লোকাল স্টোরেজ থেকে অ্যাঙ্কর সেভ
ও লোড করতে, সেশন কনফিগার করুন এবং
AnchorPersistenceMode.LOCAL মোড সেট করুন:
val newConfig = Config.Builder(session.config) .setAnchorPersistence(AnchorPersistenceMode.LOCAL) .build() when (val result = session.configure(newConfig)) { is SessionConfigureSuccess -> TODO(/* Success! */) else -> TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */) }
স্পেসে কোনও লোকেশনে কন্টেন্ট অ্যাঙ্কর করা
Pose ব্যবহার করে অ্যাঙ্কর তৈরি করা হয়, যা
আগে থেকে থাকা Anchorable বা ওয়ার্ল্ডে ফিক্স করা কোনও কিছুর সাথে সম্পর্কিত হতে পারে। Anchorable হল একটি
Trackable যার সাথে অ্যাঙ্কর অ্যাটাচ করা থাকতে পারে।
অ্যাঙ্করেবল আইটেমের সাপেক্ষে অ্যাঙ্কর তৈরি করা
Anchorable-এর সাপেক্ষে কোনও অ্যাঙ্কর তৈরি করা হলে, যেমন Plane, এটি
অ্যাঙ্করটিকে অ্যাটাচ করা Anchorable-কে ফলো করতে বাধ্য করে, যখন এটি স্পেসের মধ্যে দিয়ে যায়।
val anchor = plane.createAnchor(pose)
ওয়ার্ল্ডে ফিক্স করা একটি অ্যাঙ্কর তৈরি করা
ওয়ার্ল্ডে ফিক্সড আছে এমন কোনও অ্যাঙ্কর তৈরি করতে, এটিকে কোনও
Anchorable-এর সাথে অ্যাটাচ করবেন না। শুধুমাত্র সেইসব পয়েন্টের জন্য এই ধরনের অ্যাঙ্কর ব্যবহার করুন যেগুলি স্পেসে ফ্লোট করছে
কারণ, সেশন চলাকালীন স্থির বস্তুগুলি কোথায় আছে সেই সংক্রান্ত অনুমান সময়ের সাথে সাথে পরিবর্তিত হয়:
val anchor = Anchor.create(session, pose)
অ্যাঙ্করে এন্টিটি অ্যাটাচ করা
এই লোকেশনে কোনও মডেল রেন্ডার করতে, GltfModel তৈরি করুন এবং এর
প্যারেন্টকে AnchorSpace হিসেবে সেট করুন।
AnchorSpace.create(session, anchor).apply { parent = session.scene.activitySpace addChild(entity) }
TrackingState বোঝা
প্রতিটি Trackable-এর একটি TrackingState থাকে যা ব্যবহার করার আগে চেক করে নেওয়া উচিত।
Trackable-এর TrackableState Tracking হলে, সিস্টেম তার Pose অ্যাক্টিভভাবে
আপডেট করে। Trackable যা Paused তা ভবিষ্যতে Tracking হয়ে যেতে পারে, তবে যা 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() নম্বরে কল করুন। এটি আপনার অ্যাপের স্টোরেজ থেকে
অ্যাঙ্কর সরিয়ে দেয় এবং Anchor.load()-এ
কল করার জন্য প্রদত্ত UUID আর ফিরিয়ে আনা যায় না।
Anchor.unpersist(session, uuid)
এছাড়াও, আপনার অ্যাপ, সেভ করা এবং এখনও আপনার অ্যাপের স্টোরেজে থাকা সব অ্যাঙ্করের একটি তালিকা অনুরোধ করতে পারে:
val uuids = Anchor.getPersistedAnchorUuids(session)