Jetpack XR-এর জন্য ARCore দিয়ে অ্যাঙ্কর তৈরি করুন

প্রযোজ্য এক্সআর ডিভাইস
এই নির্দেশিকা আপনাকে এই ধরনের এক্সআর ডিভাইসগুলির জন্য অভিজ্ঞতা তৈরি করতে সাহায্য করে।
এক্সআর হেডসেট
তারযুক্ত এক্সআর চশমা

অ্যাঙ্কর বাস্তব জগতে কোনো অবস্থান ও অভিমুখ বর্ণনা করে। কোনো বস্তুকে অ্যাঙ্করের সাথে সংযুক্ত করলে তা বাস্তব জগতে বাস্তবসম্মতভাবে স্থাপিত বলে মনে হয় এবং প্রতি ফ্রেমে লজিক চালানোর প্রয়োজন না হওয়ায় আপনার অ্যাপের শক্তি সাশ্রয় হয়।

একটি সেশনে প্রবেশ করুন

একটি ARCore for Jetpack XR Session মাধ্যমে অ্যাঙ্কর তৈরি করুন। আপনি যদি Jetpack Compose for XR ব্যবহার করে স্পেশিয়াল UI উন্নত করেন, তাহলে Jetpack Compose for XR থেকে একটি সেশন অ্যাক্সেস করুন । আপনি যদি 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)
}

ট্র্যাকিং অবস্থা বুঝুন

প্রতিটি Trackable একটি TrackingState থাকে যা ব্যবহার করার আগে যাচাই করে নেওয়া উচিত। যে Trackable TrackableState ' Tracking থাকে, সিস্টেম তার Pose সক্রিয়ভাবে আপডেট করে। একটি ' Paused ' Trackable ভবিষ্যতে 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)