XR_ANDROID_trackables_qr_code
নামের স্ট্রিং
XR_ANDROID_trackables_qr_code
এক্সটেনশনের ধরন
ইনস্ট্যান্স এক্সটেনশন
রেজিস্টার করা এক্সটেনশন নম্বর
709
সংশোধন
1
অনুমোদনের স্ট্যাটাস
অনুমোদিত নয়
এক্সটেনশন ও ভার্সন ডিপেন্ডেন্সি
XR_ANDROID_trackables
বন্ধ হয়ে যাওয়ার স্ট্যাটাস
XR_EXT_spatial_marker_trackingএক্সটেনশন দ্বারা বন্ধ করা হয়েছে
শেষবার পরিবর্তন করার তারিখ
2025-02-05
IP স্ট্যাটাস
IP সংক্রান্ত কোনও দাবি নেই।
কন্ট্রিবিউটর
ক্রিস্টোফার ডোর, Google
লেভানা চেন, Google
জ্যারেড ফাইন্ডার, Google
স্পেন্সার কুইন, Google
নিহাভ জৈন, Google
ডিয়েগো টিপাল্ডি, Google
কেন ম্যাককে, Google
ড্যানিয়েল গুটেনবার্গ, Qualcomm
এক নজরে
এই এক্সটেনশন ফিজিক্যাল QR কোড ট্র্যাকিং ও QR কোড ডেটা ডিকোডিং চালু করে।
অনুমতি
Android অ্যাপ্লিকেশনের ম্যানিফেস্টে android.permission.SCENE_UNDERSTANDING_COARSE অনুমতি তালিকাভুক্ত থাকতেই হবে, কারণ এই এক্সটেনশন XR_ANDROID_trackables-এর উপর নির্ভর করে এবং পরিবেশের জিওমেট্রি প্রকাশ করে। android.permission.SCENE_UNDERSTANDING_COARSE অনুমতিকে বিপজ্জনক অনুমতি হিসেবে বিবেচনা করা হয়।
(সুরক্ষা লেভেল: বিপজ্জনক)
সিস্টেমের ক্ষমতা পরীক্ষা করা
XrSystemQrCodeTrackingPropertiesANDROID স্ট্রাকচার এইভাবে সংজ্ঞায়িত করা হয়:
typedef struct XrSystemQrCodeTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsQrCodeTracking;
XrBool32 supportsQrCodeSizeEstimation;
uint16_t maxQrCodeCount;
} XrSystemQrCodeTrackingPropertiesANDROID;
মেম্বারদের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।supportsQrCodeTrackingহল একটিXrBool32যা বর্তমান সিস্টেমে QR কোড ট্র্যাকিংয়ের ক্ষমতা আছে কিনা তা নির্দেশ করে।supportsQrCodeSizeEstimationহল একটিXrBool32যা বর্তমান সিস্টেম QR কোডের সাইজ অনুমান করে কিনা তা নির্দেশ করে।maxQrCodeCountহল QR কোডের মোট সর্বাধিক সংখ্যা যা একই সময়ে ট্র্যাক করা যেতে পারে।
xrGetSystemProperties কল করার সময় XrSystemQrCodeTrackingPropertiesANDROID স্ট্রাকচারের সাথে XrSystemProperties এক্সটেন্ড করার মাধ্যমে সিস্টেম QR কোড ট্র্যাকিং করতে সক্ষম কিনা তা কোনও অ্যাপ্লিকেশন চেক করতে পারে। QR কোড ট্র্যাকার তৈরির জন্য রানটাইম অবশ্যই XR_ERROR_FEATURE_UNSUPPORTED রিটার্ন করবে, যদি এবং শুধুমাত্র যদি supportsQrCodeTracking XR_FALSE হয়।
রানটাইম QR কোড ট্র্যাকিং সাপোর্ট করলে, maxQrCodeCount অবশ্যই অন্তত ১ হতে হবে। রানটাইম QR কোড ট্র্যাকিং সাপোর্ট না করলে, maxQrCodeCount অবশ্যই 0 হতে হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrSystemQrCodeTrackingPropertiesANDROID ব্যবহার করার আগে
XR_ANDROID_trackables_qr_codeএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_TYPE_SYSTEM_QR_CODE_TRACKING_PROPERTIES_ANDROIDহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে
QR কোড ট্র্যাক করা
এই এক্সটেনশন XR_TRACKABLE_TYPE_QR_CODE_ANDROID-কে XrTrackableTypeANDROID-এ যোগ করে।
অ্যাপ্লিকেশনটি xrCreateTrackableTrackerANDROID কল করে এবং XrTrackableTrackerCreateInfoANDROID :: trackableType-এ ট্র্যাকযোগ্য ধরন হিসেবে XR_TRACKABLE_TYPE_QR_CODE_ANDROID নির্দিষ্ট করে একটি XrTrackableTrackerANDROID তৈরি করতে পারে যাতে QR কোড ট্র্যাক করা যায়।
XrTrackableTrackerCreateInfoANDROID :: trackableType যদি XR_TRACKABLE_TYPE_QR_CODE_ANDROID হয় এবং XrSystemQrCodeTrackingPropertiesANDROID :: supportsQrCodeTracking যদি xrGetSystemProperties-এর মাধ্যমে XR_FALSE রিটার্ন করে, তাহলে রানটাইমকে XR_ERROR_FEATURE_UNSUPPORTED রিটার্ন করতেই হবে।
XrTrackableQrCodeConfigurationANDROID স্ট্রাকচার এইভাবে সংজ্ঞায়িত করা হয়:
typedef struct XrTrackableQrCodeConfigurationANDROID {
XrStructureType type;
void* next;
XrQrCodeTrackingModeANDROID trackingMode;
float qrCodeEdgeSize;
} XrTrackableQrCodeConfigurationANDROID;
মেম্বারদের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।trackingModeহল একটি XrQrCodeTrackingModeANDROID যা ট্র্যাকিংয়ের জন্য কাঙ্ক্ষিত মোড নির্দেশ করে।qrCodeEdgeSizeমিটারে QR কোডের প্রান্তের সাইজ নির্দেশ করে। শূন্য হলে, রানটাইম অনলাইনে QR কোডের সাইজ অনুমান করে।
অ্যাপ্লিকেশনটিকে XrTrackableTrackerCreateInfoANDROID-এর পরবর্তী চেনে XrTrackableQrCodeConfigurationANDROID যোগ করে একটি সঠিক কনফিগারেশন সেট করতেই হবে। অন্যথায়, রানটাইম অবশ্যই XR_ERROR_VALIDATION_FAILURE রিটার্ন করবে।
রানটাইম QR কোডের সাইজ অনুমান করা সাপোর্ট করলে, অ্যাপ্লিকেশন হয়ত XrTrackableQrCodeConfigurationANDROID :: qrCodeEdgeSize থেকে 0.0 সেট করতে পারে যাতে সাইজ অনুমান করার ব্যবহার দেখানো যায়।
রানটাইম QR কোডের সাইজ অনুমান করতে না পারলে, অ্যাপ্লিকেশনকে অবশ্যই XrTrackableQrCodeConfigurationANDROID :: qrCodeEdgeSize-কে পজিটিভ ভ্যালুতে সেট করতে হবে, অন্যথায় রানটাইমকে অবশ্যই XR_ERROR_VALIDATION_FAILURE রিটার্ন করতে হবে।
trackingMode-এর সাথে ম্যাচ করার জন্য রানটাইমকে xrGetAllTrackablesANDROID থেকে আউটপুট অবশ্যই ফিল্টার করতে হবে। XrTrackableQrCodeConfigurationANDROID :: qrCodeEdgeSize যদি 0.0-এ সেট করা না থাকে, তাহলে রানটাইমকে অবশ্যই শুধুমাত্র এই সাইজের সাথে মেলে এমন QR কোড রিটার্ন করতে হবে। XrTrackableQrCodeConfigurationANDROID :: qrCodeEdgeSize যদি 0.0-এ সেট করা থাকে, তাহলে রানটাইমকে অবশ্যই আনুমানিক সাইজ সহ সব QR কোড ফিরিয়ে দিতে হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrTrackableQrCodeConfigurationANDROID ব্যবহার করার আগে
XR_ANDROID_trackables_qr_codeএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_TYPE_TRACKABLE_QR_CODE_CONFIGURATION_ANDROIDহতে হবে -
nextঅবশ্যইNULLহতে হবে অথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে। আরও দেখুন: XrTrackableQrCodeVersionFilterQCOM -
trackingModeঅবশ্যই একটি সঠিক XrQrCodeTrackingModeANDROID ভ্যালু হতে হবে
XrQrCodeTrackingModeANDROID enum-এ QR কোডের কাজ করে এমন ট্র্যাকিং মোড সম্পর্কে বর্ণনা করা হয়েছে।
typedef enum XrQrCodeTrackingModeANDROID {
XR_QR_CODE_TRACKING_MODE_DYNAMIC_ANDROID = 0,
XR_QR_CODE_TRACKING_MODE_STATIC_ANDROID = 1,
XR_QR_CODE_TRACKING_MODE_ANCHORED_QCOM = 1000314000,
XR_QR_CODE_TRACKING_MODE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrQrCodeTrackingModeANDROID;
Enumerant-এর বিবরণ
XR_QR_CODE_TRACKING_MODE_DYNAMIC_ANDROID— ডায়নামিক QR কোড ট্র্যাক করা। এই মোডে সবচেয়ে বেশি নির্ভুলভাবে স্ক্যান করা যায় এবং এটি চলমান ও স্থির QR কোডের ক্ষেত্রে কাজ করে, তবে এতে সবচেয়ে বেশি বিদ্যুৎ খরচ হয়।XR_QR_CODE_TRACKING_MODE_STATIC_ANDROID— স্ট্যাটিক QR কোড ট্র্যাক করা। এই মোডটি মূলত QR কোডের জন্য উপযোগী যা স্ট্যাটিক বলে পরিচিত, যার ফলে ডাইনামিক মোডের তুলনায় কম বিদ্যুৎ খরচ হয়।XR_QR_CODE_TRACKING_MODE_ANCHORED_QCOM— এই মোডটি স্ট্যাটিক QR কোডের জন্য ব্যবহার করা উচিত। স্ট্যাটিক মোডের বিপরীতে, এই মোডটি শুধুমাত্র একবার QR কোড ট্র্যাক করবে এবং তারপরে শুধুমাত্র ডিভাইসের অবস্থানের উপর ভিত্তি করে ট্র্যাক করা ইনস্ট্যান্সের অবস্থান আপডেট করবে। এর ফলে, QR কোড রেফারেন্স ফ্রেমের বাইরে চলে গেলেও ট্র্যাকিং চলতে থাকে। এর ফলে QR কোড ট্র্যাক করার পরে খুব কম পাওয়ার খরচ হয়। (XR_QCOM_trackables_qr_code_operationsএক্সটেনশন দ্বারা যোগ করা হয়েছে)
QR কোড পান
xrGetTrackableQrCodeANDROID ফাংশনটি এইভাবে সংজ্ঞায়িত করা হয়েছে:
XrResult xrGetTrackableQrCodeANDROID(
XrTrackableTrackerANDROID tracker,
const XrTrackableGetInfoANDROID* getInfo,
XrTrackableQrCodeANDROID* qrCodeOutput);
প্যারামিটারের বিবরণ
trackerহল কোয়েরি করার জন্য XrTrackableTrackerANDROID।getInfoহল XrTrackableGetInfoANDROID, যার মধ্যে ট্র্যাক করা যায় এমন QR কোড পাওয়ার জন্য ব্যবহৃত তথ্য থাকে।qrCodeOutputহল XrTrackableQrCodeANDROID স্ট্রাকচারের একটি পয়েন্টার, যেখানে ট্র্যাক করা যায় এমন QR কোড রিটার্ন করা হয়।
XrTrackableANDROID-এর ট্র্যাক করার উপযুক্ত ধরন XR_TRACKABLE_TYPE_QR_CODE_ANDROID না হলে অথবা XrTrackableTrackerANDROID-এর ট্র্যাক করার উপযুক্ত ধরন XR_TRACKABLE_TYPE_QR_CODE_ANDROID না হলে, রানটাইমকে XR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROID রিটার্ন করতেই হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- xrGetTrackableQrCodeANDROID কল করার আগে
XR_ANDROID_trackables_qr_codeএক্সটেনশন অবশ্যই চালু করতে হবে -
trackerঅবশ্যই একটি সঠিক XrTrackableTrackerANDROID হ্যান্ডেল হতে হবে -
getInfoঅবশ্যই একটি সঠিক XrTrackableGetInfoANDROID স্ট্রাকচারের পয়েন্টার হতে হবে -
qrCodeOutputঅবশ্যই XrTrackableQrCodeANDROID স্ট্রাকচারের পয়েন্টার হতে হবে
রিটার্ন কোড
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROIDXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
XrTrackableQrCodeANDROID স্ট্রাকচার এইভাবে সংজ্ঞায়িত করা হয়:
typedef struct XrTrackableQrCodeANDROID {
XrStructureType type;
void* next;
XrTrackingStateANDROID trackingState;
XrTime lastUpdatedTime;
XrPosef centerPose;
XrExtent2Df extents;
uint32_t bufferCapacityInput;
uint32_t bufferCountOutput;
char* buffer;
} XrTrackableQrCodeANDROID;
মেম্বারদের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।trackingStateহল QR কোডের XrTrackingStateANDROID।lastUpdatedTimeহল QR কোডের শেষ আপডেটেরXrTime। শেষ কলের পর থেকেlastUpdatedTimeপরিবর্তন করা হলে, অন্যান্য সব ফিল্ড হয়ত পরিবর্তন করা হয়েছে।centerPoseহল XrTrackableGetInfoANDROID ::baseSpace-এ অবস্থিত QR কোডের XrPosef। QR কোডটি XZ প্লেনে থাকে, যেখানে X QR কোডের ডানদিকে, Z এর নিচের দিকে এবং Y QR কোড থেকে স্বাভাবিকভাবে বেরিয়ে আসে।extentsহল QR কোডের XrExtent2Df ডাইমেনশন। বাউন্ডিং বক্সের সীমানা এই পয়েন্টে আছে:centerPose+/- (extents/ 2).bufferCapacityInputহলbuffer-এর ক্ষমতা, অথবা প্রয়োজনীয় ক্ষমতা ফিরিয়ে আনতে0।bufferCountOutputযদিbufferCapacityInput0হয়, তাহলে রানটাইমbufferCountOutput-এ প্রয়োজনীয় বাফার সাইজ লিখবে। অন্যথায়, এতেbuffer-এ লেখা মোট এলিমেন্ট থাকে। QR কোড ডেটা এখনও ডিকোড করা না হলে, রানটাইমকে অবশ্যই bufferCountOutput-এর মান 0 হিসেবে সেট করতে হবে।bufferহলchar-এর অ্যারের একটি পয়েন্টার যা ডিকোড করা QR কোড ডেটা লেখার জন্য ব্যবহার করা হয়। অ্যাপ্লিকেশনটি ডিকোড করা QR কোড ডেটা সম্পর্কে চিন্তা না করলে, এটিnullptrপাস করতে পারে এবং দ্বিতীয় টু-কল কলটি বাদ দিতে পারে। QR কোড ডেটা নাল-টার্মিনেটেড UTF-8 স্ট্রিং হিসেবে ফেরত দেওয়া হয়।- প্রয়োজনীয়
bufferসাইজ ফিরিয়ে আনার বিস্তারিত বিবরণের জন্য বাফার সাইজ প্যারামিটার বিভাগ দেখুন।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrTrackableQrCodeANDROID ব্যবহার করার আগে
XR_ANDROID_trackables_qr_codeএক্সটেনশন চালু করতেই হবে -
typeঅবশ্যইXR_TYPE_TRACKABLE_QR_CODE_ANDROIDহতে হবে -
nextঅবশ্যইNULLহতে হবে অথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে। আরও দেখুন: XrTrackableQrCodeVersionQCOM -
trackingStateঅবশ্যই একটি সঠিক XrTrackingStateANDROID ভ্যালু হতে হবে -
bufferCapacityInputযদি0না হয়, তাহলেbufferঅবশ্যইbufferCapacityInputচার ভ্যালুর অ্যারের পয়েন্টার হতে হবে
ট্র্যাক করা যায় এমন QR কোড পাওয়ার জন্য কোডের উদাহরণ
ট্র্যাক করা যায় এমন QR কোড কীভাবে পাবেন তা নিম্নলিখিত কোডের উদাহরণ থেকে জানতে পারবেন।
XrInstance instance; // previously initialized
XrSystemId systemId; // previously initialized
XrSession session; // previously initialized
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrGetSystemProperties xrGetSystemProperties; // previously initialized
PFN_xrCreateTrackableTrackerANDROID xrCreateTrackableTrackerANDROID; // previously initialized
PFN_xrGetAllTrackablesANDROID xrGetAllTrackablesANDROID; // previously initialized
PFN_xrGetTrackableQrCodeANDROID xrGetTrackableQrCodeANDROID; // previously initialized
PFN_xrDestroyTrackableTrackerANDROID xrDestroyTrackableTrackerANDROID; // 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
XrSystemQrCodeTrackingPropertiesANDROID qrCodeProperty {
.type = XR_TYPE_SYSTEM_QR_CODE_TRACKING_PROPERTIES_ANDROID,
.next = nullptr,
};
XrSystemProperties systemProperties {
.type = XR_TYPE_SYSTEM_PROPERTIES,
.next = &qrCodeProperty,
};
CHK_XR(xrGetSystemProperties(instance, systemId, &systemProperties));
if (!qrCodeProperty.supportsQrCodeTracking) {
// QR code tracking is not supported.
return;
}
// Create a trackable tracker for QR code tracking.
// If the runtime does not support size estimation, configures QR code edge size of 0.1m.
XrTrackableQrCodeConfigurationANDROID configuration {
.type = XR_TYPE_TRACKABLE_QR_CODE_CONFIGURATION_ANDROID,
.next = nullptr,
.trackingMode = XR_QR_CODE_TRACKING_MODE_DYNAMIC_ANDROID,
.qrCodeEdgeSize = qrCodeProperty.supportsQrCodeSizeEstimation ? 0.0f : 0.1f,
};
XrTrackableTrackerCreateInfoANDROID createInfo {
.type = XR_TYPE_TRACKABLE_TRACKER_CREATE_INFO_ANDROID,
.next = &configuration,
.trackableType = XR_TRACKABLE_TYPE_QR_CODE_ANDROID
};
XrTrackableTrackerANDROID qrCodeTracker;
auto res = xrCreateTrackableTrackerANDROID(session, &createInfo, &qrCodeTracker);
if (res == XR_ERROR_PERMISSION_INSUFFICIENT) {
// Handle permission requests.
}
CHK_XR(res);
// Get QR codes.
std::vector<XrTrackableANDROID> trackables(qrCodeProperty.maxQrCodeCount);
std::vector<XrTrackableQrCodeANDROID> qrCodes(qrCodeProperty.maxQrCodeCount, {
.type = XR_TYPE_TRACKABLE_QR_CODE_ANDROID,
.next = nullptr,
.bufferCountOutput = 0,
});
uint32_t qrCodeSize = 0;
CHK_XR(xrGetAllTrackablesANDROID(qrCodeTracker, qrCodeProperty.maxQrCodeCount, &qrCodeSize,
trackables.data()));
for (int i = 0; i < qrCodeSize; i++) {
XrTrackableGetInfoANDROID getInfo {
.type = XR_TYPE_TRACKABLE_GET_INFO_ANDROID,
.next = nullptr,
.trackable = trackables.at(i),
.baseSpace = appSpace,
.time = updateTime,
};
CHK_XR(xrGetTrackableQrCodeANDROID(qrCodeTracker, &getInfo, &qrCodes[i]));
if (qrCodes[i].bufferCountOutput > 0) {
// Allocate the buffer if it is not already allocated.
if (qrCodes[i].bufferCapacityInput == 0) {
qrCodes[i].buffer = new char[qrCodes[i].bufferCountOutput];
qrCodes[i].bufferCapacityInput = qrCodes[i].bufferCountOutput;
CHK_XR(xrGetTrackableQrCodeANDROID(qrCodeTracker, &getInfo, &qrCodes[i]));
}
}
}
// Release trackable tracker.
CHK_XR(xrDestroyTrackableTrackerANDROID(qrCodeTracker));
নতুন কমান্ড
নতুন স্ট্রাকচার
- XrTrackableQrCodeANDROID
XrSystemProperties এক্সটেন্ড করা হচ্ছে :
XrTrackableTrackerCreateInfoANDROID এক্সটেন্ড করা হচ্ছে :
নতুন Enum
নতুন Enum কনস্ট্যান্ট
XR_ANDROID_TRACKABLES_QR_CODE_EXTENSION_NAMEXR_ANDROID_trackables_qr_code_SPEC_VERSIONXrStructureType এক্সটেন্ড করা হচ্ছে :
XR_TYPE_SYSTEM_QR_CODE_TRACKING_PROPERTIES_ANDROIDXR_TYPE_TRACKABLE_QR_CODE_ANDROIDXR_TYPE_TRACKABLE_QR_CODE_CONFIGURATION_ANDROID
XrTrackableTypeANDROID এক্সটেন্ড করা হচ্ছে :
XR_TRACKABLE_TYPE_QR_CODE_ANDROID
ইস্যু
ভার্সনের ইতিহাস
Revision 1, 2025-02-05 (Levana Chen)
- এক্সটেনশনের প্রাথমিক বিবরণ।