XR_ANDROID_trackables_marker
Name String
XR_ANDROID_trackables_marker
Loại phần mở rộng
Tiện ích Instance
Số máy nhánh đã đăng ký
708
Bản sửa đổi
1
Trạng thái phê chuẩn
Chưa được phê chuẩn
Phần mở rộng và các phần phụ thuộc của phiên bản
XR_ANDROID_trackables
Trạng thái ngừng sử dụng
- Không dùng nữa theo tiện ích
XR_EXT_spatial_marker_tracking
Ngày sửa đổi gần đây nhất
2025-07-23
Trạng thái IP
Không có thông báo xác nhận quyền sở hữu nào đã biết về quyền sở hữu trí tuệ.
Cộng tác viên
Christopher Doer, Google
Diego Tipaldi, Google
Levana Chen, Google
Jared Finder, Google
Spencer Quin, Google
Nihav Jain, Google
Ken Mackay, Google
Daniel Guttenberg, Qualcomm
Tổng quan
Tiện ích này cho phép theo dõi điểm đánh dấu thực và cho phép các ứng dụng đính kèm nội dung XR vào điểm đánh dấu thực một cách hiệu quả.
Tiện ích này hỗ trợ các loại điểm đánh dấu phổ biến, cụ thể là ArUco và April Tags. Tính năng này cho phép các thời gian chạy hỗ trợ ước tính kích thước của điểm đánh dấu (không bắt buộc).
Quyền
Các ứng dụng Android phải có quyền android.permission.SCENE_UNDERSTANDING_COARSE được liệt kê trong tệp kê khai vì tiện ích này phụ thuộc vào XR_ANDROID_trackables và cho thấy hình học của môi trường. Quyền android.permission.SCENE_UNDERSTANDING_COARSE được coi là một quyền nguy hiểm, tức là các ứng dụng phải yêu cầu quyền này một cách rõ ràng.
(cấp độ bảo vệ: nguy hiểm)
Kiểm tra khả năng của hệ thống
Cấu trúc XrSystemMarkerTrackingPropertiesANDROID được xác định như sau:
typedef struct XrSystemMarkerTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsMarkerTracking;
XrBool32 supportsMarkerSizeEstimation;
uint16_t maxMarkerCount;
} XrSystemMarkerTrackingPropertiesANDROID;
Nội dung mô tả thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này. Để biết thêm thông tin chi tiết về chuỗi cấu trúc, hãy xem cấu trúc đang được mở rộng ( XrSystemProperties ).supportsMarkerTrackinglà mộtXrBool32cho biết liệu hệ thống hiện tại có cung cấp khả năng theo dõi điểm đánh dấu hay không.supportsMarkerSizeEstimationlà mộtXrBool32cho biết liệu hệ thống hiện tại có cung cấp thông tin ước tính kích thước điểm đánh dấu hay không.maxMarkerCountlà số lượng điểm đánh dấu tối đa mà thời gian chạy có thể theo dõi cùng một lúc.
Ứng dụng có thể kiểm tra xem hệ thống có khả năng theo dõi điểm đánh dấu hay không bằng cách mở rộng XrSystemProperties bằng cấu trúc XrSystemMarkerTrackingPropertiesANDROID khi gọi xrGetSystemProperties . Thời gian chạy phải trả về XR_ERROR_FEATURE_UNSUPPORTED để tạo trình theo dõi điểm đánh dấu nếu và chỉ khi supportsMarkerTracking là XR_FALSE .
Nếu một thời gian chạy hỗ trợ tính năng theo dõi điểm đánh dấu, thì maxMarkerCount phải có giá trị tối thiểu là 1.
Sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_trackables_markertrước khi sử dụng XrSystemMarkerTrackingPropertiesANDROID -
typephải làXR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_ANDROID -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Điểm đánh dấu theo dõi
Tiện ích này thêm XR_TRACKABLE_TYPE_MARKER_ANDROID vào XrTrackableTypeANDROID .
Ứng dụng tạo một XrTrackableTrackerANDROID bằng cách gọi xrCreateTrackableTrackerANDROID và chỉ định XR_TRACKABLE_TYPE_MARKER_ANDROID làm loại có thể theo dõi trong XrTrackableTrackerCreateInfoANDROID :: trackableType cũng như thiết lập một cấu hình hợp lệ bằng cách thêm XrTrackableMarkerConfigurationANDROID vào chuỗi tiếp theo của XrTrackableTrackerCreateInfoANDROID .
Thời gian chạy phải trả về XR_ERROR_FEATURE_UNSUPPORTED nếu XrTrackableTrackerCreateInfoANDROID :: trackableType là XR_TRACKABLE_TYPE_MARKER_ANDROID và XrSystemMarkerTrackingPropertiesANDROID :: supportsMarkerTracking trả về XR_FALSE thông qua xrGetSystemProperties .
Cấu trúc XrTrackableMarkerConfigurationANDROID được xác định như sau:
typedef struct XrTrackableMarkerConfigurationANDROID {
XrStructureType type;
void* next;
XrTrackableMarkerTrackingModeANDROID trackingMode;
uint32_t databaseCount;
const XrTrackableMarkerDatabaseANDROID* databases;
} XrTrackableMarkerConfigurationANDROID;
Nội dung mô tả thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc.trackingModelà một XrTrackableMarkerTrackingModeANDROID cho biết chế độ theo dõi mong muốn.databaseCountlà mộtuint32_tmô tả số lượng phần tử trong mảngdatabases.databaseslà con trỏ đến một mảng XrTrackableMarkerDatabaseANDROID , mỗi mảng chứa các điểm đánh dấu mong muốn từ một từ điển nhất định để theo dõi.
Ứng dụng phải đặt một cấu hình hợp lệ bằng cách thêm XrTrackableMarkerConfigurationANDROID vào chuỗi XrTrackableTrackerCreateInfoANDROID :: next khi gọi xrCreateTrackableTrackerANDROID với XrTrackableTrackerCreateInfoANDROID :: trackableType được đặt thành XR_TRACKABLE_TYPE_MARKER_ANDROID . Nếu không, nếu loại trình theo dõi được đặt như trên nhưng cấu trúc cấu hình không có hoặc không hợp lệ, thì thời gian chạy phải trả về XR_ERROR_VALIDATION_FAILURE .
Nếu một thời gian chạy hỗ trợ tính năng ước tính kích thước điểm đánh dấu, thì ứng dụng có thể đặt XrTrackableMarkerDatabaseEntryANDROID :: edgeSize thành 0 trong XrTrackableMarkerDatabaseANDROID :: entries để cho biết việc sử dụng tính năng ước tính kích thước. Nếu không, ứng dụng phải đặt XrTrackableMarkerDatabaseEntryANDROID :: edgeSize thành một giá trị dương hoặc thời gian chạy phải trả về XR_ERROR_VALIDATION_FAILURE .
Thời gian chạy phải lọc đầu ra từ xrGetAllTrackablesANDROID để khớp với trackingMode và XrTrackableMarkerDatabaseEntryANDROID :: edgeSize .
Sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_trackables_markertrước khi sử dụng XrTrackableMarkerConfigurationANDROID -
typephải làXR_TYPE_TRACKABLE_MARKER_CONFIGURATION_ANDROID -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc -
trackingModephải là một giá trị XrTrackableMarkerTrackingModeANDROID hợp lệ -
databasesphải là con trỏ đến một mảng gồmdatabaseCountcấu trúc XrTrackableMarkerDatabaseANDROID hợp lệ - Tham số
databaseCountphải lớn hơn0
Enum XrTrackableMarkerTrackingModeANDROID mô tả các chế độ theo dõi được hỗ trợ của điểm đánh dấu.
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;
Nội dung mô tả về các phần tử liệt kê
XR_TRACKABLE_MARKER_TRACKING_MODE_DYNAMIC_ANDROID– Theo dõi các điểm đánh dấu động. Chế độ này có độ chính xác cao nhất và hoạt động trên cả điểm đánh dấu tĩnh và điểm đánh dấu đang di chuyển, nhưng cũng có mức tiêu thụ điện cao nhất.XR_TRACKABLE_MARKER_TRACKING_MODE_STATIC_ANDROID– Theo dõi các điểm đánh dấu tĩnh. Chế độ này chủ yếu hữu ích cho những điểm đánh dấu được biết là tĩnh, dẫn đến mức tiêu thụ điện năng thấp hơn so với chế độ động.
Cấu trúc XrTrackableMarkerDatabaseANDROID xác định một từ điển và các mã nhận dạng điểm đánh dấu tương ứng cần được theo dõi.
typedef struct XrTrackableMarkerDatabaseANDROID {
XrTrackableMarkerDictionaryANDROID dictionary;
uint32_t entryCount;
const XrTrackableMarkerDatabaseEntryANDROID* entries;
} XrTrackableMarkerDatabaseANDROID;
Nội dung mô tả thành viên
dictionarylà XrTrackableMarkerDictionaryANDROID mà tất cảentriesđều thuộc về.entryCountlà một uint32_t mô tả số lượng phần tử trong mảngentries. Ứng dụng có thể đặtentryCount0để theo dõi tất cả các điểm đánh dấu trongdictionary.entrieslà một con trỏ đến mảng XrTrackableMarkerDatabaseEntryANDROID , mỗi con trỏ chứa cấu hình của một điểm đánh dấu cần theo dõi.
Sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_trackables_markertrước khi sử dụng XrTrackableMarkerDatabaseANDROID -
dictionaryphải là một giá trị XrTrackableMarkerDictionaryANDROID hợp lệ - Nếu
entryCountkhông phải là0, thìentriesphải là con trỏ đến một mảng gồmentryCountcấu trúc XrTrackableMarkerDatabaseEntryANDROID
Liệt kê XrTrackableMarkerDictionaryANDROID mô tả các từ điển điểm đánh dấu được hỗ trợ.
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;
Cấu trúc XrTrackableMarkerDatabaseEntryANDROID định cấu hình một mã nhận dạng điểm đánh dấu duy nhất của từ điển.
typedef struct XrTrackableMarkerDatabaseEntryANDROID {
int32_t id;
float edgeSize;
} XrTrackableMarkerDatabaseEntryANDROID;
Nội dung mô tả thành viên
idlà mã nhận dạng điểm đánh dấu như trong từ điển.edgeSizebiểu thị kích thước của cạnh điểm đánh dấu tính bằng mét. Nếu thời gian chạy hỗ trợ tính năng ước tính kích thước điểm đánh dấu, thì ứng dụng có thể đặt giá trị này thành 0 và kích thước điểm đánh dấu sẽ được ước tính trực tuyến. Nếu giá trị này được đặt thành 0 nhưng thời gian chạy không hỗ trợ tính năng ước tính kích thước điểm đánh dấu, thì thời gian chạy phải trả vềXR_ERROR_VALIDATION_FAILURE.
Sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_trackables_markertrước khi sử dụng XrTrackableMarkerDatabaseEntryANDROID
Nhận điểm đánh dấu
Hàm xrGetTrackableMarkerANDROID được xác định như sau:
XrResult xrGetTrackableMarkerANDROID(
XrTrackableTrackerANDROID tracker,
const XrTrackableGetInfoANDROID* getInfo,
XrTrackableMarkerANDROID* markerOutput);
Nội dung mô tả về tham số
trackerlà XrTrackableTrackerANDROID để truy vấn.getInfolà XrTrackableGetInfoANDROID có thông tin dùng để lấy điểm đánh dấu có thể theo dõi.markerOutputlà con trỏ đến cấu trúc XrTrackableMarkerANDROID mà trong đó, điểm đánh dấu có thể theo dõi được trả về.
Thời gian chạy phải trả về XR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROID nếu loại có thể theo dõi của XrTrackableANDROID không phải là XR_TRACKABLE_TYPE_MARKER_ANDROID hoặc nếu loại có thể theo dõi của XrTrackableTrackerANDROID không phải là XR_TRACKABLE_TYPE_MARKER_ANDROID .
Sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_trackables_markertrước khi gọi xrGetTrackableMarkerANDROID -
trackerphải là một đối tượng XrTrackableTrackerANDROID hợp lệ -
getInfophải là con trỏ đến một cấu trúc XrTrackableGetInfoANDROID hợp lệ -
markerOutputphải là con trỏ đến cấu trúc XrTrackableMarkerANDROID
Mã trả về
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_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
Cấu trúc XrTrackableMarkerANDROID được xác định như sau:
typedef struct XrTrackableMarkerANDROID {
XrStructureType type;
void* next;
XrTrackingStateANDROID trackingState;
XrTime lastUpdatedTime;
XrTrackableMarkerDictionaryANDROID dictionary;
int32_t markerId;
XrPosef centerPose;
XrExtent2Df extents;
} XrTrackableMarkerANDROID;
Nội dung mô tả thành viên
typelà XrStructureType của cấu trúc này.nextlàNULLhoặc con trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.trackingStatelà XrTrackingStateANDROID của điểm đánh dấu.lastUpdatedTimelàXrTimecủa lần cập nhật gần đây nhất cho điểm đánh dấu.dictionarylà XrTrackableMarkerDictionaryANDROID của điểm đánh dấu.markerIdlà mã nhận dạng điểm đánh dấu như trong từ điển.centerPoselà XrPosef của điểm đánh dấu nằm trong XrTrackableGetInfoANDROID ::baseSpace. Điểm đánh dấu nằm trong mặt phẳng XZ, với X chỉ sang bên phải của điểm đánh dấu và Z chỉ xuống dưới cùng, còn Y đi ra khỏi điểm đánh dấu dưới dạng đường pháp tuyến.extentslà kích thước XrExtent2Df của điểm đánh dấu. Ranh giới của khung hình chữ nhật nằm ở các điểm:centerPose+/- (extents/ 2).
Sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích
XR_ANDROID_trackables_markertrước khi sử dụng XrTrackableMarkerANDROID -
typephải làXR_TYPE_TRACKABLE_MARKER_ANDROID -
nextphải làNULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc -
trackingStatephải là một giá trị XrTrackingStateANDROID hợp lệ -
dictionaryphải là một giá trị XrTrackableMarkerDictionaryANDROID hợp lệ
Mã ví dụ để lấy các điểm đánh dấu có thể theo dõi
Đoạn mã ví dụ sau đây minh hoạ cách lấy các điểm đánh dấu có thể theo dõi.
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));
Lệnh mới
Cấu trúc mới
- XrTrackableMarkerANDROID
- XrTrackableMarkerDatabaseANDROID
- XrTrackableMarkerDatabaseEntryANDROID
Mở rộng XrSystemProperties :
Mở rộng XrTrackableTrackerCreateInfoANDROID :
Enum mới
Hằng số Enum mới
XR_ANDROID_TRACKABLES_MARKER_EXTENSION_NAMEXR_ANDROID_trackables_marker_SPEC_VERSIONMở rộng XrStructureType :
XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_ANDROIDXR_TYPE_TRACKABLE_MARKER_ANDROIDXR_TYPE_TRACKABLE_MARKER_CONFIGURATION_ANDROID
Mở rộng XrTrackableTypeANDROID :
XR_TRACKABLE_TYPE_MARKER_ANDROID
Vấn đề
Danh sách phiên bản
Bản sửa đổi 1, ngày 23 tháng 7 năm 2025 (Levana Chen)
- Nội dung mô tả ban đầu của tiện ích.