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

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

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

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

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 = Config.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 का इस्तेमाल करके बनाया जाता है. इसे किसी मौजूदा Trackable के हिसाब से इंटरप्रेट किया जा सकता है या नहीं भी किया जा सकता.

ट्रैक किए जा सकने वाले ऑब्जेक्ट के हिसाब से ऐंकर बनाना

जब किसी ऐंकर को Trackable के हिसाब से बनाया जाता है, जैसे कि Plane. इससे ऐंकर, अटैच किए गए Trackable को फ़ॉलो करता है, जब वह स्पेस में घूमता है.

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

Trackable के बिना ऐंकर बनाना

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

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 होता है. इसका इस्तेमाल करने से पहले, इसकी जांच कर लेनी चाहिए. Tracking के TrackableState वाले Trackable को सिस्टम, 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)