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

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

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

किसी सेशन को ऐक्सेस करना

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

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

ऐंकर बनाने और लोड करने के लिए, सेशन को कॉन्फ़िगर करने की ज़रूरत नहीं होती. हालांकि, XR सेशन में ऐंकर की जगह बनाए रखने की सुविधा डिफ़ॉल्ट रूप से चालू नहीं होती है. लोकल स्टोरेज से ऐंकर सेव करने और लोड करने के लिए, सेशन को कॉन्फ़िगर करें और AnchorPersistenceMode.LOCAL मोड सेट करें:

val newConfig = session.config.copy(
    anchorPersistence = AnchorPersistenceMode.LOCAL,
)
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. इससे ऐंकर, अटैच किए गए Anchorable को फ़ॉलो करता है.Plane

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

बिना ऐंकर किए जा सकने वाले एलिमेंट के ऐंकर बनाना

Anchorable से अटैच न किया गया ऐंकर बनाने के लिए:

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

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

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

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

Anchor.unpersist(session, uuid)

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

val uuids = Anchor.getPersistedAnchorUuids(session)