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

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

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

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

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

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

val newConfig = session.config.copy(
    anchorPersistence = Config.AnchorPersistenceMode.Enabled,
)
when (val result = session.configure(newConfig)) {
    is SessionConfigureConfigurationNotSupported ->
        TODO(/* Some combinations of configurations are not valid. Handle this failure case. */)
    is SessionConfigurePermissionsNotGranted ->
        TODO(/* The required permissions in result.permissions have not been granted. */)
    is SessionConfigureSuccess -> TODO(/* Success! */)
}

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

Pose का इस्तेमाल करके ऐंकर बनाया जाता है. इसे किसी मौजूदा Trackable के हिसाब से समझा जा सकता है या नहीं.

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

जब किसी Trackable के हिसाब से ऐंकर बनाया जाता है, जैसे कि Plane, तो ऐंकर, अटैच किए गए Trackable के साथ स्पेस में चलता है.

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

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

ऐसा ऐंकर बनाने के लिए जो Trackable से अटैच न हो:

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

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

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

AnchorEntity.create(session, anchor).apply {
    setParent(session.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() को कॉल करें. इससे ऐप्लिकेशन के स्टोरेज से ऐंकर हट जाता है और Anchor.load() को कॉल करने पर, दिए गए यूयूआईडी को वापस नहीं पाया जा सकता.

Anchor.unpersist(session, uuid)

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

val uuids = Anchor.getPersistedAnchorUuids(session)