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

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

Jetpack XR के लिए ARCore सेशन बनाना

Jetpack XR सेशन के लिए, ARCore की मदद से ऐंकर बनाएं. Session पाने के लिए, सेशन के लाइफ़साइकल को समझना लेख पढ़ें.

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

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

val newConfig = session.config.copy(
    anchorPersistence = Config.AnchorPersistenceMode.LOCAL,
)
when (val result = session.configure(newConfig)) {
    is SessionConfigureConfigurationNotSupported ->
        TODO(/* Some combinations of configurations are not valid. Handle this failure case. */)
    is SessionConfigureSuccess -> TODO(/* Success! */)
    else ->
        TODO(/* A different unhandled exception was thrown. */)
}

कॉन्टेंट को स्पेस में किसी तय जगह पर ऐंकर करना

एंकर को 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 तौर पर अपडेट करता है. Paused, आने वाले समय में Tracking बन सकता है. वहीं, Stopped कभी भी Tracking नहीं बन सकता.Trackable

सभी सेशन में ऐंकर को बनाए रखना

सेशन खत्म होने के बाद, सेव नहीं किया गया ऐंकर गायब हो जाता है. ऐंकर को सेव करने पर, आपका ऐप्लिकेशन अपने निजी ऐप्लिकेशन डेटा में ऐंकर की पोज़िशन को सेव कर लेता है. इस ऐंकर को बाद के सेशन में वापस लाया जा सकता है. साथ ही, इसे दुनिया में उसी जगह पर ऐंकर किया जाता है.

किसी ऐंकर को बनाए रखने के लिए, 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() पर कॉल करने के लिए वापस नहीं पाया जा सकता.

Anchor.unpersist(session, uuid)

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

val uuids = Anchor.getPersistedAnchorUuids(session)