XR_ANDROID_trackables_image
Name String
XR_ANDROID_trackables_image
एक्सटेंशन टाइप
इंस्टेंस एक्सटेंशन
रजिस्टर किया गया एक्सटेंशन नंबर
710
बदलाव
1
पुष्टि की स्थिति
पुष्टि नहीं की गई
एक्सटेंशन और वर्शन की डिपेंडेंसी
XR_EXT_future
और
XR_ANDROID_trackables
पिछली बार बदलाव किए जाने की तारीख
2025-04-08
आईपी स्टेटस
आईपी से जुड़े किसी भी दावे की जानकारी नहीं है.
योगदान देने वाले
क्रिस्टोफ़र डोर, Google
लेवाना चेन, Google
जेरेड फ़ाइंडर, Google
स्पेंसर क्विन, Google
निहाव जैन, Google
डिएगो टिपल्डी, Google
डैनियल गुटेनबर्ग, Qualcomm
मार्क वडासी, Qualcomm
मार्क्स बिर्कनर, Qualcomm
मैक्सिमिलियन मेयर, Qualcomm
खास जानकारी
इस एक्सटेंशन की मदद से, इनपुट रेफ़रंस इमेज के सेट के हिसाब से प्लैनर इमेज को ट्रैक किया जा सकता है.
अनुमतियां
Android ऐप्लिकेशन के मेनिफ़ेस्ट में, android.permission.SCENE_UNDERSTANDING_COARSE अनुमति का एलान ज़रूर किया जाना चाहिए. ऐसा इसलिए, क्योंकि यह एक्सटेंशन XR_ANDROID_trackables पर निर्भर करता है और एनवायरमेंट की ज्यामिति को दिखाता है. android.permission.SCENE_UNDERSTANDING_COARSE अनुमति को खतरनाक अनुमति माना जाता है.
(सुरक्षा का लेवल: खतरनाक)
सिस्टम की क्षमता की जांच करना
XrSystemImageTrackingPropertiesANDROID स्ट्रक्चर को इस तरह से परिभाषित किया गया है:
typedef struct XrSystemImageTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsImageTracking;
XrBool32 supportsPhysicalSizeEstimation;
uint32_t maxTrackedImageCount;
uint32_t maxLoadedImageCount;
} XrSystemImageTrackingPropertiesANDROID;
सदस्यों के बारे में जानकारी
typeइस स्ट्रक्चर का XrStructureType है.next,NULLहोता है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर होता है. इस तरह के स्ट्रक्चर, OpenXR के मुख्य स्पेसिफ़िकेशन या इस एक्सटेंशन में तय नहीं किए गए हैं. स्ट्रक्चर चेन के बारे में ज़्यादा जानकारी के लिए, एक्सटेंड किए जा रहे स्ट्रक्चर ( XrSystemProperties ) देखें.supportsImageTrackingएकXrBool32है. इससे पता चलता है कि मौजूदा सिस्टम में इमेज ट्रैकिंग की सुविधा उपलब्ध है या नहीं.supportsPhysicalSizeEstimationएकXrBool32है. इससे पता चलता है कि मौजूदा सिस्टम, इमेज के साइज़ का अनुमान लगाता है या नहीं.maxTrackedImageCount, एक साथ ट्रैक की जा सकने वाली इमेज की कुल संख्या है.maxLoadedImageCount, सभी डेटाबेस में लोड की जा सकने वाली रेफ़रंस इमेज की कुल ज़्यादा से ज़्यादा संख्या है.
कोई ऐप्लिकेशन, xrGetSystemProperties को कॉल करते समय, XrSystemImageTrackingPropertiesANDROID स्ट्रक्चर के साथ XrSystemProperties को बढ़ाकर यह देख सकता है कि सिस्टम में इमेज ट्रैकिंग की सुविधा है या नहीं . अगर supportsImageTracking, XR_FALSE है, तो रनटाइम को इमेज ट्रैकर बनाने के लिए XR_ERROR_FEATURE_UNSUPPORTED ज़रूर दिखाना चाहिए .
अगर कोई रनटाइम, इमेज ट्रैकिंग की सुविधा देता है, तो उसे किसी भी समय maxTrackedImageCount ट्रैक की गई इमेज के साथ काम करना ज़रूरी है.
अगर कोई रनटाइम इमेज ट्रैकिंग की सुविधा के साथ काम करता है, तो उसे किसी भी समय maxLoadedImageCount लोड की गई इमेज के साथ काम करना ज़रूरी है.
अगर कोई रनटाइम, इमेज के साइज़ का अनुमान लगाने की सुविधा के साथ काम करता है, तो ऐप्लिकेशन can सेट XrTrackableImageDatabaseEntryANDROID :: physicalWidth 0 करके, साइज़ का अनुमान लगाने की सुविधा के इस्तेमाल के बारे में बता सकता है. अगर ऐसा नहीं है, तो ऐप्लिकेशन को XrTrackableImageDatabaseEntryANDROID :: physicalWidth को पॉज़िटिव वैल्यू पर सेट करना ज़रूरी है. ऐसा न करने पर, XR_ERROR_VALIDATION_FAILURE दिखेगा.
मान्य इस्तेमाल (इंप्लिसिट)
- XrSystemImageTrackingPropertiesANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_trackables_imageएक्सटेंशन को चालू करना ज़रूरी है -
typeज़रूरी है किXR_TYPE_SYSTEM_IMAGE_TRACKING_PROPERTIES_ANDROID -
nextज़रूरी है किNULLहो या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर हो
डेटाबेस बनाना
ऐप्लिकेशन, एक या उससे ज़्यादा XrTrackableImageDatabaseEntryANDROID स्ट्रक्चर बनाकर और उन्हें XrTrackableImageDatabaseCreateInfoANDROID स्ट्रक्चर के ज़रिए xrCreateTrackableImageDatabaseAsyncANDROID फ़ंक्शन को पास करके, XrTrackableImageDatabaseANDROID हैंडल बना सकता है.
XrTrackableImageDatabaseANDROID हैंडल बनाते समय, ऐप्लिकेशन को कम से कम एक XrTrackableImageDatabaseEntryANDROID उपलब्ध कराना ज़रूरी है.
XrTrackableImageDatabaseANDROID एक हैंडल है. यह प्रोसेस की गई रेफ़रंस इमेज के सेट को दिखाता है. इन्हें एनवायरमेंट में खोजा और ट्रैक किया जा सकता है.
XR_DEFINE_HANDLE(XrTrackableImageDatabaseANDROID)
XrTrackableImageDatabaseEntryANDROID स्ट्रक्चर को इस तरह से परिभाषित किया गया है:
typedef struct XrTrackableImageDatabaseEntryANDROID {
XrStructureType type;
const void* next;
XrTrackableImageTrackingModeANDROID trackingMode;
float physicalWidth;
uint32_t imageWidth;
uint32_t imageHeight;
XrTrackableImageFormatANDROID format;
uint32_t bufferSize;
const uint8_t* buffer;
} XrTrackableImageDatabaseEntryANDROID;
सदस्यों के बारे में जानकारी
typeइस स्ट्रक्चर का XrStructureType है.next,NULLहोता है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर होता है. इस तरह के स्ट्रक्चर, OpenXR के मुख्य स्पेसिफ़िकेशन या इस एक्सटेंशन में तय नहीं किए गए हैं.trackingMode, XrTrackableImageTrackingModeANDROID है. यह ट्रैकिंग के लिए पसंदीदा मोड दिखाता है.physicalWidthसे इमेज की चौड़ाई मीटर में पता चलती है. अगर यह वैल्यू शून्य है, तो इमेज के साइज़ का अनुमान ऑनलाइन लगाया जाएगा.imageWidthसे, पिक्सल में इमेज की चौड़ाई का पता चलता है.imageHeightपिक्सल में इमेज की ऊंचाई दिखाता है.formatएक XrTrackableImageFormatANDROID है. यहbufferमें मौजूद इमेज डेटा का फ़ॉर्मैट दिखाता है.bufferSize,bufferकी बाइट की लंबाई दिखाता है .buffer,uint8_tबफ़र है. इसमें रेफ़रंस इमेज के पिक्सल का डेटा होता है.bufferका कॉन्टेंट, डेटाबेस बनाने के एसिंक ऑपरेशन के दौरान मान्य होना चाहिए. यह ऑपरेशन, xrCreateTrackableImageDatabaseAsyncANDROID से शुरू होता है और xrCreateTrackableImageDatabaseCompleteANDROID से पूरा होता है.
अगर XrSystemImageTrackingPropertiesANDROID :: supportsPhysicalSizeEstimation XR_TRUE है, तो ऐप्लिकेशन, ऑनलाइन साइज़ का अनुमान लगाने का अनुरोध करने के लिए physicalWidth को 0 पर सेट कर सकता है .
अगर bufferSize, एंट्री के imageWidth , imageHeight, और format के आधार पर तय किए गए साइज़ से मेल नहीं खाता है, तो रनटाइम xrCreateTrackableImageDatabaseAsyncANDROID से XR_ERROR_VALIDATION_FAILURE दिखा सकता है .
मान्य इस्तेमाल (इंप्लिसिट)
- XrTrackableImageDatabaseEntryANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_trackables_imageएक्सटेंशन को चालू करना ज़रूरी है -
typeज़रूरी है किXR_TYPE_TRACKABLE_IMAGE_DATABASE_ENTRY_ANDROID -
nextज़रूरी है किNULLहो या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर हो -
trackingModeकी वैल्यू, XrTrackableImageTrackingModeANDROID की मान्य वैल्यू होनी चाहिए -
format, XrTrackableImageFormatANDROID की मान्य वैल्यू होनी चाहिए -
buffer,bufferSizeuint8_tवैल्यू के कलेक्शन का पॉइंटर होना चाहिए -
bufferSizeपैरामीटर की वैल्यू,0से ज़्यादा होनी चाहिए
XrTrackableImageDatabaseCreateInfoANDROID स्ट्रक्चर को इस तरह से तय किया गया है:
typedef struct XrTrackableImageDatabaseCreateInfoANDROID {
XrStructureType type;
const void* next;
uint32_t entryCount;
const XrTrackableImageDatabaseEntryANDROID* entries;
} XrTrackableImageDatabaseCreateInfoANDROID;
सदस्यों के बारे में जानकारी
typeइस स्ट्रक्चर का XrStructureType है.next,NULLहोता है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर होता है. इस तरह के स्ट्रक्चर, OpenXR के मुख्य स्पेसिफ़िकेशन या इस एक्सटेंशन में तय नहीं किए गए हैं.entryCount,uint32_tहै. यहentriesकलेक्शन में मौजूद एलिमेंट की संख्या के बारे में बताता है.entries, XrTrackableImageDatabaseEntryANDROID स्ट्रक्चर का एक कलेक्शन है.
मान्य इस्तेमाल (इंप्लिसिट)
- XrTrackableImageDatabaseCreateInfoANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_trackables_imageएक्सटेंशन को चालू करना ज़रूरी है -
typeज़रूरी है किXR_TYPE_TRACKABLE_IMAGE_DATABASE_CREATE_INFO_ANDROID -
nextज़रूरी है किNULLहो या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर हो -
entries,entryCountमान्य XrTrackableImageDatabaseEntryANDROID स्ट्रक्चर की एक ऐरे का पॉइंटर होना चाहिए -
entryCountपैरामीटर की वैल्यू,0से ज़्यादा होनी चाहिए
XrCreateTrackableImageDatabaseCompletionANDROID स्ट्रक्चर को इस तरह परिभाषित किया गया है:
typedef struct XrCreateTrackableImageDatabaseCompletionANDROID {
XrStructureType type;
void* next;
XrResult futureResult;
XrTrackableImageDatabaseANDROID database;
} XrCreateTrackableImageDatabaseCompletionANDROID;
सदस्यों के बारे में जानकारी
typeइस स्ट्रक्चर का XrStructureType है.next,NULLहोता है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर होता है. इस तरह के स्ट्रक्चर, OpenXR के मुख्य स्पेसिफ़िकेशन या इस एक्सटेंशन में तय नहीं किए गए हैं.futureResult, एसिंक्रोनस ऑपरेशन का XrResult है.database, बनाया गया XrTrackableImageDatabaseANDROID हैंडल है.
आने वाले समय में इस्तेमाल किए जाने वाले रिटर्न कोड
futureResult वैल्यू:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHED
मान्य इस्तेमाल (इंप्लिसिट)
- XrCreateTrackableImageDatabaseCompletionANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_trackables_imageएक्सटेंशन को चालू करना ज़रूरी है -
typeज़रूरी है किXR_TYPE_CREATE_TRACKABLE_IMAGE_DATABASE_COMPLETION_ANDROID -
nextज़रूरी है किNULLहो या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर हो -
futureResultmust be a valid XrResult value -
database, XrTrackableImageDatabaseANDROID का मान्य हैंडल होना चाहिए
xrCreateTrackableImageDatabaseAsyncANDROID फ़ंक्शन को इस तरह से परिभाषित किया गया है:
XrResult xrCreateTrackableImageDatabaseAsyncANDROID(
XrSession session,
const XrTrackableImageDatabaseCreateInfoANDROID* createInfo,
XrFutureEXT* future);
पैरामीटर की जानकारी
session, xrCreateSession की मदद से पहले से बनाए गए XrSession का हैंडल है .createInfo, XrTrackableImageDatabaseCreateInfoANDROID स्ट्रक्चर का पॉइंटर है.future, बनाए गएXrFutureEXTका पॉइंटर है .
मान्य इस्तेमाल (इंप्लिसिट)
- xrCreateTrackableImageDatabaseAsyncANDROID को कॉल करने से पहले,
XR_ANDROID_trackables_imageएक्सटेंशन को चालू करना ज़रूरी है -
session, XrSession का एक मान्य हैंडल होना चाहिए -
createInfo, XrTrackableImageDatabaseCreateInfoANDROID स्ट्रक्चर का मान्य पॉइंटर होना चाहिए -
future,XrFutureEXTवैल्यू का पॉइंटर होना चाहिए
रिटर्न कोड
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FEATURE_UNSUPPORTEDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_IMAGE_FORMAT_UNSUPPORTED_ANDROIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
xrCreateTrackableImageDatabaseCompleteANDROID फ़ंक्शन को इस तरह से परिभाषित किया गया है:
XrResult xrCreateTrackableImageDatabaseCompleteANDROID(
XrSession session,
XrFutureEXT future,
XrCreateTrackableImageDatabaseCompletionANDROID* completion);
पैरामीटर की जानकारी
session, xrCreateSession की मदद से पहले से बनाए गए XrSession का हैंडल है .futureको आने वाले समय मेंXrFutureEXTके तौर पर पूरा किया जाएगा.completion, XrCreateTrackableImageDatabaseCompletionANDROID स्ट्रक्चर का पॉइंटर है. इसमें ऑपरेशन का नतीजा शामिल होता है.
मान्य इस्तेमाल (इंप्लिसिट)
- xrCreateTrackableImageDatabaseCompleteANDROID को कॉल करने से पहले,
XR_ANDROID_trackables_imageएक्सटेंशन को चालू करना ज़रूरी है -
session, XrSession का एक मान्य हैंडल होना चाहिए -
completion, XrCreateTrackableImageDatabaseCompletionANDROID स्ट्रक्चर का पॉइंटर होना चाहिए
रिटर्न कोड
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_FUTURE_INVALID_EXTXR_ERROR_FUTURE_PENDING_EXTXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
xrDestroyTrackableImageDatabaseANDROID फ़ंक्शन को इस तरह से परिभाषित किया गया है:
XrResult xrDestroyTrackableImageDatabaseANDROID(
XrTrackableImageDatabaseANDROID database);
पैरामीटर की जानकारी
database, मिटाने के लिए XrTrackableImageDatabaseANDROID हैंडल है.
मान्य इस्तेमाल (इंप्लिसिट)
- xrDestroyTrackableImageDatabaseANDROID को कॉल करने से पहले,
XR_ANDROID_trackables_imageएक्सटेंशन को चालू करना ज़रूरी है -
database, XrTrackableImageDatabaseANDROID का मान्य हैंडल होना चाहिए
थ्रेड सेफ़्टी
databaseऔर बच्चों के सभी हैंडल को बाहरी तौर पर सिंक किया जाना चाहिए
रिटर्न कोड
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
इमेज ट्रैक करना
यह एक्सटेंशन, XrTrackableTypeANDROID में XR_TRACKABLE_TYPE_IMAGE_ANDROID जोड़ता है .
ऐप्लिकेशन, इमेज को ट्रैक करने के लिए xrCreateTrackableTrackerANDROID को कॉल करके और XrTrackableTrackerCreateInfoANDROID :: trackableType में ट्रैक किए जा सकने वाले टाइप के तौर पर XR_TRACKABLE_TYPE_IMAGE_ANDROID को तय करके, XrTrackableTrackerANDROID बना सकता है.
अगर XrTrackableTrackerCreateInfoANDROID :: trackableType XR_TRACKABLE_TYPE_IMAGE_ANDROID है और xrGetSystemProperties के ज़रिए XrSystemImageTrackingPropertiesANDROID :: supportsImageTracking XR_FALSE दिखाता है, तो रनटाइम को XR_ERROR_FEATURE_UNSUPPORTED दिखाना ज़रूरी है .
XrTrackableImageConfigurationANDROID स्ट्रक्चर को इस तरह परिभाषित किया गया है:
typedef struct XrTrackableImageConfigurationANDROID {
XrStructureType type;
const void* next;
uint32_t databaseCount;
const XrTrackableImageDatabaseANDROID* databases;
} XrTrackableImageConfigurationANDROID;
सदस्यों के बारे में जानकारी
typeइस स्ट्रक्चर का XrStructureType है.next,NULLहोता है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर होता है. इस तरह के स्ट्रक्चर, OpenXR के मुख्य स्पेसिफ़िकेशन या इस एक्सटेंशन में तय नहीं किए गए हैं.databaseCountएकuint32_tहै, जोdatabasesमें मौजूद एलिमेंट की संख्या तय करता हैdatabases, XrTrackableImageDatabaseANDROID की एक ऐसी ऐरे है जो उन डेटाबेस के बारे में बताती है जिनसे ट्रैकर बनाना है.
ऐप्लिकेशन को XrTrackableTrackerCreateInfoANDROID की next चेन में XrTrackableImageConfigurationANDROID जोड़कर, मान्य कॉन्फ़िगरेशन सेट करना ज़रूरी है . ऐसा न होने पर, रनटाइम को XR_ERROR_VALIDATION_FAILURE दिखाना ज़रूरी है .
ऐप्लिकेशन को ट्रैकर बनाने के लिए, कम से कम एक XrTrackableImageDatabaseANDROID स्ट्रक्चर ज़रूर देना चाहिए.
मान्य इस्तेमाल (इंप्लिसिट)
- XrTrackableImageConfigurationANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_trackables_imageएक्सटेंशन को चालू करना ज़रूरी है -
typeज़रूरी है किXR_TYPE_TRACKABLE_IMAGE_CONFIGURATION_ANDROID -
nextज़रूरी है किNULLहो या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर हो -
databases,databaseCountमान्य XrTrackableImageDatabaseANDROID हैंडल की एक ऐरे का पॉइंटर होना चाहिए -
databaseCountपैरामीटर की वैल्यू,0से ज़्यादा होनी चाहिए
XrTrackableImageTrackingModeANDROID enum, इमेज के लिए काम करने वाले ट्रैकिंग मोड के बारे में बताता है.
typedef enum XrTrackableImageTrackingModeANDROID {
XR_TRACKABLE_IMAGE_TRACKING_MODE_DYNAMIC_ANDROID = 1,
XR_TRACKABLE_IMAGE_TRACKING_MODE_STATIC_ANDROID = 2,
XR_TRACKABLE_IMAGE_TRACKING_MODE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrTrackableImageTrackingModeANDROID;
गिनती की गई वैल्यू की जानकारी
XR_TRACKABLE_IMAGE_TRACKING_MODE_DYNAMIC_ANDROID— यह मोड सबसे सटीक होता है. साथ ही, इससे चलती हुई इमेज को कम इंतज़ार के समय में ट्रैक किया जा सकता है. यह सबसे ज़्यादा बैटरी भी खर्च करता है.XR_TRACKABLE_IMAGE_TRACKING_MODE_STATIC_ANDROID— इस मोड का इस्तेमाल उन इमेज के लिए किया जाना चाहिए जो स्टैटिक या सेमी-स्टैटिक होती हैं. इस मोड में, डाइनैमिक मोड की तुलना में बैटरी की खपत कम होती है. अगर किसी स्टैटिक इमेज को एक जगह से दूसरी जगह ले जाया जा रहा है, तो उसे डाइनैमिक मोड का इस्तेमाल करने की तुलना में बहुत ज़्यादा समय बाद अपडेट किया जाएगा.
XrTrackableImageFormatANDROID enum, इमेज के साथ काम करने वाले फ़ॉर्मैट के बारे में बताता है.
typedef enum XrTrackableImageFormatANDROID {
XR_TRACKABLE_IMAGE_FORMAT_R8G8B8A8_ANDROID = 1,
XR_TRACKABLE_IMAGE_FORMAT_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrTrackableImageFormatANDROID;
गिनती की गई वैल्यू की जानकारी
XR_TRACKABLE_IMAGE_FORMAT_R8G8B8A8_ANDROID— RGBA इमेज फ़ॉर्मैट, जिसमें हर चैनल के लिए 8 बिट का रंग और पारदर्शिता डेटा होता है.
xrAddTrackableImageDatabaseANDROID फ़ंक्शन को इस तरह से परिभाषित किया गया है:
XrResult xrAddTrackableImageDatabaseANDROID(
XrTrackableTrackerANDROID tracker,
XrTrackableImageDatabaseANDROID database);
पैरामीटर की जानकारी
tracker, XrTrackableTrackerANDROID हैंडल है. इसमेंdatabaseको जोड़ा जाता है.database,trackerमें जोड़ने के लिए XrTrackableImageDatabaseANDROID हैंडल है .
जब किसी ट्रैकर में XrTrackableImageDatabaseANDROID जोड़ा जाता है, तो उस डेटाबेस की रेफ़रंस इमेज को पहचान और ट्रैक करने के लिए ज़रूर इस्तेमाल किया जाना चाहिए. इसके अलावा, उन सभी डेटाबेस को भी इस्तेमाल किया जाना चाहिए जिन्हें पहले xrAddTrackableImageDatabaseANDROID की मदद से जोड़ा गया था या ट्रैकर बनाते समय XrTrackableImageConfigurationANDROID स्ट्रक्चर के ज़रिए जोड़ा गया था.
मान्य इस्तेमाल (इंप्लिसिट)
- xrAddTrackableImageDatabaseANDROID को कॉल करने से पहले,
XR_ANDROID_trackables_imageएक्सटेंशन को चालू करना ज़रूरी है -
tracker, XrTrackableTrackerANDROID का एक मान्य हैंडल होना चाहिए -
database, XrTrackableImageDatabaseANDROID का मान्य हैंडल होना चाहिए -
databaseऔरtracker, दोनों को एक ही XrSession से बनाया, असाइन किया या वापस पाया गया होना चाहिए
रिटर्न कोड
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
xrRemoveTrackableImageDatabaseANDROID फ़ंक्शन को इस तरह से परिभाषित किया गया है:
XrResult xrRemoveTrackableImageDatabaseANDROID(
XrTrackableTrackerANDROID tracker,
XrTrackableImageDatabaseANDROID database);
पैरामीटर की जानकारी
tracker, XrTrackableTrackerANDROID हैंडल है. इसका इस्तेमालdatabaseको हटाने के लिए किया जाता है.database, XrTrackableImageDatabaseANDROID हैंडल है. इसेtrackerसे हटाना है.
जब किसी XrTrackableImageDatabaseANDROID को XrTrackableTrackerANDROID से हटा दिया जाता है , तो उस डेटाबेस के XrTrackableImageDatabaseEntryANDROID स्ट्रक्चर को अब पहचान और ट्रैकिंग के लिए इस्तेमाल नहीं किया जाना चाहिए. उस डेटाबेस की ट्रैक की जा रही किसी भी एंट्री की रिपोर्ट नहीं दी जानी चाहिए. इस कार्रवाई के दौरान, हटाए गए XrTrackableImageDatabaseANDROID हैंडल को सीधे तौर पर डिस्ट्रॉय नहीं किया जाना चाहिए.
मान्य इस्तेमाल (इंप्लिसिट)
- xrRemoveTrackableImageDatabaseANDROID को कॉल करने से पहले,
XR_ANDROID_trackables_imageएक्सटेंशन को चालू करना ज़रूरी है -
tracker, XrTrackableTrackerANDROID का एक मान्य हैंडल होना चाहिए -
database, XrTrackableImageDatabaseANDROID का मान्य हैंडल होना चाहिए -
databaseऔरtracker, दोनों को एक ही XrSession से बनाया, असाइन किया या वापस पाया गया होना चाहिए
रिटर्न कोड
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
इमेज पाना
xrGetTrackableImageANDROID फ़ंक्शन को इस तरह से परिभाषित किया गया है:
XrResult xrGetTrackableImageANDROID(
XrTrackableTrackerANDROID tracker,
const XrTrackableGetInfoANDROID* getInfo,
XrTrackableImageANDROID* trackable);
पैरामीटर की जानकारी
tracker, क्वेरी करने के लिए XrTrackableTrackerANDROID है.getInfo, XrTrackableGetInfoANDROID है. इसमें ट्रैक किए जा सकने वाले क्यूआर कोड को पाने के लिए इस्तेमाल की गई जानकारी होती है.trackable, XrTrackableImageANDROID स्ट्रक्चर का पॉइंटर है. इसमें ट्रैक की जा सकने वाली इमेज वापस लाई जाती है.
अगर XrTrackableANDROID का ट्रैक किया जा सकने वाला टाइप XR_TRACKABLE_TYPE_IMAGE_ANDROID नहीं है या XrTrackableTrackerANDROID का ट्रैक किया जा सकने वाला टाइप XR_TRACKABLE_TYPE_IMAGE_ANDROID नहीं है , तो रनटाइम को XR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROID दिखाना ज़रूरी है .
मान्य इस्तेमाल (इंप्लिसिट)
- xrGetTrackableImageANDROID को कॉल करने से पहले,
XR_ANDROID_trackables_imageएक्सटेंशन को चालू करना ज़रूरी है -
tracker, XrTrackableTrackerANDROID का एक मान्य हैंडल होना चाहिए -
getInfo, मान्य XrTrackableGetInfoANDROID स्ट्रक्चर का पॉइंटर होना चाहिए -
trackable, XrTrackableImageANDROID स्ट्रक्चर का पॉइंटर होना चाहिए
रिटर्न कोड
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROIDXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
XrTrackableImageANDROID स्ट्रक्चर को इस तरह परिभाषित किया गया है:
typedef struct XrTrackableImageANDROID {
XrStructureType type;
const void* next;
XrTrackingStateANDROID trackingState;
XrTime lastUpdatedTime;
XrTrackableImageDatabaseANDROID database;
uint32_t databaseEntryIndex;
XrPosef centerPose;
XrExtent2Df extents;
} XrTrackableImageANDROID;
सदस्यों के बारे में जानकारी
typeइस स्ट्रक्चर का XrStructureType है.next,NULLहोता है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर होता है. इस तरह के स्ट्रक्चर, OpenXR के मुख्य स्पेसिफ़िकेशन या इस एक्सटेंशन में तय नहीं किए गए हैं.trackingState, इमेज का XrTrackingStateANDROID है.lastUpdatedTime, इमेज के आखिरी अपडेट काXrTimeहै.database, XrTrackableImageDatabaseANDROID हैंडल है. इस इमेज को इसी से ट्रैक किया गया था.databaseEntryIndexवह इंडेक्स है जो XrTrackableImageDatabaseCreateInfoANDROID ::entriesऐरे केdatabaseमें मैप करता है .centerPose, XrTrackableGetInfoANDROID ::baseSpaceमें मौजूद इमेज का XrPosef है . इमेज, XZ प्लैन में मौजूद है. इसमें X, इमेज के दाईं ओर और Z, इमेज के सबसे नीचे की ओर है.extents, इमेज के XrExtent2Df डाइमेंशन हैं. बाउंडिंग बॉक्स की सीमा इन पॉइंट पर है:centerPose+/- (extents/ 2).
मान्य इस्तेमाल (इंप्लिसिट)
- XrTrackableImageANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_trackables_imageएक्सटेंशन को चालू करना ज़रूरी है -
typeज़रूरी है किXR_TYPE_TRACKABLE_IMAGE_ANDROID -
nextज़रूरी है किNULLहो या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर हो -
trackingStateकी वैल्यू, XrTrackingStateANDROID की मान्य वैल्यू होनी चाहिए -
database, XrTrackableImageDatabaseANDROID का मान्य हैंडल होना चाहिए
गड़बड़ियों को ठीक करना
ऐप्लिकेशन को xrPollEvent का इस्तेमाल करके, XrEventDataImageTrackingLostANDROID इवेंट के लिए पोल करना ज़रूरी है. साथ ही, उसे इस इवेंट को अनदेखा नहीं करना चाहिए.
XrEventDataImageTrackingLostANDROID स्ट्रक्चर को इस तरह परिभाषित किया गया है:
typedef struct XrEventDataImageTrackingLostANDROID {
XrStructureType type;
const void* next;
XrTime time;
} XrEventDataImageTrackingLostANDROID;
सदस्यों के बारे में जानकारी
typeइस स्ट्रक्चर का XrStructureType है.next,NULLहोता है या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर होता है. इस तरह के स्ट्रक्चर, OpenXR के मुख्य स्पेसिफ़िकेशन या इस एक्सटेंशन में तय नहीं किए गए हैं.timeXrTime
XrEventDataImageTrackingLostANDROID इवेंट मिलने का मतलब है कि इमेज ट्रैकिंग में समस्या आई है. साथ ही, सिस्टम में गड़बड़ी की वजह से मौजूदा संसाधन अमान्य हो गए हैं. ऐप्लिकेशन को सभी XrTrackableImageDatabaseANDROID हैंडल मिटाने होंगे. साथ ही, अगर उसे इमेज ट्रैकिंग जारी रखनी है, तो उन्हें फिर से बनाना होगा. ऐप्लिकेशन को इमेज ट्रैकिंग से जुड़े सभी XrTrackableTrackerANDROID हैंडल भी मिटाने होंगे. अगर उसे इमेज ट्रैकिंग जारी रखनी है, तो उसे इन हैंडल को फिर से बनाना होगा.
मान्य इस्तेमाल (इंप्लिसिट)
- XrEventDataImageTrackingLostANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_trackables_imageएक्सटेंशन को चालू करना ज़रूरी है -
typeज़रूरी है किXR_TYPE_EVENT_DATA_IMAGE_TRACKING_LOST_ANDROID -
nextज़रूरी है किNULLहो या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर हो
ट्रैक की जा सकने वाली इमेज पाने के लिए कोड का उदाहरण
यहां दिए गए उदाहरण कोड में, ट्रैक की जा सकने वाली इमेज पाने का तरीका बताया गया है.
XrInstance instance; // Previously initialized.
XrSession session; // Previously initialized.
XrSystemId systemId; // Previously initialized.
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrGetSystemProperties xrGetSystemProperties; // Previously initialized.
PFN_xrPollFutureEXT xrPollFutureEXT; // Previously initialized.
PFN_xrCreateTrackableTrackerANDROID xrCreateTrackableTrackerANDROID; // Previously initialized.
PFN_xrGetAllTrackablesANDROID xrGetAllTrackablesANDROID; // Previously initialized.
PFN_xrDestroyTrackableTrackerANDROID xrDestroyTrackableTrackerANDROID; // Previously initialized.
PFN_xrGetTrackableImageANDROID xrGetTrackableImageANDROID; // Previously initialized.
PFN_xrCreateTrackableImageDatabaseAsyncANDROID xrCreateTrackableImageDatabaseAsyncANDROID; // Previously initialized.
PFN_xrCreateTrackableImageDatabaseCompleteANDROID xrCreateTrackableImageDatabaseCompleteANDROID; // Previously initialized.
PFN_xrDestroyTrackableImageDatabaseANDROID xrDestroyTrackableImageDatabaseANDROID; // Previously initialized.
PFN_xrAddTrackableImageDatabaseANDROID xrAddTrackableImageDatabaseANDROID; // Previously initialized.
PFN_xrRemoveTrackableImageDatabaseANDROID xrRemoveTrackableImageDatabaseANDROID; // Previously initialized.
XrTime updateTime; // Time used for the current frame's simulation update.
XrSpace appSpace; // Space created for XR_REFERENCE_SPACE_TYPE_LOCAL.
// Inspect system capability
XrSystemImageTrackingPropertiesANDROID imageProperty {
.type = XR_TYPE_SYSTEM_IMAGE_TRACKING_PROPERTIES_ANDROID,
.next = nullptr,
};
XrSystemProperties systemProperties {
.type = XR_TYPE_SYSTEM_PROPERTIES,
.next = &imageProperty,
};
CHK_XR(xrGetSystemProperties(instance, systemId, &systemProperties));
if (!imageProperty.supportsImageTracking) {
// image tracking is not supported.
return;
}
uint8_t* imageBuffer; // Load the image buffer.
uint32_t imageBufferSize; // Get the image buffer size.
XrTrackableImageDatabaseEntryANDROID imageDatabaseEntries[1] = {
{
.type = XR_TYPE_TRACKABLE_IMAGE_DATABASE_ENTRY_ANDROID,
.next = nullptr,
.trackingMode = XR_TRACKABLE_IMAGE_TRACKING_MODE_STATIC_ANDROID,
.physicalWidth = 0.1f, // The width of the image in meters.
.imageWidth = 640,
.imageHeight = 480,
.format = XR_TRACKABLE_IMAGE_FORMAT_R8G8B8A8_ANDROID,
.bufferSize = imageBufferSize, // RGBA buffer size in bytes.
.buffer = imageBuffer, // RGBA data.
}
};
XrTrackableImageDatabaseCreateInfoANDROID imageDatabaseCreateInfo {
.type = XR_TYPE_TRACKABLE_IMAGE_DATABASE_CREATE_INFO_ANDROID,
.next = nullptr,
.entryCount = 1,
.entries = imageDatabaseEntries
};
XrFutureEXT imageDatabaseFuture;
CHK_XR(xrCreateTrackableImageDatabaseAsyncANDROID(session, &imageDatabaseCreateInfo, &imageDatabaseFuture));
bool keepLooping = true;
bool futureReady = false;
while (keepLooping) {
XrFuturePollInfoEXT pollInfo{
.type = XR_TYPE_FUTURE_POLL_INFO_EXT,
.future = imageDatabaseFuture,
};
XrFuturePollResultEXT pollResult{
.type = XR_TYPE_FUTURE_POLL_RESULT_EXT,
};
CHK_XR(xrPollFutureEXT(instance, &pollInfo, &pollResult));
if (pollResult.state == XR_FUTURE_STATE_READY_EXT) {
futureReady = true;
keepLooping = false;
} else {
// Throttle the loop to not fully expend this CPU core.
std::this_thread::yield();
}
}
XrTrackableImageDatabaseANDROID imageDatabase;
if (futureReady) {
XrCreateTrackableImageDatabaseCompletionANDROID imageDatabaseCompletion {
.type = XR_TYPE_CREATE_TRACKABLE_IMAGE_DATABASE_COMPLETION_ANDROID,
.next = nullptr,
};
CHK_XR(xrCreateTrackableImageDatabaseCompleteANDROID(session, imageDatabaseFuture, &imageDatabaseCompletion));
CHK_XR(imageDatabaseCompletion.futureResult);
imageDatabase = imageDatabaseCompletion.database;
}
XrTrackableImageConfigurationANDROID imageConfig {
.type = XR_TYPE_TRACKABLE_IMAGE_CONFIGURATION_ANDROID,
.next = nullptr,
.databaseCount = 1,
.databases = &imageDatabase
};
XrTrackableTrackerCreateInfoANDROID createInfo {
.type = XR_TYPE_TRACKABLE_TRACKER_CREATE_INFO_ANDROID,
.next = &imageConfig,
.trackableType = XR_TRACKABLE_TYPE_IMAGE_ANDROID
};
XrTrackableTrackerANDROID imageTrackableTracker;
CHK_XR(xrCreateTrackableTrackerANDROID(session, &createInfo, &imageTrackableTracker));
XrTrackableImageDatabaseANDROID anotherImageDatabase; // Load another database.
// ... dynamically add it to the existing tracker
CHK_XR(xrAddTrackableImageDatabaseANDROID(imageTrackableTracker, anotherImageDatabase));
while (1) {
uint32_t trackableCountOutput = 0;
CHK_XR(xrGetAllTrackablesANDROID(imageTrackableTracker, 0, &trackableCountOutput, nullptr));
std::vector<XrTrackableANDROID> allImageTrackables;
allImageTrackables.resize(trackableCountOutput);
CHK_XR(xrGetAllTrackablesANDROID(imageTrackableTracker, 0, &trackableCountOutput, allImageTrackables.data()));
for (XrTrackableANDROID trackable : allImageTrackables) {
XrTrackableGetInfoANDROID imageGetInfo {
.type = XR_TYPE_TRACKABLE_GET_INFO_ANDROID,
.next = nullptr,
.trackable = trackable,
.baseSpace = appSpace,
.time = updateTime
};
XrTrackableImageANDROID trackableImage{
.type = XR_TYPE_TRACKABLE_IMAGE_ANDROID,
};
CHK_XR(xrGetTrackableImageANDROID(imageTrackableTracker, &imageGetInfo, &trackableImage));
// Use XrTrackableImageANDROID data.
(void)trackableImage.trackingState;
(void)trackableImage.lastUpdatedTime;
(void)trackableImage.centerPose;
(void)trackableImage.extents;
if (trackableImage.database == imageDatabase && trackableImage.databaseEntryIndex == 0) {
// Knowing which image the index of 0 maps to, use the specific image database
// entry (e.g. rendering A for image A).
}
// indices 1+N comparisons for another specific image database entry.
}
// Throttle the loop to not fully expend this CPU core.
std::this_thread::yield();
}
// Remove image database from an existing tracker to stop tracking the images
// of that specific database. To resume tracking of those images re-add the
// database at a later point.
CHK_XR(xrRemoveTrackableImageDatabaseANDROID(imageTrackableTracker, anotherImageDatabase));
// Destroy the image tracker to stop image tracking completely. Re-creating the
// image tracker with existing image databases will restart image tracking.
CHK_XR(xrDestroyTrackableTrackerANDROID(imageTrackableTracker));
// Destroy image databases to unload the associated resources. Re-creatingd
// databases requires going through the asynchronous creation procedure again.
CHK_XR(xrDestroyTrackableImageDatabaseANDROID(anotherImageDatabase));
CHK_XR(xrDestroyTrackableImageDatabaseANDROID(imageDatabase));
रनटाइम के दौरान इमेज डेटाबेस मैनेज करने के लिए कोड का उदाहरण
यहां दिए गए उदाहरण कोड में, ट्रैक की जा रही इमेज के सेट में बदलाव करने का तरीका बताया गया है.
XrSession session; // Previously initialized.
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateTrackableTrackerANDROID xrCreateTrackableTrackerANDROID; // Previously initialized.
PFN_xrDestroyTrackableTrackerANDROID xrDestroyTrackableTrackerANDROID; // Previously initialized.
PFN_xrDestroyTrackableImageDatabaseANDROID xrDestroyTrackableImageDatabaseANDROID; // Previously initialized.
PFN_xrAddTrackableImageDatabaseANDROID xrAddTrackableImageDatabaseANDROID; // Previously initialized.
PFN_xrRemoveTrackableImageDatabaseANDROID xrRemoveTrackableImageDatabaseANDROID; // Previously initialized.
// See previous C++ sample for database and tracker initialization.
XrTrackableImageDatabaseANDROID imageDatabases[2]; // Previously initialized.
XrTrackableImageDatabaseANDROID anotherImageDatabase; // Previously initialized.
// Create the image tracker config with two input databases to track.
XrTrackableImageConfigurationANDROID imageConfig {
.type = XR_TYPE_TRACKABLE_IMAGE_CONFIGURATION_ANDROID,
.next = nullptr,
.databaseCount = 2,
.databases = imageDatabases
};
XrTrackableTrackerCreateInfoANDROID createInfo {
.type = XR_TYPE_TRACKABLE_TRACKER_CREATE_INFO_ANDROID,
.next = &imageConfig,
.trackableType = XR_TRACKABLE_TYPE_IMAGE_ANDROID
};
XrTrackableTrackerANDROID imageTrackableTracker;
CHK_XR(xrCreateTrackableTrackerANDROID(session, &createInfo, &imageTrackableTracker));
// The tracker currently tracks the images of the two databases 'imageDatabases[0]' and
// 'imageDatabases[1]' supplied through 'imageConfig'.
CHK_XR(xrRemoveTrackableImageDatabaseANDROID(imageTrackableTracker, imageDatabases[1]));
// The tracker currently tracks 'imageDatabases[0]', but no longer tracks
// 'imageDatabases[1]'.
// The 'imageDatabases[1]' database handle is still valid.
CHK_XR(xrAddTrackableImageDatabaseANDROID(imageTrackableTracker, imageDatabases[1]));
// The tracker currently tracks 'imageDatabases[0]' and 'imageDatabases[1]'.
CHK_XR(xrDestroyTrackableImageDatabaseANDROID(imageDatabases[1]));
// The tracker currently tracks 'imageDatabases[0]', but no longer tracks
// 'imageDatabases[1]'.
// The 'imageDatabases[1]' database handle is no longer valid and the corresponding
// resources have been released internally. The database needs to be re-initialized
// and re-added to resume tracking of 'imageDatabases[0]'.
CHK_XR(xrAddTrackableImageDatabaseANDROID(imageTrackableTracker, anotherImageDatabase));
// The tracker currently tracks 'imageDatabases[0]' and 'anotherImageDatabase'.
CHK_XR(xrDestroyTrackableTrackerANDROID(imageTrackableTracker));
// The 'imageTrackableTracker' tracker handle is invalid and image tracking has been
// stopped.
// The 'imageDatabases[0]' and 'anotherImageDatabase' database handles are still valid.
// Create another the image tracker config to re-create the image tracker.
XrTrackableImageConfigurationANDROID anotherImageConfig {
.type = XR_TYPE_TRACKABLE_IMAGE_CONFIGURATION_ANDROID,
.next = nullptr,
.databaseCount = 1,
.databases = &anotherImageDatabase
};
XrTrackableTrackerCreateInfoANDROID anotherCreateInfo {
.type = XR_TYPE_TRACKABLE_TRACKER_CREATE_INFO_ANDROID,
.next = &anotherImageConfig,
.trackableType = XR_TRACKABLE_TYPE_IMAGE_ANDROID
};
CHK_XR(xrCreateTrackableTrackerANDROID(session, &anotherCreateInfo, &imageTrackableTracker));
// The tracker handle has been re-initialized and image tracking has been started again.
// The tracker currently tracks 'anotherImageDatabase'.
// The 'imageDatabases[0]' database handle is still valid, but not currently tracked.
इमेज ट्रैकिंग में गड़बड़ियां होने पर कार्रवाई करने के लिए कोड का उदाहरण
यहां दिए गए उदाहरण कोड में, XrEventDataImageTrackingLostANDROID इवेंट के लिए पोलिंग करके, गड़बड़ी को ठीक करने का तरीका बताया गया है.
XrInstance instance; // Previously initialized.
XrSession session; // Previously initialized.
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrPollFutureEXT xrPollFutureEXT; // Previously initialized.
PFN_xrCreateTrackableTrackerANDROID xrCreateTrackableTrackerANDROID; // Previously initialized.
PFN_xrDestroyTrackableTrackerANDROID xrDestroyTrackableTrackerANDROID; // Previously initialized.
PFN_xrCreateTrackableImageDatabaseAsyncANDROID xrCreateTrackableImageDatabaseAsyncANDROID; // Previously initialized.
PFN_xrCreateTrackableImageDatabaseCompleteANDROID xrCreateTrackableImageDatabaseCompleteANDROID; // Previously initialized.
PFN_xrDestroyTrackableImageDatabaseANDROID xrDestroyTrackableImageDatabaseANDROID; // Previously initialized.
XrTrackableImageDatabaseEntryANDROID imageDatabaseEntries[1]; // Previously initialized.
XrTrackableImageDatabaseANDROID imageDatabase; // Previously initialized.
XrTrackableTrackerANDROID imageTrackableTracker; // Previously initialized.
// Initialize an event buffer to hold the output.
XrEventDataBuffer event = {
.type = XR_TYPE_EVENT_DATA_BUFFER,
};
XrResult result = xrPollEvent(instance, &event);
if (result == XR_SUCCESS) {
switch (event.type) {
case XR_TYPE_EVENT_DATA_IMAGE_TRACKING_LOST_ANDROID: {
const XrEventDataImageTrackingLostANDROID& eventdata =
*reinterpret_cast<XrEventDataImageTrackingLostANDROID*>(&event);
// All existing databases and trackers need to be destroyed.
CHK_XR(xrDestroyTrackableTrackerANDROID(imageTrackableTracker));
CHK_XR(xrDestroyTrackableImageDatabaseANDROID(imageDatabase));
// To resume image tracking, the database(s) and the tracker need to be re-created.
XrTrackableImageDatabaseCreateInfoANDROID imageDatabaseCreateInfo {
.type = XR_TYPE_TRACKABLE_IMAGE_DATABASE_CREATE_INFO_ANDROID,
.next = nullptr,
.entryCount = 1,
.entries = imageDatabaseEntries
};
XrFutureEXT imageDatabaseFuture;
CHK_XR(xrCreateTrackableImageDatabaseAsyncANDROID(session, &imageDatabaseCreateInfo, &imageDatabaseFuture));
while (true) {
XrFuturePollInfoEXT pollInfo{
.type = XR_TYPE_FUTURE_POLL_INFO_EXT,
.future = imageDatabaseFuture,
};
XrFuturePollResultEXT pollResult{
.type = XR_TYPE_FUTURE_POLL_RESULT_EXT,
};
CHK_XR(xrPollFutureEXT(instance, &pollInfo, &pollResult));
if (pollResult.state == XR_FUTURE_STATE_READY_EXT) {
break;
} else {
// Throttle the loop to not fully expend this CPU core.
std::this_thread::yield();
}
}
XrCreateTrackableImageDatabaseCompletionANDROID imageDatabaseCompletion {
.type = XR_TYPE_CREATE_TRACKABLE_IMAGE_DATABASE_COMPLETION_ANDROID,
.next = nullptr,
};
CHK_XR(xrCreateTrackableImageDatabaseCompleteANDROID(session, imageDatabaseFuture, &imageDatabaseCompletion));
CHK_XR(imageDatabaseCompletion.futureResult);
imageDatabase = imageDatabaseCompletion.database;
XrTrackableImageConfigurationANDROID imageConfig {
.type = XR_TYPE_TRACKABLE_IMAGE_CONFIGURATION_ANDROID,
.next = nullptr,
.databaseCount = 1,
.databases = &imageDatabase
};
XrTrackableTrackerCreateInfoANDROID createInfo {
.type = XR_TYPE_TRACKABLE_TRACKER_CREATE_INFO_ANDROID,
.next = &imageConfig,
.trackableType = XR_TRACKABLE_TYPE_IMAGE_ANDROID
};
XrTrackableTrackerANDROID imageTrackableTracker;
CHK_XR(xrCreateTrackableTrackerANDROID(session, &createInfo, &imageTrackableTracker));
break;
}
}
}
नए ऑब्जेक्ट टाइप
नए निर्देश
- xrAddTrackableImageDatabaseANDROID
- xrCreateTrackableImageDatabaseAsyncANDROID
- xrCreateTrackableImageDatabaseCompleteANDROID
- xrDestroyTrackableImageDatabaseANDROID
- xrGetTrackableImageANDROID
- xrRemoveTrackableImageDatabaseANDROID
नई संरचनाएं
- XrCreateTrackableImageDatabaseCompletionANDROID
- XrEventDataImageTrackingLostANDROID
- XrTrackableImageANDROID
- XrTrackableImageConfigurationANDROID
- XrTrackableImageDatabaseCreateInfoANDROID
- XrTrackableImageDatabaseEntryANDROID
XrSystemProperties को बढ़ाना :
नए एनम
नए Enum कॉन्सटेंट
XR_ANDROID_TRACKABLES_IMAGE_EXTENSION_NAMEXR_ANDROID_trackables_image_SPEC_VERSIONXrObjectType को बढ़ाना :
XR_OBJECT_TYPE_TRACKABLE_IMAGE_DATABASE_ANDROID
XrResult को बढ़ाना :
XR_ERROR_IMAGE_FORMAT_UNSUPPORTED_ANDROID
XrStructureType को बढ़ाना :
XR_TYPE_CREATE_TRACKABLE_IMAGE_DATABASE_COMPLETION_ANDROIDXR_TYPE_EVENT_DATA_IMAGE_TRACKING_LOST_ANDROIDXR_TYPE_SYSTEM_IMAGE_TRACKING_PROPERTIES_ANDROIDXR_TYPE_TRACKABLE_IMAGE_ANDROIDXR_TYPE_TRACKABLE_IMAGE_CONFIGURATION_ANDROIDXR_TYPE_TRACKABLE_IMAGE_DATABASE_CREATE_INFO_ANDROIDXR_TYPE_TRACKABLE_IMAGE_DATABASE_ENTRY_ANDROID
XrTrackableTypeANDROID को बढ़ाना :
XR_TRACKABLE_TYPE_IMAGE_ANDROID
समस्याएं
वर्शन हिस्ट्री
पहला बदलाव, 08-04-2025 (डैनियल गुटेनबर्ग)
- एक्सटेंशन का शुरुआती ब्यौरा.