XR_EXT_spatial_marker_tracking
নামের স্ট্রিং
XR_EXT_spatial_marker_tracking
এক্সটেনশনের ধরন
ইনস্ট্যান্স এক্সটেনশন
রেজিস্টার করা এক্সটেনশন নম্বর
744
সংশোধন
1
অনুমোদনের স্ট্যাটাস
অনুমোদিত
এক্সটেনশন ও ভার্সন ডিপেন্ডেন্সি
XR_EXT_spatial_entity
কন্ট্রিবিউটর
Ron Bessems, Meta
Nihav Jain, Google
Natalie Fleury, Meta
Yuichi Taguchi, Meta
Yin Li, Microsoft
Jimmy Alamparambil, ByteDance
Zhipeng Liu, ByteDance
Jun Yan, ByteDance
এক নজরে
এই এক্সটেনশন XR_EXT_spatial_entity-এর উপর ভিত্তি করে তৈরি এবং এটি অ্যাপ্লিকেশনকে তার পরিবেশে মার্কার শনাক্ত ও ট্র্যাক করার অনুমতি দেয়। মার্কার হল 2D কোড যার মধ্যে QR কোড, মাইক্রো QR কোড, ArUco মার্কার বা AprilTag অন্তর্ভুক্ত থাকতে পারে।
ট্র্যাক করা মার্কারকে নিম্নলিখিত কম্পোনেন্ট সহ (বা "যেটিতে আছে") স্পেশিয়াল এন্টিটি হিসেবে দেখানো হয়:
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXTXR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT
রানটাইম সংক্রান্ত সহায়তা
রানটাইমকে xrEnumerateSpatialCapabilitiesEXT ব্যবহার করে বিভিন্ন মার্কার ট্র্যাকিং ক্ষমতার জন্য তার সহায়তা অবশ্যই বিজ্ঞাপন দিতে হবে, নিম্নলিখিত যেকোনও ক্ষমতা তালিকাভুক্ত করে:
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXTXR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXTXR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXTXR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT
কনফিগারেশন
মার্কারের ধরন শনাক্তকরণ চালু করতে, অ্যাপ্লিকেশনকে xrCreateSpatialContextAsyncEXT-এ সংশ্লিষ্ট কনফিগারেশন স্ট্রাকচার পাস করতেই হবে।
মার্কারের ধরন সংক্রান্ত কনফিগারেশন
QR কোড
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-এর থেকে বেশি হতে হবে
মাইক্রো QR কোড
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হল এই ক্ষমতার জন্য চালু করার জন্য কম্পোনেন্টের অ্যারের একটি পয়েন্টার।
মাইক্রো QR কোড কাজ করলে, xrCreateSpatialContextAsyncEXT কল করার সময় XrSpatialContextCreateInfoEXT :: capabilityConfigs-এ XrSpatialCapabilityConfigurationMicroQrCodeEXT স্ট্রাকচার পাস করা হলে, রানটাইমকে অবশ্যই মাইক্রো QR কোড ট্র্যাকিং চালু করতে হবে।
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-এর থেকে বেশি হতে হবে
ArUco মার্কার
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 স্ট্রাকচার থাকলে, রানটাইমকে xrCreateSpatialContextAsyncEXT থেকে XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT রিটার্ন করতেই হবে, তবে xrEnumerateSpatialCapabilitiesEXT-এর মাধ্যমে XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_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 ডিকশনারি:
Enumerant-এর বিবরণ
XR_SPATIAL_MARKER_ARUCO_DICT_4X4_50_EXT— ৫০টি আইডি সহ ৪ বাই ৪ পিক্সেল Aruco মার্কার ডিকশনারি।XR_SPATIAL_MARKER_ARUCO_DICT_4X4_100_EXT— ১০০টি আইডি সহ ৪ বাই ৪ পিক্সেল Aruco মার্কার ডিকশনারি।XR_SPATIAL_MARKER_ARUCO_DICT_4X4_250_EXT— ২৫০টি আইডি সহ ৪ বাই ৪ পিক্সেল Aruco মার্কার ডিকশনারি।XR_SPATIAL_MARKER_ARUCO_DICT_4X4_1000_EXT— ১০০০ আইডি সহ ৪ বাই ৪ পিক্সেল Aruco মার্কার ডিকশনারি।XR_SPATIAL_MARKER_ARUCO_DICT_5X5_50_EXT— ৫০টি আইডি সহ ৫ বাই ৫ পিক্সেল Aruco মার্কার ডিকশনারি।XR_SPATIAL_MARKER_ARUCO_DICT_5X5_100_EXT— ১০০টি আইডি সহ ৫ বাই ৫ পিক্সেল Aruco মার্কার ডিকশনারি।XR_SPATIAL_MARKER_ARUCO_DICT_5X5_250_EXT— ২৫০টি আইডি সহ ৫ x ৫ পিক্সেল Aruco মার্কার ডিকশনারি।XR_SPATIAL_MARKER_ARUCO_DICT_5X5_1000_EXT— ১০০০ আইডি সহ ৫ বাই ৫ পিক্সেল Aruco মার্কার ডিকশনারি।XR_SPATIAL_MARKER_ARUCO_DICT_6X6_50_EXT— ৫০টি আইডি সহ ৬ বাই ৬ পিক্সেল Aruco মার্কার ডিকশনারি।XR_SPATIAL_MARKER_ARUCO_DICT_6X6_100_EXT— ১০০টি আইডি সহ ৬ বাই ৬ পিক্সেল Aruco মার্কার ডিকশনারি।XR_SPATIAL_MARKER_ARUCO_DICT_6X6_250_EXT— ২৫০টি আইডি সহ ৬ x ৬ পিক্সেল Aruco মার্কার ডিকশনারি।XR_SPATIAL_MARKER_ARUCO_DICT_6X6_1000_EXT— ১০০০ আইডি সহ ৬ বাই ৬ পিক্সেল Aruco মার্কার ডিকশনারি।XR_SPATIAL_MARKER_ARUCO_DICT_7X7_50_EXT— ৫০টি আইডি সহ ৭ বাই ৭ পিক্সেল Aruco মার্কার ডিকশনারি।XR_SPATIAL_MARKER_ARUCO_DICT_7X7_100_EXT— ১০০টি আইডি সহ ৭ বাই ৭ পিক্সেল Aruco মার্কার ডিকশনারি।XR_SPATIAL_MARKER_ARUCO_DICT_7X7_250_EXT— ২৫০টি আইডি সহ ৭ x ৭ পিক্সেল Aruco মার্কার ডিকশনারি।XR_SPATIAL_MARKER_ARUCO_DICT_7X7_1000_EXT— ১০০০ আইডি সহ ৭ বাই ৭ পিক্সেল Aruco মার্কার ডিকশনারি।
AprilTags
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হল শনাক্ত করার জন্য মার্কার ডিকশনারি।
AprilTags কাজ করলে, xrCreateSpatialContextAsyncEXT কল করার সময় XrSpatialContextCreateInfoEXT :: capabilityConfigs-এ XrSpatialCapabilityConfigurationAprilTagEXT স্ট্রাকচার পাস করা হলে রানটাইমকে অবশ্যই AprilTag ট্র্যাকিং চালু করতে হবে।
XrSpatialCapabilityConfigurationAprilTagEXT স্ট্রাকচার XrSpatialContextCreateInfoEXT :: capabilityConfigs-এ থাকলে, রানটাইমকে অবশ্যই xrCreateSpatialContextAsyncEXT থেকে XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT রিটার্ন করতে হবে, তবে XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT, xrEnumerateSpatialCapabilitiesEXT-এর মাধ্যমে এনিউমারেট করা হয় না।
সঠিক ব্যবহার (অন্তর্নিহিত)
- 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;
কাজ করে এমন পূর্বনির্ধারিত AprilTag ডিকশনারি:
Enumerant-এর বিবরণ
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স্পেসের সব মার্কার যাতে না সরে যায় তা নির্দেশ করে।
যদি XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT কোনও নির্দিষ্ট ক্ষমতার জন্য xrEnumerateSpatialCapabilityFeaturesEXT দ্বারা গণনা করা হয় এবং যদি অ্যাপ্লিকেশনটি সেই ক্ষমতার সংশ্লিষ্ট কনফিগারেশন স্ট্রাকচারে 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_EXTXR_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 বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।markersমেম্বারে এলিমেন্টের সংখ্যা হলmarkerCount।markersহল XrSpatialMarkerDataEXT-এর একটি অ্যারে।
অ্যাপ্লিকেশনটি XrSpatialSnapshotEXT-এ স্পেশিয়াল এন্টিটির মার্কার কম্পোনেন্ট কোয়েরি করতে পারে, এর জন্য XrSpatialComponentDataQueryConditionEXT :: componentTypes-এ XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT যোগ করতে হবে এবং XrSpatialComponentDataQueryResultEXT-এর পরবর্তী পয়েন্টার চেনে XrSpatialComponentMarkerListEXT যোগ করতে হবে।
XrSpatialComponentMarkerListEXT যদি XrSpatialComponentDataQueryResultEXT :: next-এর পরবর্তী চেনে থাকে, তাহলে রানটাইমকে xrQuerySpatialComponentDataEXT থেকে XR_ERROR_VALIDATION_FAILURE রিটার্ন করতেই হবে :: কিন্তু XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT, XrSpatialComponentDataQueryConditionEXT :: componentTypes-এ অন্তর্ভুক্ত নেই।
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অবশ্যইmarkerCountXrSpatialMarkerDataEXT স্ট্রাকচারের অ্যারের পয়েন্টার হতে হবে -
markerCountপ্যারামিটার অবশ্যই0-এর থেকে বেশি হতে হবে
কনফিগারেশন
যদি XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT-কে XrSpatialCapabilityComponentTypesEXT :: componentTypes-এ কোনও ক্ষমতার জন্য গণনা করা হয়, তাহলে একটি অ্যাপ্লিকেশন এটি সক্ষম করতে পারে XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents-এ গণনা অন্তর্ভুক্ত করে, যা এই কম্পোনেন্টকে সমর্থন করে এমন ক্ষমতার XrSpatialCapabilityConfigurationBaseHeaderEXT থেকে প্রাপ্ত কাঠামোর তালিকা।
XrSpatialCapabilityConfigurationBaseHeaderEXT :: next চেনে অন্তর্ভুক্ত করার জন্য এই কম্পোনেন্টের কোনও বিশেষ কনফিগারেশনের প্রয়োজন নেই।
বাউন্ডেড 2D কম্পোনেন্ট
বাউন্ডেড 2D কম্পোনেন্ট, যে এন্টিটির উপর মার্কারটি রয়েছে তার কেন্দ্র ও ব্যাপ্তি প্রদান করে। বাউন্ডেড 2D কম্পোনেন্ট সম্পর্কে আরও জানতে বাউন্ডেড 2D দেখুন।
XrSpatialBounded2DDataEXT :: center অবশ্যই মার্কারের কেন্দ্রে পয়েন্ট করতে হবে। মার্কারের সামনের দিকে তাকানোর সময়, X-অক্ষ অবশ্যই ডানদিকে এবং Y-অক্ষ অবশ্যই মার্কারের উপরের দিকে পয়েন্ট করতে হবে। রানটাইমকে অবশ্যই ডান-হাতের স্থানাঙ্ক সিস্টেম কনভেনশন অনুসরণ করতে হবে, তাই Z-অ্যাক্সিস মার্কারের সামনের দিক থেকে বেরিয়ে আসে। এর অর্থ হল, {০, ০, ০} পজিশন, {০, ০, ০, ১} রোটেশন (কোনও রোটেশন নেই) এবং {১, ১} এক্সটেন্ট সহ মার্কার বলতে ১ মিটার x ১ মিটার মার্কারকে বোঝায় যা {০, ০, ০} পজিশনে কেন্দ্র করে থাকে এবং এর সামনের দিকের নরমাল ভেক্টর কম্পোনেন্টের স্পেসে +Z ডিরেকশনের দিকে পয়েন্ট করে থাকে।
মার্কারের ওরিয়েন্টেশন কেমন হবে তা নিচে দেখানো হয়েছে।
ছবি ২৫. অ্যাক্সিস সহ QR কোড মার্কার
টেস্ট কোড
নিম্নলিখিত কোডগুলির X-Y প্লেন ডকুমেন্টের মধ্যে থাকতেই হবে এবং Z-অ্যাক্সিস দর্শকের দিকে পয়েন্ট করে থাকতে হবে। অ্যাক্সিস অরিজিন প্রতিটি মার্কারের কেন্দ্রে অবশ্যই থাকতে হবে। X-অক্ষ অবশ্যই ডানদিকে এবং Y-অক্ষ অবশ্যই ডকুমেন্টের উপরের দিকে নির্দেশ করতে হবে।
ছবি ২৬. 'OpenXR' টেক্সট সহ QR কোড
ছবি ২৭. ID 42 সহ AprilTag XR_SPATIAL_MARKER_APRIL_TAG_DICT_36H11_EXT
ছবি ২৮. ৪৩ আইডি সহ ArUco মার্কার XR_SPATIAL_MARKER_ARUCO_DICT_5X5_50_EXT
কোডের উদাহরণ
QR কোড ট্র্যাকিং ক্ষমতা কনফিগার করুন
স্পেশিয়াল কনটেক্সট তৈরি করার সময় QR কোড ট্র্যাকিংয়ের ক্ষমতা কীভাবে কনফিগার করতে হয় তা নিম্নলিখিত কোডের উদাহরণ থেকে জানতে পারবেন।
// 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 এক্সটেন্ড করা হচ্ছে :
নতুন Enum
নতুন Enum কনস্ট্যান্ট
XR_EXT_SPATIAL_MARKER_TRACKING_EXTENSION_NAMEXR_EXT_spatial_marker_tracking_SPEC_VERSIONXrSpatialCapabilityEXT এক্সটেন্ড করা হচ্ছে :
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXTXR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXTXR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXTXR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT
XrSpatialCapabilityFeatureEXT এক্সটেন্ড করা হচ্ছে :
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXTXR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT
XrSpatialComponentTypeEXT এক্সটেন্ড করা হচ্ছে :
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT
XrStructureType এক্সটেন্ড করা হচ্ছে :
XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_APRIL_TAG_EXTXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_ARUCO_MARKER_EXTXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_MICRO_QR_CODE_EXTXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_QR_CODE_EXTXR_TYPE_SPATIAL_COMPONENT_MARKER_LIST_EXTXR_TYPE_SPATIAL_MARKER_SIZE_EXTXR_TYPE_SPATIAL_MARKER_STATIC_OPTIMIZATION_EXT
ভার্সনের ইতিহাস
রিভিশন ১, ২৯-০৭-২০২৪ (রন বেসেমস, মেটা)
- প্রাথমিক এক্সটেনশনের বিবরণ