Jetpack XR के लिए ARCore की मदद से ऐंकर बनाना

XR डिवाइसों के लिए ज़रूरी शर्तें
इस गाइड की मदद से, इन XR डिवाइसों के लिए अनुभव बनाए जा सकते हैं.
एक्सआर हेडसेट
तार वाले एक्सआर के स्मार्ट ग्लास

ऐंकर, असल दुनिया में किसी जगह और ओरिएंटेशन के बारे में बताता है. किसी ऑब्जेक्ट को ऐंकर से अटैच करने पर, ऑब्जेक्ट असल दुनिया में सही जगह पर दिखता है. साथ ही, हर फ़्रेम के लिए लॉजिक चलाने की ज़रूरत न होने की वजह से, आपके ऐप्लिकेशन की बैटरी भी बचती है.

कोई सेशन ऐक्सेस करना

Jetpack XR के लिए ARCore के Session की मदद से ऐंकर बनाएं. अगर Jetpack Compose for XR का इस्तेमाल करके, स्पेस से जुड़े यूज़र इंटरफ़ेस (यूआई) को बेहतर बनाया जा रहा है, तो 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 के हिसाब से समझा जा सकता है या दुनिया में फ़िक्स किया जा सकता है. An Anchorable एक Trackable है, जिससे ऐंकर अटैच किए जा सकते हैं.

किसी Anchorable के हिसाब से ऐंकर बनाना

जब किसी 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, सिस्टम की ओर से लगातार अपडेट किया जाता है. ऐसा हो सकता है कि 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() पर कॉल करें. इससे ऐंकर, आपके ऐप्लिकेशन के स्टोरेज से हट जाता है. साथ ही, दिए गए UUID को `Anchor.load()Anchor.load()` पर कॉल करने के लिए वापस नहीं लाया जा सकता.

Anchor.unpersist(session, uuid)

आपका ऐप्लिकेशन, सेव किए गए उन सभी ऐंकर की सूची का अनुरोध भी कर सकता है जो अब भी आपके ऐप्लिकेशन के स्टोरेज में मौजूद हैं:

val uuids = Anchor.getPersistedAnchorUuids(session)