XR_EXT_spatial_marker_tracking
নাম স্ট্রিং
XR_EXT_spatial_marker_tracking
এক্সটেনশন টাইপ
ইনস্ট্যান্স এক্সটেনশন
নিবন্ধিত এক্সটেনশন নম্বর
৭৪৪
সংশোধন
১
অনুমোদনের অবস্থা
অনুমোদিত
এক্সটেনশন এবং সংস্করণ নির্ভরতা
XR_EXT_spatial_entity
অবদানকারীরা
রন বেসেমস, মেটা
নিহাব জৈন, গুগল
নাটালি ফ্লেউরি, মেটা
ইউইচি তাগুচি, মেটা
ইয়িন লি, মাইক্রোসফট
জিমি আলামপারাম্বিল, বাইটড্যান্স
ঝিপেং লিউ, বাইটড্যান্স
জুন ইয়ান, বাইটড্যান্স
সংক্ষিপ্ত বিবরণ
এই এক্সটেনশনটি XR_EXT_spatial_entity উপর ভিত্তি করে তৈরি এবং এটি অ্যাপ্লিকেশনগুলিকে তাদের পরিবেশে মার্কার সনাক্ত ও ট্র্যাক করতে সক্ষম করে। মার্কারগুলি হলো 2D কোড, যার মধ্যে QR কোড, মাইক্রো QR কোড, ArUco মার্কার বা AprilTag অন্তর্ভুক্ত থাকতে পারে ।
একটি ট্র্যাক করা মার্কারকে এমন একটি স্থানিক সত্তা হিসেবে উপস্থাপন করা হয় যার নিম্নলিখিত উপাদানগুলো থাকে:
-
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT -
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT
রানটাইম সমর্থন
একটি রানটাইমকে অবশ্যই xrEnumerateSpatialCapabilitiesEXT ব্যবহার করে নিম্নলিখিত ক্যাপাবিলিটিগুলোর যেকোনো একটি তালিকাভুক্ত করার মাধ্যমে বিভিন্ন মার্কার ট্র্যাকিং ক্যাপাবিলিটির জন্য তার সমর্থন ঘোষণা করতে হবে:
-
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT -
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT -
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT -
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT
কনফিগারেশন
কোনো মার্কারের ধরন শনাক্তকরণ সক্ষম করতে হলে অ্যাপ্লিকেশনটিকে অবশ্যই xrCreateSpatialContextAsyncEXT- এ সংশ্লিষ্ট কনফিগারেশন কাঠামোটি পাস করতে হবে ।
মার্কার টাইপ কনফিগারেশন
কিউআর কোড
XrSpatialCapabilityConfigurationQrCodeEXT কাঠামোটি নিম্নরূপে সংজ্ঞায়িত করা হয়:
typedef struct XrSpatialCapabilityConfigurationQrCodeEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationQrCodeEXT;
সদস্যদের বিবরণ
-
typeহলো এই স্ট্রাকচারটির XrStructureType । -
nextহলোNULLঅথবা একটি স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের দিকে নির্দেশকারী একটি পয়েন্টার। -
capabilityঅবশ্যইXR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXTহতে হবে। -
enabledComponentCountহলো একটিuint32_t, যাenabledComponentsএর অন্তর্ভুক্ত উপাদানের সংখ্যা নির্দেশ করে। -
enabledComponentsহলো এই ক্যাপাবিলিটির জন্য সক্রিয় করতে হবে এমন কম্পোনেন্টগুলোর একটি অ্যারের পয়েন্টার।
যদি QR কোড সমর্থিত হয়, তাহলে xrCreateSpatialContextAsyncEXT কল করার সময় XrSpatialContextCreateInfoEXT :: capabilityConfigs এ যখন একটি XrSpatialCapabilityConfigurationQrCodeEXT স্ট্রাকচার পাস করা হয়, তখন রানটাইমকে অবশ্যই QR কোড ট্র্যাকিং সক্ষম করতে হবে।
যদি xrEnumerateSpatialCapabilitiesEXT দ্বারা XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT গণনা করা না হয়, তাহলে রানটাইমকে অবশ্যই XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT রিটার্ন করতে হবে।
বৈধ ব্যবহার (অন্তর্নিহিত)
- XrSpatialCapabilityConfigurationQrCodeEXT ব্যবহার করার আগে
XR_EXT_spatial_marker_trackingএক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে। -
typeঅবশ্যইXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_QR_CODE_EXTহতে হবে -
nextঅবশ্যইNULLঅথবা একটি স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের একটি বৈধ পয়েন্টার হতে হবে। আরও দেখুন: XrSpatialMarkerSizeEXT , XrSpatialMarkerStaticOptimizationEXT -
capabilityঅবশ্যই একটি বৈধ XrSpatialCapabilityEXT মান হতে হবে -
enabledComponentsঅবশ্যইenabledComponentCountসংখ্যক বৈধ XrSpatialComponentTypeEXT মানের একটি অ্যারের পয়েন্টার হতে হবে। -
enabledComponentCountপ্যারামিটারটি অবশ্যই0থেকে বড় হতে হবে।
মাইক্রো কিউআর কোড
XrSpatialCapabilityConfigurationMicroQrCodeEXT কাঠামোটি নিম্নরূপে সংজ্ঞায়িত করা হয়েছে:
typedef struct XrSpatialCapabilityConfigurationMicroQrCodeEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationMicroQrCodeEXT;
সদস্যদের বিবরণ
-
typeহলো এই স্ট্রাকচারটির XrStructureType । -
nextহলোNULLঅথবা একটি স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের দিকে নির্দেশকারী একটি পয়েন্টার। -
capabilityঅবশ্যইXR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXTহতে হবে। -
enabledComponentCountহলো একটিuint32_t, যাenabledComponentsএর অন্তর্ভুক্ত উপাদানের সংখ্যা নির্দেশ করে। -
enabledComponentsহলো এই ক্যাপাবিলিটির জন্য সক্রিয় করতে হবে এমন কম্পোনেন্টগুলোর একটি অ্যারের পয়েন্টার।
যদি মাইক্রো কিউআর কোড সমর্থিত হয়, তাহলে xrCreateSpatialContextAsyncEXT কল করার সময় XrSpatialContextCreateInfoEXT :: capabilityConfigs এ একটি XrSpatialCapabilityConfigurationMicroQrCodeEXT স্ট্রাকচার পাস করা হলে রানটাইমকে অবশ্যই মাইক্রো কিউআর কোড ট্র্যাকিং সক্ষম করতে হবে।
যদি xrEnumerateSpatialCapabilitiesEXT দ্বারা XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT গণনা করা না হয়, তাহলে রানটাইমকে অবশ্যই XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT রিটার্ন করতে হবে।
বৈধ ব্যবহার (অন্তর্নিহিত)
- XrSpatialCapabilityConfigurationMicroQrCodeEXT ব্যবহার করার আগে
XR_EXT_spatial_marker_trackingএক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে। -
typeঅবশ্যইXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_MICRO_QR_CODE_EXTহতে হবে -
nextঅবশ্যইNULLঅথবা একটি স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের একটি বৈধ পয়েন্টার হতে হবে। আরও দেখুন: XrSpatialMarkerSizeEXT , XrSpatialMarkerStaticOptimizationEXT -
capabilityঅবশ্যই একটি বৈধ XrSpatialCapabilityEXT মান হতে হবে -
enabledComponentsঅবশ্যইenabledComponentCountসংখ্যক বৈধ XrSpatialComponentTypeEXT মানের একটি অ্যারের পয়েন্টার হতে হবে। -
enabledComponentCountপ্যারামিটারটি অবশ্যই0থেকে বড় হতে হবে।
আরুকো মার্কার
XrSpatialCapabilityConfigurationArucoMarkerEXT কাঠামোটি নিম্নরূপে সংজ্ঞায়িত করা হয়েছে:
typedef struct XrSpatialCapabilityConfigurationArucoMarkerEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
XrSpatialMarkerArucoDictEXT arUcoDict;
} XrSpatialCapabilityConfigurationArucoMarkerEXT;
সদস্যদের বিবরণ
-
typeহলো এই স্ট্রাকচারটির XrStructureType । -
nextহলোNULLঅথবা একটি স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের দিকে নির্দেশকারী একটি পয়েন্টার। -
capabilityঅবশ্যইXR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXTহতে হবে। -
enabledComponentCountহলো একটিuint32_t, যাenabledComponentsএর অন্তর্ভুক্ত উপাদানের সংখ্যা নির্দেশ করে। -
enabledComponentsহলো এই ক্যাপাবিলিটির জন্য সক্রিয় করতে হবে এমন কম্পোনেন্টগুলোর একটি অ্যারের পয়েন্টার। -
arUcoDictহলো শনাক্ত করার জন্য মার্কার ডিকশনারি।
যদি ArUco মার্কার সমর্থিত হয়, তাহলে xrCreateSpatialContextAsyncEXT কল করার সময় XrSpatialContextCreateInfoEXT :: capabilityConfigs এ একটি XrSpatialCapabilityConfigurationArucoMarkerEXT স্ট্রাকচার পাস করা হলে রানটাইমকে অবশ্যই ArUco মার্কার ট্র্যাকিং সক্ষম করতে হবে।
যদি XrSpatialContextCreateInfoEXT :: capabilityConfigs এ একটি XrSpatialCapabilityConfigurationArucoMarkerEXT স্ট্রাকচার থাকে কিন্তু xrEnumerateSpatialCapabilitiesEXT দ্বারা XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT গণনা করা না হয়, তাহলে রানটাইমকে অবশ্যই xrCreateSpatialContextAsyncEXT থেকে XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT রিটার্ন করতে হবে ।
বৈধ ব্যবহার (অন্তর্নিহিত)
- XrSpatialCapabilityConfigurationArucoMarkerEXT ব্যবহার করার আগে
XR_EXT_spatial_marker_trackingএক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে। -
typeঅবশ্যইXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ARUCO_MARKER_EXTহতে হবে -
nextঅবশ্যইNULLঅথবা একটি স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের একটি বৈধ পয়েন্টার হতে হবে। আরও দেখুন: XrSpatialMarkerSizeEXT , XrSpatialMarkerStaticOptimizationEXT -
capabilityঅবশ্যই একটি বৈধ XrSpatialCapabilityEXT মান হতে হবে -
enabledComponentsঅবশ্যইenabledComponentCountসংখ্যক বৈধ XrSpatialComponentTypeEXT মানের একটি অ্যারের পয়েন্টার হতে হবে। -
arUcoDictঅবশ্যই একটি বৈধ XrSpatialMarkerArucoDictEXT মান হতে হবে। -
enabledComponentCountপ্যারামিটারটি অবশ্যই0থেকে বড় হতে হবে।
XrSpatialMarkerArucoDictEXT এনুমারেশনটি নিম্নরূপে সংজ্ঞায়িত করা হয়:
typedef enum XrSpatialMarkerArucoDictEXT {
XR_SPATIAL_MARKER_ARUCO_DICT_4X4_50_EXT = 1,
XR_SPATIAL_MARKER_ARUCO_DICT_4X4_100_EXT = 2,
XR_SPATIAL_MARKER_ARUCO_DICT_4X4_250_EXT = 3,
XR_SPATIAL_MARKER_ARUCO_DICT_4X4_1000_EXT = 4,
XR_SPATIAL_MARKER_ARUCO_DICT_5X5_50_EXT = 5,
XR_SPATIAL_MARKER_ARUCO_DICT_5X5_100_EXT = 6,
XR_SPATIAL_MARKER_ARUCO_DICT_5X5_250_EXT = 7,
XR_SPATIAL_MARKER_ARUCO_DICT_5X5_1000_EXT = 8,
XR_SPATIAL_MARKER_ARUCO_DICT_6X6_50_EXT = 9,
XR_SPATIAL_MARKER_ARUCO_DICT_6X6_100_EXT = 10,
XR_SPATIAL_MARKER_ARUCO_DICT_6X6_250_EXT = 11,
XR_SPATIAL_MARKER_ARUCO_DICT_6X6_1000_EXT = 12,
XR_SPATIAL_MARKER_ARUCO_DICT_7X7_50_EXT = 13,
XR_SPATIAL_MARKER_ARUCO_DICT_7X7_100_EXT = 14,
XR_SPATIAL_MARKER_ARUCO_DICT_7X7_250_EXT = 15,
XR_SPATIAL_MARKER_ARUCO_DICT_7X7_1000_EXT = 16,
XR_SPATIAL_MARKER_ARUCO_DICT_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialMarkerArucoDictEXT;
সমর্থিত পূর্বনির্ধারিত ArUco অভিধান:
গণনাকারীর বিবরণ
-
XR_SPATIAL_MARKER_ARUCO_DICT_4X4_50_EXT— ৫০টি আইডি সহ একটি ৪ বাই ৪ পিক্সেলের আরুকো মার্কার ডিকশনারি। -
XR_SPATIAL_MARKER_ARUCO_DICT_4X4_100_EXT— ১০০টি আইডি সহ একটি ৪ বাই ৪ পিক্সেলের আরুকো মার্কার ডিকশনারি। -
XR_SPATIAL_MARKER_ARUCO_DICT_4X4_250_EXT— ২৫০টি আইডি সহ একটি ৪ বাই ৪ পিক্সেলের আরুকো মার্কার ডিকশনারি। -
XR_SPATIAL_MARKER_ARUCO_DICT_4X4_1000_EXT— ১০০০টি আইডি সহ একটি ৪ বাই ৪ পিক্সেলের আরুকো মার্কার ডিকশনারি। -
XR_SPATIAL_MARKER_ARUCO_DICT_5X5_50_EXT— ৫০টি আইডি সহ একটি ৫ বাই ৫ পিক্সেলের আরুকো মার্কার ডিকশনারি। -
XR_SPATIAL_MARKER_ARUCO_DICT_5X5_100_EXT— ১০০টি আইডি সহ একটি ৫ বাই ৫ পিক্সেলের আরুকো মার্কার ডিকশনারি। -
XR_SPATIAL_MARKER_ARUCO_DICT_5X5_250_EXT— ২৫০টি আইডি সহ একটি ৫ বাই ৫ পিক্সেলের আরুকো মার্কার ডিকশনারি। -
XR_SPATIAL_MARKER_ARUCO_DICT_5X5_1000_EXT— ১০০০টি আইডি সহ একটি ৫ বাই ৫ পিক্সেলের আরুকো মার্কার ডিকশনারি। -
XR_SPATIAL_MARKER_ARUCO_DICT_6X6_50_EXT— ৫০টি আইডি সহ একটি ৬ বাই ৬ পিক্সেলের আরুকো মার্কার ডিকশনারি। -
XR_SPATIAL_MARKER_ARUCO_DICT_6X6_100_EXT— ১০০টি আইডি সহ একটি ৬ বাই ৬ পিক্সেলের আরুকো মার্কার ডিকশনারি। -
XR_SPATIAL_MARKER_ARUCO_DICT_6X6_250_EXT— ২৫০টি আইডি সহ একটি ৬ বাই ৬ পিক্সেলের আরুকো মার্কার ডিকশনারি। -
XR_SPATIAL_MARKER_ARUCO_DICT_6X6_1000_EXT— ১০০০টি আইডি সহ একটি ৬ বাই ৬ পিক্সেলের আরুকো মার্কার ডিকশনারি। -
XR_SPATIAL_MARKER_ARUCO_DICT_7X7_50_EXT— ৫০টি আইডি সহ একটি ৭ বাই ৭ পিক্সেলের আরুকো মার্কার ডিকশনারি। -
XR_SPATIAL_MARKER_ARUCO_DICT_7X7_100_EXT— ১০০টি আইডি সহ একটি ৭ বাই ৭ পিক্সেলের আরুকো মার্কার ডিকশনারি। -
XR_SPATIAL_MARKER_ARUCO_DICT_7X7_250_EXT— ২৫০টি আইডি সহ একটি ৭ বাই ৭ পিক্সেলের আরুকো মার্কার ডিকশনারি। -
XR_SPATIAL_MARKER_ARUCO_DICT_7X7_1000_EXT— ১০০০টি আইডি সহ একটি ৭ বাই ৭ পিক্সেলের আরুকো মার্কার ডিকশনারি।
এপ্রিলট্যাগস
XrSpatialCapabilityConfigurationAprilTagEXT কাঠামোটি নিম্নরূপে সংজ্ঞায়িত করা হয়েছে:
typedef struct XrSpatialCapabilityConfigurationAprilTagEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
XrSpatialMarkerAprilTagDictEXT aprilDict;
} XrSpatialCapabilityConfigurationAprilTagEXT;
সদস্যদের বিবরণ
-
typeহলো এই স্ট্রাকচারটির XrStructureType । -
nextহলোNULLঅথবা একটি স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের দিকে নির্দেশকারী একটি পয়েন্টার। -
capabilityঅবশ্যইXR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXTহতে হবে। -
enabledComponentCountহলো একটিuint32_t, যাenabledComponentsএর অন্তর্ভুক্ত উপাদানের সংখ্যা নির্দেশ করে। -
enabledComponentsহলো এই ক্যাপাবিলিটির জন্য সক্রিয় করতে হবে এমন কম্পোনেন্টগুলোর একটি অ্যারের পয়েন্টার। -
aprilDictহলো শনাক্ত করার জন্য মার্কার ডিকশনারি।
যদি AprilTag সমর্থিত হয়, তাহলে xrCreateSpatialContextAsyncEXT কল করার সময় XrSpatialContextCreateInfoEXT :: capabilityConfigs এ একটি XrSpatialCapabilityConfigurationAprilTagEXT স্ট্রাকচার পাস করা হলে রানটাইমকে অবশ্যই AprilTag ট্র্যাকিং সক্ষম করতে হবে ।
যদি XrSpatialContextCreateInfoEXT :: capabilityConfigs এ XrSpatialCapabilityConfigurationAprilTagEXT নামের কোনো স্ট্রাকচার থাকে, কিন্তু xrEnumerateSpatialCapabilitiesEXT দ্বারা XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT গণনা করা না হয়, তাহলে রানটাইমকে অবশ্যই xrCreateSpatialContextAsyncEXT থেকে XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT রিটার্ন করতে হবে।
বৈধ ব্যবহার (অন্তর্নিহিত)
- XrSpatialCapabilityConfigurationAprilTagEXT ব্যবহার করার আগে
XR_EXT_spatial_marker_trackingএক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে। -
typeঅবশ্যইXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_APRIL_TAG_EXTহতে হবে -
nextঅবশ্যইNULLঅথবা একটি স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের একটি বৈধ পয়েন্টার হতে হবে। আরও দেখুন: XrSpatialMarkerSizeEXT , XrSpatialMarkerStaticOptimizationEXT -
capabilityঅবশ্যই একটি বৈধ XrSpatialCapabilityEXT মান হতে হবে -
enabledComponentsঅবশ্যইenabledComponentCountসংখ্যক বৈধ XrSpatialComponentTypeEXT মানের একটি অ্যারের পয়েন্টার হতে হবে। -
aprilDictঅবশ্যই একটি বৈধ XrSpatialMarkerAprilTagDictEXT মান হতে হবে। -
enabledComponentCountপ্যারামিটারটি অবশ্যই0থেকে বড় হতে হবে।
XrSpatialMarkerAprilTagDictEXT এনুমারেশনটি নিম্নরূপে সংজ্ঞায়িত করা হয়:
typedef enum XrSpatialMarkerAprilTagDictEXT {
XR_SPATIAL_MARKER_APRIL_TAG_DICT_16H5_EXT = 1,
XR_SPATIAL_MARKER_APRIL_TAG_DICT_25H9_EXT = 2,
XR_SPATIAL_MARKER_APRIL_TAG_DICT_36H10_EXT = 3,
XR_SPATIAL_MARKER_APRIL_TAG_DICT_36H11_EXT = 4,
XR_SPATIAL_MARKER_APRIL_TAG_DICT_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialMarkerAprilTagDictEXT;
সমর্থিত পূর্বনির্ধারিত এপ্রিলট্যাগ অভিধান:
গণনাকারীর বিবরণ
-
XR_SPATIAL_MARKER_APRIL_TAG_DICT_16H5_EXT— ৪ বাই ৪ বিট, যেকোনো দুটি কোডের মধ্যে সর্বনিম্ন হ্যামিং দূরত্ব = ৫, ৩০টি কোড। -
XR_SPATIAL_MARKER_APRIL_TAG_DICT_25H9_EXT— ৫ বাই ৫ বিট, যেকোনো দুটি কোডের মধ্যে সর্বনিম্ন হ্যামিং দূরত্ব = ৯, ৩৫টি কোড। -
XR_SPATIAL_MARKER_APRIL_TAG_DICT_36H10_EXT— ৬ বাই ৬ বিট, যেকোনো দুটি কোডের মধ্যে সর্বনিম্ন হ্যামিং দূরত্ব = ১০, ২৩২০টি কোড। -
XR_SPATIAL_MARKER_APRIL_TAG_DICT_36H11_EXT— ৬ বাই ৬ বিট, যেকোনো দুটি কোডের মধ্যে সর্বনিম্ন হ্যামিং দূরত্ব = ১১,৫৮৭টি কোড।
ঐচ্ছিক মার্কার কনফিগারেশন
সমর্থিত ঐচ্ছিক বৈশিষ্ট্যগুলির তালিকা পেতে অ্যাপ্লিকেশনগুলিকে xrEnumerateSpatialCapabilityFeaturesEXT কল করতে হবে ।
যেকোনো এক্সটেনশন দ্বারা সমর্থিত সমস্ত স্পেশিয়াল ক্যাপাবিলিটি ফিচারের সম্পূর্ণ তালিকার জন্য XrSpatialCapabilityFeatureEXT দেখুন।
মার্কারের আকার
XrSpatialMarkerSizeEXT কাঠামোটি নিম্নরূপে সংজ্ঞায়িত করা হয়:
typedef struct XrSpatialMarkerSizeEXT {
XrStructureType type;
const void* next;
float markerSideLength;
} XrSpatialMarkerSizeEXT;
সদস্যদের বিবরণ
-
typeহলো এই স্ট্রাকচারটির XrStructureType । -
nextহলোNULLঅথবা একটি স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের দিকে নির্দেশকারী একটি পয়েন্টার। -
markerSideLengthহলো সমস্ত মার্কারের মাপ, যা মিটারে পরিমাপ করা হয়।
যদি কোনো নির্দিষ্ট ক্যাপাবিলিটির জন্য xrEnumerateSpatialCapabilityFeaturesEXT দ্বারা XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT গণনা করা হয়, এবং যদি অ্যাপ্লিকেশনটি সেই ক্যাপাবিলিটির সংশ্লিষ্ট কনফিগারেশন স্ট্রাকচারের সাথে XrSpatialMarkerSizeEXT চেইন করে, তাহলে রানটাইমকে অবশ্যই ধরে নিতে হবে যে শনাক্ত করা সমস্ত মার্কারের প্রস্থ এবং উচ্চতা markerSideLength । রানটাইমকে এই তথ্য সরবরাহ করলে, রানটাইম আরও সঠিক পোজ এবং আকার ফেরত দিতে পারে। এই স্ট্রাকচারটি অবশ্যই XrSpatialCapabilityConfigurationQrCodeEXT , XrSpatialCapabilityConfigurationMicroQrCodeEXT , XrSpatialCapabilityConfigurationArucoMarkerEXT , অথবা XrSpatialCapabilityConfigurationAprilTagEXT- এর next চেইনে লিঙ্ক করতে হবে।
বৈধ ব্যবহার (অন্তর্নিহিত)
- XrSpatialMarkerSizeEXT ব্যবহার করার আগে
XR_EXT_spatial_marker_trackingএক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে। -
typeঅবশ্যইXR_TYPE_SPATIAL_MARKER_SIZE_EXTহতে হবে -
nextঅবশ্যইNULLঅথবা স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের একটি বৈধ পয়েন্টার হতে হবে।
স্ট্যাটিক মার্কার অপ্টিমাইজেশন
XrSpatialMarkerStaticOptimizationEXT স্ট্রাকচারটি নিম্নরূপে সংজ্ঞায়িত করা হয়:
typedef struct XrSpatialMarkerStaticOptimizationEXT {
XrStructureType type;
const void* next;
XrBool32 optimizeForStaticMarker;
} XrSpatialMarkerStaticOptimizationEXT;
সদস্যদের বিবরণ
-
typeহলো এই স্ট্রাকচারটির XrStructureType । -
nextহলোNULLঅথবা একটি স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের দিকে নির্দেশকারী একটি পয়েন্টার। -
optimizeForStaticMarkerনির্দেশ করে যে, স্পেসের সমস্ত মার্কার অপরিবর্তিত থাকবে বলে আশা করা হচ্ছে কিনা।
যদি কোনো নির্দিষ্ট ক্যাপাবিলিটির জন্য xrEnumerateSpatialCapabilityFeaturesEXT দ্বারা XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT গণনা করা হয়, এবং যদি অ্যাপ্লিকেশনটি সেই ক্যাপাবিলিটির সংশ্লিষ্ট কনফিগারেশন স্ট্রাকচারের সাথে XrSpatialMarkerStaticOptimizationEXT চেইন করে, তাহলে optimizeForStaticMarker XR_TRUE তে সেট করা থাকলে রানটাইমকে অবশ্যই ধরে নিতে হবে যে শনাক্ত করা সমস্ত মার্কার স্ট্যাটিক। এটি রানটাইমকে আরও নির্ভুল পোজ এবং আকার তৈরি করতে সাহায্য করে। এই স্ট্রাকচারটিকে অবশ্যই XrSpatialCapabilityConfigurationQrCodeEXT , XrSpatialCapabilityConfigurationMicroQrCodeEXT , XrSpatialCapabilityConfigurationArucoMarkerEXT , অথবা XrSpatialCapabilityConfigurationAprilTagEXT- এর next চেইনে লিঙ্ক করতে হবে।
বৈধ ব্যবহার (অন্তর্নিহিত)
- XrSpatialMarkerStaticOptimizationEXT ব্যবহার করার আগে
XR_EXT_spatial_marker_trackingএক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে। -
typeঅবশ্যইXR_TYPE_SPATIAL_MARKER_STATIC_OPTIMIZATION_EXTহতে হবে -
nextঅবশ্যইNULLঅথবা স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের একটি বৈধ পয়েন্টার হতে হবে।
গ্যারান্টিযুক্ত উপাদান
যে রানটাইম XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT , XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT , XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT , অথবা XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT সমর্থন করে, তাকে অবশ্যই ঐ ক্যাপাবিলিটিগুলো দ্বারা আবিষ্কৃত সকল এনটিটির নিশ্চিত উপাদান হিসেবে নিম্নলিখিত স্পেশিয়াল উপাদানগুলো সরবরাহ করতে হবে, এবং অবশ্যই সেগুলোকে xrEnumerateSpatialCapabilityComponentTypesEXT -এ তালিকাভুক্ত করতে হবে:
-
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT -
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT
মার্কার উপাদান
উপাদান ডেটা
XrSpatialMarkerDataEXT কাঠামোটি নিম্নরূপে সংজ্ঞায়িত করা হয়:
typedef struct XrSpatialMarkerDataEXT {
XrSpatialCapabilityEXT capability;
uint32_t markerId;
XrSpatialBufferEXT data;
} XrSpatialMarkerDataEXT;
সদস্যদের বিবরণ
-
capabilityহলো XrSpatialCapabilityEXT যা মার্কারটি শনাক্ত করেছে। -
markerIdহলো মার্কারের এনকোডেড শনাক্তকারী। ArUco মার্কার এবং AprilTag-এর জন্য এই ফিল্ডটি অবশ্যই বৈধ হতে হবে এবং এনকোডেড আইডি দিয়ে পূরণ করতে হবে। QR কোডের জন্য এই ফিল্ডটি অবশ্যই শূন্য হতে হবে। -
dataহলো মার্কারটিতে থাকা বাফার আইডি এবং অতিরিক্ত তথ্যের ধরণ।
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT এবং XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT অতিরিক্ত ডেটা সমর্থন করে। যদি capability এগুলোর মধ্যে একটি হয় -
- যদি রানটাইম মার্কারের ডেটা সফলভাবে ডিকোড করে, তবে মার্কারের ডেটার উপর নির্ভর করে এটিকে অবশ্যই
dataবাফার টাইপটিXR_SPATIAL_BUFFER_TYPE_UINT8_EXTঅথবাXR_SPATIAL_BUFFER_TYPE_STRING_EXTএ সেট করতে হবে। রানটাইমকে অবশ্যইdataমধ্যে একটি বৈধ বাফার আইডি সেট করতে হবে , যা অ্যাপ্লিকেশনটি ডেটা পাওয়ার জন্য উপযুক্তxrGetSpatialBuffer*ফাংশনের সাথে ব্যবহার করতে পারবে । - যদি রানটাইম এখনও মার্কারের ডেটা ডিকোড না করে থাকে, তবে এটিকে অবশ্যই
dataবাফার আইডি XR_NULL_SPATIAL_BUFFER_ID_EXT এবং বাফার টাইপXR_SPATIAL_BUFFER_TYPE_UNKNOWN_EXTএ সেট করতে হবে ।
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT এবং XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT অতিরিক্ত ডেটা সমর্থন করে না এবং রানটাইমকে অবশ্যই data বাফার আইডি XR_NULL_SPATIAL_BUFFER_ID_EXT- এ সেট করতে হবে।
বৈধ ব্যবহার (অন্তর্নিহিত)
- XrSpatialMarkerDataEXT ব্যবহার করার আগে
XR_EXT_spatial_marker_trackingএক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে। -
capabilityঅবশ্যই একটি বৈধ XrSpatialCapabilityEXT মান হতে হবে -
dataঅবশ্যই একটি বৈধ XrSpatialBufferEXT কাঠামো হতে হবে।
ডেটা কোয়েরি করার জন্য উপাদান তালিকার কাঠামো
XrSpatialComponentMarkerListEXT স্ট্রাকচারটি নিম্নরূপে সংজ্ঞায়িত করা হয়:
typedef struct XrSpatialComponentMarkerListEXT {
XrStructureType type;
void* next;
uint32_t markerCount;
XrSpatialMarkerDataEXT* markers;
} XrSpatialComponentMarkerListEXT;
সদস্যদের বিবরণ
-
typeহলো এই স্ট্রাকচারটির XrStructureType । -
nextহলোNULLঅথবা একটি স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের একটি পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনো স্ট্রাকচার সংজ্ঞায়িত করা নেই। -
markerCountহলোmarkersমেম্বারের অন্তর্ভুক্ত উপাদানের সংখ্যা। -
markersহল XrSpatialMarkerDataEXT এর একটি অ্যারে।
অ্যাপ্লিকেশনটি একটি XrSpatialSnapshotEXT- এর মধ্যে থাকা স্পেশিয়াল এনটিটিগুলোর মার্কার কম্পোনেন্ট কোয়েরি করতে পারে, এর জন্য XrSpatialComponentDataQueryConditionEXT :: componentTypes এ XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT যোগ করতে হবে এবং XrSpatialComponentDataQueryResultEXT- এর পরবর্তী পয়েন্টার চেইনে XrSpatialComponentMarkerListEXT যোগ করতে হবে।
যদি XrSpatialComponentMarkerListEXT, XrSpatialComponentDataQueryResultEXT :: next এর পরবর্তী চেইনে থাকে কিন্তু XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT XrSpatialComponentDataQueryConditionEXT :: componentTypes মধ্যে অন্তর্ভুক্ত না থাকে, তাহলে রানটাইমকে অবশ্যই xrQuerySpatialComponentDataEXT থেকে XR_ERROR_VALIDATION_FAILURE রিটার্ন করতে হবে ।
যদি markerCount XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput থেকে কম হয়, তাহলে রানটাইমকে অবশ্যই xrQuerySpatialComponentDataEXT থেকে XR_ERROR_SIZE_INSUFFICIENT রিটার্ন করতে হবে ।
বৈধ ব্যবহার (অন্তর্নিহিত)
- XrSpatialComponentMarkerListEXT ব্যবহার করার আগে
XR_EXT_spatial_marker_trackingএক্সটেনশনটি অবশ্যই সক্রিয় করতে হবে। -
typeঅবশ্যইXR_TYPE_SPATIAL_COMPONENT_MARKER_LIST_EXTহতে হবে -
nextঅবশ্যইNULLঅথবা স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের একটি বৈধ পয়েন্টার হতে হবে। -
markersঅবশ্যইmarkerCountসংখ্যক XrSpatialMarkerDataEXT স্ট্রাকচারের একটি অ্যারের পয়েন্টার হতে হবে। -
markerCountপ্যারামিটারটি অবশ্যই0থেকে বড় হতে হবে।
কনফিগারেশন
যদি কোনো ক্যাপাবিলিটির জন্য XrSpatialCapabilityComponentTypesEXT :: componentTypes এ XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT এনুমারেট করা থাকে, তাহলে একটি অ্যাপ্লিকেশন সেই কম্পোনেন্টকে সমর্থনকারী ক্যাপাবিলিটির XrSpatialCapabilityConfigurationBaseHeaderEXT ডিরাইভড স্ট্রাকচারের XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents লিস্টে এনুমার্যান্টটি অন্তর্ভুক্ত করার মাধ্যমে এটিকে সক্রিয় করতে পারে ।
এই কম্পোনেন্টটিকে XrSpatialCapabilityConfigurationBaseHeaderEXT :: next চেইনে অন্তর্ভুক্ত করার জন্য কোনো বিশেষ কনফিগারেশনের প্রয়োজন হয় না।
সীমাবদ্ধ 2D উপাদান
বাউন্ডেড ২ডি কম্পোনেন্টটি, যে এনটিটির উপর মার্কারটি অবস্থিত, তার কেন্দ্র এবং বিস্তৃতি প্রদান করে। বাউন্ডেড ২ডি কম্পোনেন্ট সম্পর্কে আরও বিস্তারিত জানতে 'বাউন্ডেড ২ডি' দেখুন।
XrSpatialBounded2DDataEXT :: center অবশ্যই মার্কারের কেন্দ্রকে নির্দেশ করবে। মার্কারের সামনের দিক থেকে দেখলে, X-অক্ষ অবশ্যই ডানদিকে এবং Y-অক্ষ অবশ্যই মার্কারের উপরের দিকে নির্দেশ করবে। রানটাইমকে অবশ্যই ডান-হাতি স্থানাঙ্ক ব্যবস্থা (right-handed coordinate system) অনুসরণ করতে হবে, ফলে Z-অক্ষ মার্কারের সামনের দিক থেকে বেরিয়ে আসবে। এর মানে হলো, {0, 0, 0} অবস্থান, {0, 0, 0, 1} ঘূর্ণন (কোনো ঘূর্ণন নেই) এবং {1, 1} বিস্তৃতি (extent) সহ একটি মার্কার বলতে {0, 0, 0} কেন্দ্রে অবস্থিত একটি ১ মিটার x ১ মিটার মার্কারকে বোঝায়, যার সামনের দিকের নরমাল ভেক্টরটি কম্পোনেন্টের স্পেসে +Z দিকের দিকে নির্দেশ করে।
মার্কারটির অভিমুখের একটি উপস্থাপনা নিচে দেখানো হলো।
চিত্র ২৫। অক্ষসহ কিউআর কোড মার্কার।
পরীক্ষার কোড
নিম্নলিখিত কোডগুলির XY প্লেন অবশ্যই ডকুমেন্টের ভিতরে থাকতে হবে এবং Z-অক্ষ দর্শকের দিকে নির্দেশিত থাকতে হবে। অক্ষের মূলবিন্দু অবশ্যই প্রতিটি মার্কারের কেন্দ্রে থাকতে হবে। X-অক্ষ অবশ্যই ডানদিকে এবং Y-অক্ষ অবশ্যই ডকুমেন্টের উপরের দিকে নির্দেশ করবে।
চিত্র ২৬। 'OpenXR' লেখা সহ কিউআর কোড।
চিত্র ২৭। এপ্রিলট্যাগ XR_SPATIAL_MARKER_APRIL_TAG_DICT_36H11_EXT , আইডি ৪২ সহ।
চিত্র ২৮। ArUco মার্কার XR_SPATIAL_MARKER_ARUCO_DICT_5X5_50_EXT , যার আইডি ৪৩।
উদাহরণ কোড
কিউআর কোড ট্র্যাকিং সক্ষমতা কনফিগার করুন
নিম্নলিখিত উদাহরণ কোডটি দেখায় যে কীভাবে একটি স্পেশিয়াল কনটেক্সট তৈরি করার সময় কিউআর কোড ট্র্যাকিং ক্ষমতা কনফিগার করতে হয়।
// Check if marker tracking capability is supported
uint32_t capabilityCount;
CHK_XR(xrEnumerateSpatialCapabilitiesEXT(instance, systemId, 0, &capabilityCount, nullptr));
std::vector<XrSpatialCapabilityEXT> capabilities(capabilityCount);
CHK_XR(xrEnumerateSpatialCapabilitiesEXT(instance, systemId, capabilityCount, &capabilityCount, capabilities.data()));
if (std::find(capabilities.begin(), capabilities.end(), XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT) == capabilities.end()) {
return;
}
uint32_t featureCount = 0;
CHK_XR(xrEnumerateSpatialCapabilityFeaturesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT, 0, &featureCount, nullptr));
std::vector<XrSpatialCapabilityFeatureEXT> capabilityFeatures(featureCount);
CHK_XR(xrEnumerateSpatialCapabilityFeaturesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT, featureCount, &featureCount, capabilityFeatures.data()));
bool supportsFixedMarkerSize = std::find(capabilityFeatures.begin(), capabilityFeatures.end(), XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT) != capabilityFeatures.end();
// Create a spatial context
XrSpatialContextEXT spatialContext{};
// Enable the 2 guaranteed components of the qr code tracking capability
std::vector<XrSpatialComponentTypeEXT> enabledComponents = {
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT,
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT,
};
XrSpatialCapabilityConfigurationQrCodeEXT markerConfiguration{XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_QR_CODE_EXT};
markerConfiguration.capability = XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT;
markerConfiguration.enabledComponentCount = static_cast<uint32_t>(enabledComponents.size());
markerConfiguration.enabledComponents = enabledComponents.data();
// only chained if features.markerSideLength is true.
XrSpatialMarkerSizeEXT markerSize{XR_TYPE_SPATIAL_MARKER_SIZE_EXT};
markerSize.markerSideLength = 0.10f;
if (supportsFixedMarkerSize) {
markerConfiguration.next = &markerSize;
}
std::array<XrSpatialCapabilityConfigurationBaseHeaderEXT*, 1> capabilityConfigs = {
reinterpret_cast<XrSpatialCapabilityConfigurationBaseHeaderEXT*>(&markerConfiguration),
};
XrSpatialContextCreateInfoEXT spatialContextCreateInfo{XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT};
spatialContextCreateInfo.capabilityConfigCount = capabilityConfigs.size();
spatialContextCreateInfo.capabilityConfigs = capabilityConfigs.data();
XrFutureEXT createContextFuture;
CHK_XR(xrCreateSpatialContextAsyncEXT(session, &spatialContextCreateInfo, &createContextFuture));
waitUntilReady(createContextFuture);
XrCreateSpatialContextCompletionEXT completion{XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT};
CHK_XR(xrCreateSpatialContextCompleteEXT(session, createContextFuture, &completion));
if (completion.futureResult != XR_SUCCESS) {
return;
}
spatialContext = completion.spatialContext;
// ...
// Discovery entities with the spatial context
// ...
CHK_XR(xrDestroySpatialContextEXT(spatialContext));
স্থানিক সত্তা আবিষ্কার করুন এবং উপাদান ডেটা কোয়েরি করুন
নিম্নলিখিত উদাহরণ কোডটি দেখায় কিভাবে XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT দিয়ে কনফিগার করা একটি কনটেক্সটের জন্য স্পেশিয়াল এনটিটিগুলি আবিষ্কার করতে হয় এবং এর কম্পোনেন্ট ডেটা কোয়েরি করতে হয়।
XrFutureEXT future = XR_NULL_FUTURE_EXT;
// We want to look for entities that have the following components.
std::vector<XrSpatialComponentTypeEXT> snapshotComponents = {
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT,
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT,
};
auto discoverSpatialEntities = [&](XrSpatialContextEXT spatialContext, XrTime time) {
XrSpatialDiscoverySnapshotCreateInfoEXT snapshotCreateInfo{XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT};
snapshotCreateInfo.componentTypeCount = snapshotComponents.size();
snapshotCreateInfo.componentTypes = snapshotComponents.data();
CHK_XR(xrCreateSpatialDiscoverySnapshotAsyncEXT(spatialContext, &snapshotCreateInfo, &future));
waitUntilReady(future);
XrCreateSpatialDiscoverySnapshotCompletionInfoEXT completionInfo{XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT};
completionInfo.baseSpace = localSpace;
completionInfo.time = time;
completionInfo.future = future;
XrCreateSpatialDiscoverySnapshotCompletionEXT completion{XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT};
CHK_XR(xrCreateSpatialDiscoverySnapshotCompleteEXT(spatialContext, &completionInfo, &completion));
if (completion.futureResult == XR_SUCCESS) {
// Query for the bounded2D and marker component data
XrSpatialComponentDataQueryConditionEXT queryCond{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT};
queryCond.componentTypeCount = snapshotComponents.size();
queryCond.componentTypes = snapshotComponents.data();
XrSpatialComponentDataQueryResultEXT queryResult{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT};
CHK_XR(xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond, &queryResult));
std::vector<XrSpatialEntityIdEXT> entityIds(queryResult.entityIdCountOutput);
std::vector<XrSpatialEntityTrackingStateEXT> entityStates(queryResult.entityIdCountOutput);
queryResult.entityIdCapacityInput = entityIds.size();
queryResult.entityIds = entityIds.data();
queryResult.entityStateCapacityInput = entityStates.size();
queryResult.entityStates = entityStates.data();
std::vector<XrSpatialBounded2DDataEXT> bounded2D(queryResult.entityIdCountOutput);
XrSpatialComponentBounded2DListEXT bounded2DList{XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT};
bounded2DList.boundCount = bounded2D.size();
bounded2DList.bounds = bounded2D.data();
queryResult.next = &bounded2DList;
std::vector<XrSpatialMarkerDataEXT> markers;
XrSpatialComponentMarkerListEXT markerList{XR_TYPE_SPATIAL_COMPONENT_MARKER_LIST_EXT};
markers.resize(queryResult.entityIdCountOutput);
markerList.markerCount = markers.size();
markerList.markers = markers.data();
bounded2DList.next = &markerList;
CHK_XR(xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond, &queryResult));
for (int32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
if (entityStates[i] != XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT) {
continue;
}
// 2D bounds for entity entityIds[i] is bounded2D[i].extents centered on bounded2D[i].center.
if (markers[i].capability == XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT) {
// Check if marker data has been decoded.
if (markers[i].data.bufferId != XR_NULL_SPATIAL_BUFFER_ID_EXT) {
if (markers[i].data.bufferType == XR_SPATIAL_BUFFER_TYPE_STRING_EXT) {
// Qr Code data can be queried using
// XrSpatialBufferGetInfoEXT getInfo{XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT};
// info.bufferId = markers[i].data.bufferId;
// xrGetSpatialBufferStringEXT(completion.snapshot, &getInfo, ...)
} else if (markers[i].data.bufferType == XR_SPATIAL_BUFFER_TYPE_UINT8_EXT) {
// Qr Code data can be queried using
// XrSpatialBufferGetInfoEXT getInfo{XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT};
// info.bufferId = markers[i].data.bufferId;
// xrGetSpatialBufferUint8(completion.snapshot, &getInfo, ...)
}
}
}
}
CHK_XR(xrDestroySpatialSnapshotEXT(completion.snapshot));
}
};
while (1) {
// ...
// For every frame in frame loop
// ...
XrFrameState frameState; // previously returned from xrWaitFrame
const XrTime time = frameState.predictedDisplayTime;
// Poll for the XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT event
XrEventDataBuffer event = {XR_TYPE_EVENT_DATA_BUFFER};
XrResult result = xrPollEvent(instance, &event);
if (result == XR_SUCCESS) {
switch (event.type) {
case XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT: {
const XrEventDataSpatialDiscoveryRecommendedEXT& eventdata =
*reinterpret_cast<XrEventDataSpatialDiscoveryRecommendedEXT*>(&event);
// Discover spatial entities for the context that we received the "discovery
// recommended" event for.
discoverSpatialEntities(eventdata.spatialContext, time);
break;
}
}
}
// ...
// Finish frame loop
// ...
}
নতুন কাঠামো
- XrSpatialCapabilityConfigurationAprilTagEXT
- XrSpatialCapabilityConfigurationArucoMarkerEXT
- XrSpatialCapabilityConfigurationMicroQrCodeEXT
- XrSpatialCapabilityConfigurationQrCodeEXT
- XrSpatialMarkerDataEXT
XrSpatialCapabilityConfigurationArucoMarkerEXT , XrSpatialCapabilityConfigurationAprilTagEXT , XrSpatialCapabilityConfigurationQrCodeEXT , XrSpatialCapabilityConfigurationMicroQrCodeEXT এর সম্প্রসারণ :
XrSpatialComponentDataQueryResultEXT- এর সম্প্রসারণ:
নতুন এনাম
নতুন এনাম ধ্রুবক
-
XR_EXT_SPATIAL_MARKER_TRACKING_EXTENSION_NAME -
XR_EXT_spatial_marker_tracking_SPEC_VERSION XrSpatialCapabilityEXT- এর সম্প্রসারণ:
-
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT -
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT -
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT -
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT
-
XrSpatialCapabilityFeatureEXT- এর সম্প্রসারণ:
-
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT -
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT
-
XrSpatialComponentTypeEXT এর সম্প্রসারণ:
-
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT
-
XrStructureType সম্প্রসারণ :
-
XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_APRIL_TAG_EXT -
XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ARUCO_MARKER_EXT -
XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_MICRO_QR_CODE_EXT -
XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_QR_CODE_EXT -
XR_TYPE_SPATIAL_COMPONENT_MARKER_LIST_EXT -
XR_TYPE_SPATIAL_MARKER_SIZE_EXT -
XR_TYPE_SPATIAL_MARKER_STATIC_OPTIMIZATION_EXT
-
সংস্করণ ইতিহাস
সংশোধন 1, 2024-07-29 (রন বেসেমস, মেটা)
- প্রাথমিক এক্সটেনশনের বিবরণ