نشانگر_ردیابی_شده_XR_ANDROID
رشته نام
XR_ANDROID_trackables_marker
نوع افزونه
افزونه نمونه
شماره داخلی ثبت شده
۷۰۸ عدد
بازنگری
۱
وضعیت تصویب
تصویب نشده
وابستگیهای افزونه و نسخه
XR_ANDROID_trackables
وضعیت منسوخشده
- توسط افزونهی
XR_EXT_spatial_marker_trackingمنسوخ شده است
آخرین تاریخ اصلاح
۲۳-۰۷-۲۰۲۵
وضعیت آیپی
هیچ ادعای مالکیت معنوی شناختهشدهای وجود ندارد.
مشارکتکنندگان
کریستوفر دوئر، گوگل
دیهگو تیپالدی، گوگل
لوانا چن، گوگل
جارد فایندر، گوگل
اسپنسر کوئین، گوگل
نیهاو جین، گوگل
کن مککی، گوگل
دنیل گوتنبرگ، کوالکام
نمای کلی
این افزونه امکان ردیابی نشانگر فیزیکی را فراهم میکند و برنامهها را قادر میسازد تا محتوای XR را به روشی کارآمد به نشانگرهای فیزیکی متصل کنند.
این افزونه از انواع نشانگرهای شناختهشده، بهویژه ArUco و April Tags، پشتیبانی میکند. این افزونه به زمانهای اجرا امکان میدهد تا بهصورت اختیاری از تخمین اندازه نشانگر پشتیبانی کنند.
مجوزها
برنامههای اندروید باید مجوز android.permission.SCENE_UNDERSTANDING_COARSE را در مانیفست خود داشته باشند، زیرا این افزونه به XR_ANDROID_trackables وابسته است و هندسه محیط را در معرض نمایش قرار میدهد. مجوز android.permission.SCENE_UNDERSTANDING_COARSE یک مجوز خطرناک محسوب میشود، یعنی برنامهها باید صریحاً این مجوز را درخواست کنند.
(سطح حفاظت: خطرناک)
بررسی قابلیت سیستم
ساختار XrSystemMarkerTrackingPropertiesANDROID به صورت زیر تعریف شده است:
typedef struct XrSystemMarkerTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsMarkerTracking;
XrBool32 supportsMarkerSizeEstimation;
uint16_t maxMarkerCount;
} XrSystemMarkerTrackingPropertiesANDROID;
توضیحات اعضا
-
typeنوع XrStructureType این ساختار است. -
nextNULLیا اشارهگری به ساختار بعدی در یک زنجیره ساختار است. چنین ساختارهایی در هسته OpenXR یا این افزونه تعریف نشدهاند. برای جزئیات بیشتر در مورد زنجیره ساختار، به ساختار در حال توسعه ( XrSystemProperties ) مراجعه کنید. -
supportsMarkerTrackingیکXrBool32است که نشان میدهد آیا سیستم فعلی قابلیت ردیابی نشانگر را دارد یا خیر. -
supportsMarkerSizeEstimationیکXrBool32است که نشان میدهد آیا سیستم فعلی تخمین اندازه نشانگر را ارائه میدهد یا خیر. -
maxMarkerCountحداکثر تعداد نشانگرهایی است که زمان اجرا قادر به ردیابی همزمان است.
یک برنامه میتواند با بسط XrSystemProperties با ساختار XrSystemMarkerTrackingPropertiesANDROID هنگام فراخوانی xrGetSystemProperties ، بررسی کند که آیا سیستم قادر به ردیابی نشانگر است یا خیر. زمان اجرا باید XR_ERROR_FEATURE_UNSUPPORTED برای ایجاد ردیاب نشانگر برگرداند، اگر و فقط اگر supportsMarkerTracking XR_FALSE باشد.
اگر یک زمان اجرا از ردیابی نشانگر پشتیبانی کند، maxMarkerCount باید حداقل ۱ باشد.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_trackables_markerباید قبل از استفاده از XrSystemMarkerTrackingPropertiesANDROID فعال شود. -
typeبایدXR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_ANDROIDباشد. -
nextبایدNULLیا یک اشارهگر معتبر به ساختار بعدی در یک زنجیره ساختار باشد.
نشانگرهای ردیابی
این افزونه XR_TRACKABLE_TYPE_MARKER_ANDROID را به XrTrackableTypeANDROID اضافه میکند.
این برنامه با فراخوانی xrCreateTrackableTrackerANDROID و تعیین XR_TRACKABLE_TYPE_MARKER_ANDROID به عنوان نوع قابل ردیابی در XrTrackableTrackerCreateInfoANDROID :: trackableType یک XrTrackableTrackerANDROID ایجاد میکند و همچنین با افزودن XrTrackableMarkerConfigurationANDROID به زنجیره بعدی XrTrackableTrackerCreateInfoANDROID ، یک پیکربندی معتبر برای یک تنظیم تنظیم میکند.
اگر XrTrackableTrackerCreateInfoANDROID :: trackableType با XR_TRACKABLE_TYPE_MARKER_ANDROID باشد و XrSystemMarkerTrackingPropertiesANDROID :: supportsMarkerTracking از طریق xrGetSystemProperties XR_FALSE را برگرداند، زمان اجرا باید XR_ERROR_FEATURE_UNSUPPORTED برگرداند.
ساختار XrTrackableMarkerConfigurationANDROID به صورت زیر تعریف شده است:
typedef struct XrTrackableMarkerConfigurationANDROID {
XrStructureType type;
void* next;
XrTrackableMarkerTrackingModeANDROID trackingMode;
uint32_t databaseCount;
const XrTrackableMarkerDatabaseANDROID* databases;
} XrTrackableMarkerConfigurationANDROID;
توضیحات اعضا
-
typeنوع XrStructureType این ساختار است. -
nextNULLیا اشارهگری به ساختار بعدی در یک زنجیره ساختار است. -
trackingModeیک XrTrackableMarkerTrackingModeANDROID است که حالت مورد نظر برای ردیابی را نشان میدهد. -
databaseCountیکuint32_tاست که تعداد عناصر موجود در آرایهdatabasesرا توصیف میکند. -
databasesیک اشارهگر به آرایهای از XrTrackableMarkerDatabaseANDROID است که هر کدام شامل نشانگرهای مورد نظر از یک دیکشنری مشخص برای ردیابی هستند.
برنامه باید با اضافه کردن XrTrackableMarkerConfigurationANDROID به زنجیره next XrTrackableTrackerCreateInfoANDROID :: هنگام فراخوانی xrCreateTrackableTrackerANDROID با تنظیم XrTrackableTrackerCreateInfoANDROID :: trackableType روی XR_TRACKABLE_TYPE_MARKER_ANDROID ، پیکربندی معتبری را تنظیم کند. در غیر این صورت، اگر نوع ردیاب مانند بالا تنظیم شده باشد اما ساختار پیکربندی وجود نداشته باشد یا معتبر نباشد، زمان اجرا باید XR_ERROR_VALIDATION_FAILURE برگرداند.
اگر یک زمان اجرا از تخمین اندازه نشانگر پشتیبانی کند، برنامه میتواند XrTrackableMarkerDatabaseEntryANDROID :: edgeSize در entries XrTrackableMarkerDatabaseANDROID :: روی 0 تنظیم کند تا استفاده از تخمین اندازه را نشان دهد. در غیر این صورت، برنامه باید XrTrackableMarkerDatabaseEntryANDROID :: edgeSize روی یک مقدار مثبت تنظیم کند یا زمان اجرا باید XR_ERROR_VALIDATION_FAILURE برگرداند.
زمان اجرا باید خروجی xrGetAllTrackablesANDROID را فیلتر کند تا با trackingMode و XrTrackableMarkerDatabaseEntryANDROID :: edgeSize مطابقت داشته باشد.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_trackables_markerباید قبل از استفاده از XrTrackableMarkerConfigurationANDROID فعال شود. -
typeبایدXR_TYPE_TRACKABLE_MARKER_CONFIGURATION_ANDROIDباشد. -
nextبایدNULLیا یک اشارهگر معتبر به ساختار بعدی در یک زنجیره ساختار باشد. -
trackingModeباید یک مقدار معتبر XrTrackableMarkerTrackingModeANDROID باشد. -
databasesباید اشارهگری به آرایهای از ساختارهای معتبرdatabaseCountXrTrackableMarkerDatabaseANDROID باشند. - پارامتر
databaseCountباید بزرگتر از0باشد.
شمارشگر XrTrackableMarkerTrackingModeANDROID حالتهای ردیابی پشتیبانیشدهی نشانگرها را توصیف میکند.
typedef enum XrTrackableMarkerTrackingModeANDROID {
XR_TRACKABLE_MARKER_TRACKING_MODE_DYNAMIC_ANDROID = 0,
XR_TRACKABLE_MARKER_TRACKING_MODE_STATIC_ANDROID = 1,
XR_TRACKABLE_MARKER_TRACKING_MODE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrTrackableMarkerTrackingModeANDROID;
توضیحات شمارشگر
-
XR_TRACKABLE_MARKER_TRACKING_MODE_DYNAMIC_ANDROID— ردیابی نشانگرهای پویا. این حالت بالاترین دقت را دارد و روی نشانگرهای متحرک و ثابت کار میکند، اما همچنین بالاترین مصرف برق را دارد. -
XR_TRACKABLE_MARKER_TRACKING_MODE_STATIC_ANDROID— ردیابی نشانگرهای ایستا. این حالت در درجه اول برای نشانگرهایی که به عنوان ایستا شناخته میشوند مفید است، که در مقایسه با حالت پویا منجر به مصرف برق کمتری میشود.
ساختار XrTrackableMarkerDatabaseANDROID یک دیکشنری و شناسههای نشانگر مربوطه را که باید ردیابی شوند، تعریف میکند.
typedef struct XrTrackableMarkerDatabaseANDROID {
XrTrackableMarkerDictionaryANDROID dictionary;
uint32_t entryCount;
const XrTrackableMarkerDatabaseEntryANDROID* entries;
} XrTrackableMarkerDatabaseANDROID;
توضیحات اعضا
-
dictionary، XrTrackableMarkerDictionaryANDROID است که همهentriesبه آن تعلق دارند. -
entryCountیک uint32_t است که تعداد عناصر موجود در آرایهentriesرا توصیف میکند. برنامه میتواندentryCountبرای ردیابی تمام نشانگرهای موجود درdictionary0تنظیم کند. -
entriesیک اشارهگر به آرایهای از XrTrackableMarkerDatabaseEntryANDROID است که هر کدام شامل پیکربندی یک نشانگر برای ردیابی هستند.
کاربرد معتبر (ضمنی)
- قبل از استفاده از XrTrackableMarkerDatabaseANDROID، افزونهی
XR_ANDROID_trackables_markerباید فعال باشد. -
dictionaryباید یک مقدار معتبر XrTrackableMarkerDictionaryANDROID باشد. - اگر
entryCountبرابر با0نباشد،entriesباید اشارهگری به آرایهای از ساختارهایentryCountXrTrackableMarkerDatabaseEntryANDROID باشند.
متغیر شمارشی XrTrackableMarkerDictionaryANDROID، دیکشنریهای نشانگر پشتیبانیشده را توصیف میکند.
typedef enum XrTrackableMarkerDictionaryANDROID {
XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_4X4_50_ANDROID = 0,
XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_4X4_100_ANDROID = 1,
XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_4X4_250_ANDROID = 2,
XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_4X4_1000_ANDROID = 3,
XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_5X5_50_ANDROID = 4,
XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_5X5_100_ANDROID = 5,
XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_5X5_250_ANDROID = 6,
XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_5X5_1000_ANDROID = 7,
XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_6X6_50_ANDROID = 8,
XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_6X6_100_ANDROID = 9,
XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_6X6_250_ANDROID = 10,
XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_6X6_1000_ANDROID = 11,
XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_7X7_50_ANDROID = 12,
XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_7X7_100_ANDROID = 13,
XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_7X7_250_ANDROID = 14,
XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_7X7_1000_ANDROID = 15,
XR_TRACKABLE_MARKER_DICTIONARY_APRILTAG_16H5_ANDROID = 16,
XR_TRACKABLE_MARKER_DICTIONARY_APRILTAG_25H9_ANDROID = 17,
XR_TRACKABLE_MARKER_DICTIONARY_APRILTAG_36H10_ANDROID = 18,
XR_TRACKABLE_MARKER_DICTIONARY_APRILTAG_36H11_ANDROID = 19,
XR_TRACKABLE_MARKER_DICTIONARY_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrTrackableMarkerDictionaryANDROID;
ساختار XrTrackableMarkerDatabaseEntryANDROID یک شناسه نشانگر (marker id) واحد از یک دیکشنری را پیکربندی میکند.
typedef struct XrTrackableMarkerDatabaseEntryANDROID {
int32_t id;
float edgeSize;
} XrTrackableMarkerDatabaseEntryANDROID;
توضیحات اعضا
-
idهمان شناسه نشانگر است که در دیکشنری داده شده است. -
edgeSizeاندازه لبه نشانگر را بر حسب متر نشان میدهد. اگر زمان اجرا از تخمین اندازه نشانگر پشتیبانی کند، برنامه میتواند این مقدار را روی صفر تنظیم کند و اندازه نشانگر به صورت آنلاین تخمین زده میشود. اگر این مقدار روی صفر تنظیم شود اما زمان اجرا از تخمین اندازه نشانگر پشتیبانی نکند، زمان اجرا بایدXR_ERROR_VALIDATION_FAILUREبرگرداند.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_trackables_markerباید قبل از استفاده از XrTrackableMarkerDatabaseEntryANDROID فعال شود.
نشانگرها را دریافت کنید
تابع xrGetTrackableMarkerANDROID به صورت زیر تعریف میشود:
XrResult xrGetTrackableMarkerANDROID(
XrTrackableTrackerANDROID tracker,
const XrTrackableGetInfoANDROID* getInfo,
XrTrackableMarkerANDROID* markerOutput);
توضیحات پارامتر
-
trackerهمان XrTrackableTrackerANDROID است که باید از آن کوئری گرفته شود. -
getInfoهمان XrTrackableGetInfoANDROID است که اطلاعات مورد نیاز برای دریافت نشانگر قابل ردیابی را در خود جای داده است. -
markerOutputیک اشارهگر به ساختار XrTrackableMarkerANDROID است که نشانگر قابل ردیابی در آن بازگردانده میشود.
اگر نوع قابل ردیابی XrTrackableANDROID برابر با XR_TRACKABLE_TYPE_MARKER_ANDROID نباشد، یا اگر نوع قابل ردیابی XrTrackableTrackerANDROID XR_TRACKABLE_TYPE_MARKER_ANDROID نباشد، زمان اجرا باید XR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROID را برگرداند.
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_trackables_markerباید قبل از فراخوانی xrGetTrackableMarkerANDROID فعال شود. -
trackerباید یک شناسه معتبر XrTrackableTrackerANDROID باشد -
getInfoباید یک اشارهگر به ساختار معتبر XrTrackableGetInfoANDROID باشد. -
markerOutputباید یک اشارهگر به ساختار XrTrackableMarkerANDROID باشد.
کدهای بازگشت
-
XR_SUCCESS -
XR_SESSION_LOSS_PENDING
-
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_LIMIT_REACHED -
XR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROID -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_SESSION_LOST -
XR_ERROR_TIME_INVALID -
XR_ERROR_VALIDATION_FAILURE
ساختار XrTrackableMarkerANDROID به صورت زیر تعریف شده است:
typedef struct XrTrackableMarkerANDROID {
XrStructureType type;
void* next;
XrTrackingStateANDROID trackingState;
XrTime lastUpdatedTime;
XrTrackableMarkerDictionaryANDROID dictionary;
int32_t markerId;
XrPosef centerPose;
XrExtent2Df extents;
} XrTrackableMarkerANDROID;
توضیحات اعضا
-
typeنوع XrStructureType این ساختار است. -
nextباNULLیا اشارهگری به ساختار بعدی در یک زنجیره ساختار است. چنین ساختارهایی در هسته OpenXR یا این افزونه تعریف نشدهاند. -
trackingState، XrTrackingStateANDROID مربوط به نشانگر است. -
lastUpdatedTime، زمان آخرین بهروزرسانی نشانگرXrTimeاست. -
dictionaryXrTrackableMarkerDictionaryANDROID مربوط به نشانگر است. -
markerIdشناسه نشانگر است که در دیکشنری ارائه شده است. -
centerPose، XrPosef نشانگر واقع در XrTrackableGetInfoANDROID ::baseSpaceاست. نشانگر در صفحه XZ قرار دارد، به طوری که X به سمت راست نشانگر و Z به پایین آن اشاره میکند و Y به صورت عادی از نشانگر خارج میشود. -
extentsابعاد XrExtent2Df نشانگر است. مرز کادر محصورکننده در نقاط زیر است:centerPose+/- (extents/ 2).
کاربرد معتبر (ضمنی)
- افزونهی
XR_ANDROID_trackables_markerباید قبل از استفاده از XrTrackableMarkerANDROID فعال باشد. -
typeبایدXR_TYPE_TRACKABLE_MARKER_ANDROIDباشد. -
nextبایدNULLیا یک اشارهگر معتبر به ساختار بعدی در یک زنجیره ساختار باشد. -
trackingStateباید یک مقدار معتبر XrTrackingStateANDROID باشد. -
dictionaryباید یک مقدار معتبر XrTrackableMarkerDictionaryANDROID باشد.
کد نمونه برای دریافت نشانگرهای قابل ردیابی
کد مثال زیر نحوه دریافت نشانگرهای قابل ردیابی را نشان میدهد.
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_xrGetTrackableMarkerANDROID xrGetTrackableMarkerANDROID; // 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
XrSystemMarkerTrackingPropertiesANDROID markerProperty {
.type = XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_ANDROID,
.next = nullptr,
};
XrSystemProperties systemProperties {
.type = XR_TYPE_SYSTEM_PROPERTIES,
.next = &markerProperty,
};
CHK_XR(xrGetSystemProperties(instance, systemId, &systemProperties));
if (!markerProperty.supportsMarkerTracking) {
// Marker tracking is not supported.
return;
}
// Create a trackable tracker for marker tracking.
// If the runtime does not support size estimation, configures marker edge size of 0.1m.
XrTrackableMarkerDatabaseEntryANDROID markerEntries {
.id = 0,
.edgeSize = markerProperty.supportsMarkerSizeEstimation ? 0.0f : 0.1f,
};
XrTrackableMarkerDatabaseANDROID markerDatabases {
.dictionary = XR_TRACKABLE_MARKER_DICTIONARY_ARUCO_4X4_50_ANDROID,
.entryCount = 1,
.entries = &markerEntries,
};
XrTrackableMarkerConfigurationANDROID configuration {
.type = XR_TYPE_TRACKABLE_MARKER_CONFIGURATION_ANDROID,
.next = nullptr,
.trackingMode = XR_TRACKABLE_MARKER_TRACKING_MODE_DYNAMIC_ANDROID,
.databaseCount = 1,
.databases = &markerDatabases,
};
XrTrackableTrackerCreateInfoANDROID createInfo {
.type = XR_TYPE_TRACKABLE_TRACKER_CREATE_INFO_ANDROID,
.next = &configuration,
.trackableType = XR_TRACKABLE_TYPE_MARKER_ANDROID,
};
XrTrackableTrackerANDROID markerTracker;
auto res = xrCreateTrackableTrackerANDROID(session, &createInfo, &markerTracker);
if (res == XR_ERROR_PERMISSION_INSUFFICIENT) {
// Handle permission requests.
}
CHK_XR(res);
// Get markers.
std::vector<XrTrackableANDROID> trackables(markerProperty.maxMarkerCount);
std::vector<XrTrackableMarkerANDROID> markers(markerProperty.maxMarkerCount, {
.type = XR_TYPE_TRACKABLE_MARKER_ANDROID,
.next = nullptr,
});
uint32_t markerSize = 0;
CHK_XR(xrGetAllTrackablesANDROID(markerTracker, markerProperty.maxMarkerCount, &markerSize,
trackables.data()));
for (int i = 0; i < markerSize; i++) {
XrTrackableGetInfoANDROID getInfo {
.type = XR_TYPE_TRACKABLE_GET_INFO_ANDROID,
.next = nullptr,
.trackable = trackables[i],
.baseSpace = appSpace,
.time = updateTime,
};
CHK_XR(xrGetTrackableMarkerANDROID(markerTracker, &getInfo, &markers[i]));
// Handle markers.
}
// Release trackable tracker.
CHK_XR(xrDestroyTrackableTrackerANDROID(markerTracker));
دستورات جدید
سازههای جدید
- XrTrackableMarkerANDROID
- پایگاه داده XrTrackableMarkerANDROID
- XrTrackableMarkerDatabaseEntryANDROID
بسط XrSystemProperties :
توسعهی XrTrackableTrackerCreateInfoANDROID :
Enum های جدید
ثابتهای شمارشی جدید
-
XR_ANDROID_TRACKABLES_MARKER_EXTENSION_NAME -
XR_ANDROID_trackables_marker_SPEC_VERSION گسترش XrStructureType :
-
XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_ANDROID -
XR_TYPE_TRACKABLE_MARKER_ANDROID -
XR_TYPE_TRACKABLE_MARKER_CONFIGURATION_ANDROID
-
توسعهی XrTrackableTypeANDROID :
-
XR_TRACKABLE_TYPE_MARKER_ANDROID
-
مسائل
تاریخچه نسخه
بازبینی 1، 23/07/2025 (لوانا چن)
- توضیحات اولیه افزونه