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

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

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

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

Jetpack XR के लिए ARCore के Session की मदद से ऐंकर बनाएं. अगर Jetpack Compose for XR का इस्तेमाल करके, स्पेस से जुड़े यूज़र इंटरफ़ेस (यूआई) को बेहतर बनाया जा रहा है, तो Jetpack Compose for XR से कोई सेशन ऐक्सेस करें. अगर Jetpack SceneCore लाइब्रेरी से, स्पेस से जुड़ी इकाइयों के साथ काम किया जा रहा है, तो Jetpack XR Runtime से कोई सेशन ऐक्सेस करें.

सेशन को कॉन्फ़िगर करना

ऐंकर बनाने और लोड करने के लिए, सेशन को कॉन्फ़िगर करने की ज़रूरत नहीं होती. हालांकि, एक्सआर सेशन में ऐंकर परसिस्टेंस की सुविधा, डिफ़ॉल्ट रूप से चालू नहीं होती. ऐंकर को डिवाइस के स्टोरेज में सेव करने और वहां से लोड करने के लिए, सेशन को कॉन्फ़िगर करें और 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 के हिसाब से ऐंकर बनाना

जब किसी Anchorable के हिसाब से कोई ऐंकर बनाया जाता है, तो वह Plane जैसे Anchorable से अटैच हो जाता है. इससे, Anchorable के स्पेस में घूमने पर ऐंकर भी उसके साथ घूमता है.

val anchor = plane.createAnchor(pose)

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

किसी Anchorable से अटैच न होने वाला ऐंकर बनाने के लिए:

val anchor = Anchor.create(session, pose)

किसी इकाई को ऐंकर से अटैच करना

इस जगह पर कोई मॉडल रेंडर करने के लिए, बनाएं और उसके पैरंट को AnchorSpace पर सेट करें.GltfModel

AnchorEntity.create(session, anchor).apply {
    parent = session.scene.activitySpace
    addChild(entity)
}

TrackingState को समझना

हर Trackable का एक TrackingState होता है. इसका इस्तेमाल करने से पहले, इसे चेक किया जाना चाहिए. जिस Trackable का TrackableState, Tracking होता है, उसका Pose, सिस्टम की ओर से लगातार अपडेट किया जाता है. Paused वाला Trackable, आने वाले समय में Tracking बन सकता है. वहीं, Stopped वाला Trackable, कभी भी 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)