XR_ANDROID_trackables_image
নামের স্ট্রিং
XR_ANDROID_trackables_image
এক্সটেনশনের ধরন
ইনস্ট্যান্স এক্সটেনশন
রেজিস্টার করা এক্সটেনশন নম্বর
710
সংশোধন
1
অনুমোদনের স্ট্যাটাস
অনুমোদিত নয়
এক্সটেনশন ও ভার্সন ডিপেন্ডেন্সি
XR_EXT_future
এবং
XR_ANDROID_trackables
শেষবার পরিবর্তন করার তারিখ
2025-04-08
IP স্ট্যাটাস
IP সংক্রান্ত কোনও দাবি নেই।
কন্ট্রিবিউটর
ক্রিস্টোফার ডোর, 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 এক্সটেন্ড করার মাধ্যমে সিস্টেম ইমেজ ট্র্যাক করতে সক্ষম কিনা তা কোনও অ্যাপ্লিকেশন চেক করতে পারে। ইমেজ ট্র্যাকার তৈরির জন্য রানটাইমকে অবশ্যই XR_ERROR_FEATURE_UNSUPPORTED রিটার্ন করতে হবে, যদি এবং শুধুমাত্র যদি supportsImageTracking XR_FALSE হয়।
কোনও রানটাইম ইমেজ ট্র্যাকিং সাপোর্ট করলে, সেটিকে যেকোনও সময়ে maxTrackedImageCountটি ট্র্যাক করা ইমেজ সাপোর্ট করতেই হবে।
কোনও রানটাইম ইমেজ ট্র্যাকিং সাপোর্ট করলে, যেকোনও সময়ে এটি অবশ্যই maxLoadedImageCountটি লোড করা ইমেজ সাপোর্ট করবে।
রানটাইম যদি ছবির সাইজ অনুমান করা সমর্থন করে, তাহলে অ্যাপ্লিকেশনটি সাইজ অনুমান করার ব্যবহার নির্দেশ করতে 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-তে সেট করতে পারে।
এন্ট্রির imageWidth , imageHeight এবং format-এর উপর ভিত্তি করে প্রত্যাশিত সাইজের সাথে bufferSize ম্যাচ না করলে, রানটাইম 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বা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে -
futureResultঅবশ্যই একটি সঠিক XrResult মান হতে হবে -
databaseঅবশ্যই একটি সঠিক XrTrackableImageDatabaseANDROID হ্যান্ডেল হতে হবে
xrCreateTrackableImageDatabaseAsyncANDROID ফাংশনটি এইভাবে সংজ্ঞায়িত করা হয়েছে:
XrResult xrCreateTrackableImageDatabaseAsyncANDROID(
XrSession session,
const XrTrackableImageDatabaseCreateInfoANDROID* createInfo,
XrFutureEXT* future);
প্যারামিটারের বিবরণ
sessionহল XrSession-এর একটি হ্যান্ডেল যা আগে xrCreateSession-এর মাধ্যমে তৈরি করা হয়েছে।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হল XrSession-এর একটি হ্যান্ডেল যা আগে xrCreateSession-এর মাধ্যমে তৈরি করা হয়েছে।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
ছবি ট্র্যাক করা হচ্ছে
এই এক্সটেনশন XR_TRACKABLE_TYPE_IMAGE_ANDROID-কে XrTrackableTypeANDROID-এ যোগ করে।
ছবি ট্র্যাক করার জন্য, অ্যাপ্লিকেশনটি xrCreateTrackableTrackerANDROID কল করে এবং XrTrackableTrackerCreateInfoANDROID :: trackableType-এ ট্র্যাকযোগ্য ধরন হিসেবে XR_TRACKABLE_TYPE_IMAGE_ANDROID নির্দিষ্ট করে একটি XrTrackableTrackerANDROID তৈরি করতে পারে।
XrTrackableTrackerCreateInfoANDROID :: trackableType যদি XR_TRACKABLE_TYPE_IMAGE_ANDROID হয় এবং XrSystemImageTrackingPropertiesANDROID :: supportsImageTracking যদি xrGetSystemProperties-এর মাধ্যমে 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;
Enumerant-এর বিবরণ
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;
Enumerant-এর বিবরণ
XR_TRACKABLE_IMAGE_FORMAT_R8G8B8A8_ANDROID— প্রতি চ্যানেল রঙ ও ট্রান্সপারেন্সি ডেটা সহ ৮ বিটের RGBA ছবির ফর্ম্যাট।
xrAddTrackableImageDatabaseANDROID ফাংশনটি এইভাবে সংজ্ঞায়িত করা হয়েছে:
XrResult xrAddTrackableImageDatabaseANDROID(
XrTrackableTrackerANDROID tracker,
XrTrackableImageDatabaseANDROID database);
প্যারামিটারের বিবরণ
trackerহল XrTrackableTrackerANDROID হ্যান্ডেল যাতেdatabaseযোগ করতে হবে।databaseহল XrTrackableImageDatabaseANDROID হ্যান্ডেল যাtracker-এ যোগ করতে হবে।
কোনও ট্র্যাকারে 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থেকে সরাতে হবে।
XrTrackableTrackerANDROID থেকে XrTrackableImageDatabaseANDROID সরানো হলে, শনাক্তকরণ ও ট্র্যাকিংয়ের জন্য সেই ডেটাবেসের 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, যার মধ্যে ট্র্যাক করা যায় এমন QR কোড পাওয়ার জন্য ব্যবহৃত তথ্য থাকে।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
নতুন 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
ইস্যু
ভার্সনের ইতিহাস
রিভিশন ১, ০৮-০৪-২০২৫ (ড্যানিয়েল গুটেনবার্গ)
- এক্সটেনশনের প্রাথমিক বিবরণ।