XR_ANDROID_trackables_marker
String Nama
XR_ANDROID_trackables_marker
Jenis Ekstensi
Ekstensi instance
Nomor Ekstensi Terdaftar
708
Revisi
1
Status Ratifikasi
Belum diratifikasi
Dependensi Ekstensi dan Versi
XR_ANDROID_trackables
Status Penghentian Penggunaan
- Tidak digunakan lagi oleh ekstensi
XR_EXT_spatial_marker_tracking
Tanggal Terakhir Diubah
2025-07-23
Status IP
Tidak ada klaim kekayaan intelektual yang diketahui.
Kontributor
Christopher Doer, Google
Diego Tipaldi, Google
Levana Chen, Google
Jared Finder, Google
Spencer Quin, Google
Nihav Jain, Google
Ken Mackay, Google
Daniel Guttenberg, Qualcomm
Ringkasan
Ekstensi ini memungkinkan pelacakan penanda fisik, dan memungkinkan aplikasi melampirkan konten XR ke penanda fisik secara efisien.
Ekstensi ini mendukung jenis penanda yang terkenal, khususnya ArUco dan April Tag. Hal ini memungkinkan runtime untuk secara opsional mendukung estimasi ukuran penanda.
Izin
Aplikasi Android harus memiliki izin android.permission.SCENE_UNDERSTANDING_COARSE yang tercantum dalam manifesnya karena ekstensi ini bergantung pada XR_ANDROID_trackables dan mengekspos geometri lingkungan. Izin android.permission.SCENE_UNDERSTANDING_COARSE dianggap sebagai izin berbahaya, yaitu aplikasi harus meminta izin secara eksplisit.
(tingkat perlindungan: berbahaya)
Memeriksa kemampuan sistem
Struktur XrSystemMarkerTrackingPropertiesANDROID didefinisikan sebagai:
typedef struct XrSystemMarkerTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsMarkerTracking;
XrBool32 supportsMarkerSizeEstimation;
uint16_t maxMarkerCount;
} XrSystemMarkerTrackingPropertiesANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur seperti itu yang ditentukan dalam OpenXR inti atau ekstensi ini. Untuk mengetahui detail selengkapnya tentang rantai struktur, lihat struktur yang diperluas ( XrSystemProperties ).supportsMarkerTrackingadalahXrBool32yang menunjukkan apakah sistem saat ini menyediakan kemampuan pelacakan penanda.supportsMarkerSizeEstimationadalahXrBool32yang menunjukkan apakah sistem saat ini menyediakan estimasi ukuran penanda.maxMarkerCountadalah jumlah maksimum penanda yang dapat dilacak runtime secara bersamaan.
Aplikasi dapat memeriksa apakah sistem mampu melakukan pelacakan penanda dengan memperluas XrSystemProperties dengan struktur XrSystemMarkerTrackingPropertiesANDROID saat memanggil xrGetSystemProperties . Runtime harus menampilkan XR_ERROR_FEATURE_UNSUPPORTED untuk pembuatan pelacak penanda jika dan hanya jika supportsMarkerTracking adalah XR_FALSE .
Jika runtime mendukung pelacakan penanda, maxMarkerCount harus minimal 1.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_trackables_markerharus diaktifkan sebelum menggunakan XrSystemMarkerTrackingPropertiesANDROID -
typeharus berupaXR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_ANDROID -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur
Penanda pelacakan
Ekstensi ini menambahkan XR_TRACKABLE_TYPE_MARKER_ANDROID ke XrTrackableTypeANDROID .
Aplikasi membuat XrTrackableTrackerANDROID dengan memanggil xrCreateTrackableTrackerANDROID dan menentukan XR_TRACKABLE_TYPE_MARKER_ANDROID sebagai jenis yang dapat dilacak di XrTrackableTrackerCreateInfoANDROID :: trackableType serta menetapkan konfigurasi yang valid dengan menambahkan XrTrackableMarkerConfigurationANDROID ke rantai XrTrackableTrackerCreateInfoANDROID berikutnya.
Runtime harus menampilkan XR_ERROR_FEATURE_UNSUPPORTED jika XrTrackableTrackerCreateInfoANDROID :: trackableType adalah XR_TRACKABLE_TYPE_MARKER_ANDROID dan XrSystemMarkerTrackingPropertiesANDROID :: supportsMarkerTracking menampilkan XR_FALSE melalui xrGetSystemProperties .
Struktur XrTrackableMarkerConfigurationANDROID didefinisikan sebagai:
typedef struct XrTrackableMarkerConfigurationANDROID {
XrStructureType type;
void* next;
XrTrackableMarkerTrackingModeANDROID trackingMode;
uint32_t databaseCount;
const XrTrackableMarkerDatabaseANDROID* databases;
} XrTrackableMarkerConfigurationANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur.trackingModeadalah XrTrackableMarkerTrackingModeANDROID yang menunjukkan mode yang diinginkan untuk pelacakan.databaseCountadalahuint32_tyang menjelaskan jumlah elemen dalam arraydatabases.databasesadalah pointer ke array XrTrackableMarkerDatabaseANDROID , yang masing-masing berisi penanda yang diinginkan dari kamus tertentu untuk dilacak.
Aplikasi harus menetapkan konfigurasi yang valid dengan menambahkan XrTrackableMarkerConfigurationANDROID ke rantai XrTrackableTrackerCreateInfoANDROID :: next saat memanggil xrCreateTrackableTrackerANDROID dengan XrTrackableTrackerCreateInfoANDROID :: trackableType ditetapkan ke XR_TRACKABLE_TYPE_MARKER_ANDROID . Jika tidak, jika jenis pelacak ditetapkan seperti di atas, tetapi struktur konfigurasi tidak ada atau tidak valid, runtime harus menampilkan XR_ERROR_VALIDATION_FAILURE .
Jika runtime mendukung estimasi ukuran penanda, aplikasi dapat menetapkan XrTrackableMarkerDatabaseEntryANDROID :: edgeSize ke 0 di XrTrackableMarkerDatabaseANDROID :: entries untuk menunjukkan penggunaan estimasi ukuran. Jika tidak, aplikasi harus menetapkan XrTrackableMarkerDatabaseEntryANDROID :: edgeSize ke nilai positif atau runtime harus menampilkan XR_ERROR_VALIDATION_FAILURE .
Runtime harus memfilter output dari xrGetAllTrackablesANDROID agar cocok dengan trackingMode dan XrTrackableMarkerDatabaseEntryANDROID :: edgeSize .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_trackables_markerharus diaktifkan sebelum menggunakan XrTrackableMarkerConfigurationANDROID -
typeharus berupaXR_TYPE_TRACKABLE_MARKER_CONFIGURATION_ANDROID -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur -
trackingModeharus berupa nilai XrTrackableMarkerTrackingModeANDROID yang valid -
databasesharus berupa pointer ke array struktur XrTrackableMarkerDatabaseANDROID yang validdatabaseCount - Parameter
databaseCountharus lebih besar dari0
Enum XrTrackableMarkerTrackingModeANDROID menjelaskan mode pelacakan penanda yang didukung.
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;
Deskripsi Enumeran
XR_TRACKABLE_MARKER_TRACKING_MODE_DYNAMIC_ANDROID— Melacak penanda dinamis. Mode ini memiliki akurasi tertinggi dan berfungsi pada penanda bergerak dan statis, tetapi juga memiliki konsumsi daya tertinggi.XR_TRACKABLE_MARKER_TRACKING_MODE_STATIC_ANDROID— Melacak penanda statis. Mode ini terutama berguna untuk penanda yang diketahui bersifat statis, sehingga menghasilkan konsumsi daya yang lebih rendah dibandingkan dengan mode dinamis.
Struktur XrTrackableMarkerDatabaseANDROID menentukan kamus dan ID penanda yang sesuai untuk dilacak.
typedef struct XrTrackableMarkerDatabaseANDROID {
XrTrackableMarkerDictionaryANDROID dictionary;
uint32_t entryCount;
const XrTrackableMarkerDatabaseEntryANDROID* entries;
} XrTrackableMarkerDatabaseANDROID;
Deskripsi Anggota
dictionaryadalah XrTrackableMarkerDictionaryANDROID yang menjadi tempat semuaentriesberada.entryCountadalah uint32_t yang menjelaskan jumlah elemen dalam arrayentries. Aplikasi dapat menetapkanentryCount0untuk melacak semua penanda didictionary.entriesadalah pointer ke array XrTrackableMarkerDatabaseEntryANDROID , yang masing-masing berisi konfigurasi penanda yang akan dilacak.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_trackables_markerharus diaktifkan sebelum menggunakan XrTrackableMarkerDatabaseANDROID -
dictionaryharus berupa nilai XrTrackableMarkerDictionaryANDROID yang valid - Jika
entryCountbukan0,entriesharus berupa pointer ke array strukturentryCountXrTrackableMarkerDatabaseEntryANDROID
Enum XrTrackableMarkerDictionaryANDROID menjelaskan kamus penanda yang didukung.
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;
Struktur XrTrackableMarkerDatabaseEntryANDROID mengonfigurasi satu ID penanda kamus.
typedef struct XrTrackableMarkerDatabaseEntryANDROID {
int32_t id;
float edgeSize;
} XrTrackableMarkerDatabaseEntryANDROID;
Deskripsi Anggota
idadalah ID penanda seperti yang diberikan dalam kamus.edgeSizemewakili ukuran tepi penanda dalam meter. Jika runtime mendukung estimasi ukuran penanda, aplikasi dapat menetapkan nilai ini ke nol dan ukuran penanda akan diperkirakan secara online. Jika ini ditetapkan ke nol, tetapi runtime tidak mendukung estimasi ukuran penanda, runtime harus menampilkanXR_ERROR_VALIDATION_FAILURE.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_trackables_markerharus diaktifkan sebelum menggunakan XrTrackableMarkerDatabaseEntryANDROID
Mendapatkan penanda
Fungsi xrGetTrackableMarkerANDROID didefinisikan sebagai:
XrResult xrGetTrackableMarkerANDROID(
XrTrackableTrackerANDROID tracker,
const XrTrackableGetInfoANDROID* getInfo,
XrTrackableMarkerANDROID* markerOutput);
Deskripsi Parameter
trackeradalah XrTrackableTrackerANDROID yang akan dikueri.getInfoadalah XrTrackableGetInfoANDROID dengan informasi yang digunakan untuk mendapatkan penanda yang dapat dilacak.markerOutputadalah pointer ke struktur XrTrackableMarkerANDROID tempat penanda yang dapat dilacak ditampilkan.
Runtime harus menampilkan XR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROID jika jenis yang dapat dilacak dari XrTrackableANDROID bukan XR_TRACKABLE_TYPE_MARKER_ANDROID , atau jika jenis yang dapat dilacak dari XrTrackableTrackerANDROID bukan XR_TRACKABLE_TYPE_MARKER_ANDROID .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_trackables_markerharus diaktifkan sebelum memanggil xrGetTrackableMarkerANDROID -
trackerharus berupa handle XrTrackableTrackerANDROID yang valid -
getInfoharus berupa pointer ke struktur XrTrackableGetInfoANDROID yang valid -
markerOutputharus berupa pointer ke struktur XrTrackableMarkerANDROID
Kode Status
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
Struktur XrTrackableMarkerANDROID didefinisikan sebagai:
typedef struct XrTrackableMarkerANDROID {
XrStructureType type;
void* next;
XrTrackingStateANDROID trackingState;
XrTime lastUpdatedTime;
XrTrackableMarkerDictionaryANDROID dictionary;
int32_t markerId;
XrPosef centerPose;
XrExtent2Df extents;
} XrTrackableMarkerANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur seperti itu yang ditentukan dalam OpenXR inti atau ekstensi ini.trackingStateadalah XrTrackingStateANDROID penanda.lastUpdatedTimeadalahXrTimedari update terakhir penanda.dictionaryadalah XrTrackableMarkerDictionaryANDROID penanda.markerIdadalah ID penanda seperti yang diberikan dalam kamus.centerPoseadalah XrPosef penanda yang terletak di XrTrackableGetInfoANDROID ::baseSpace. Penanda terletak di bidang XZ dengan X mengarah ke kanan penanda dan Z mengarah ke bawahnya dan Y keluar dari penanda sebagai normal.extentsadalah dimensi XrExtent2Df penanda. Batas kotak pembatas berada di titik:centerPose+/- (extents/ 2).
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_trackables_markerharus diaktifkan sebelum menggunakan XrTrackableMarkerANDROID -
typeharus berupaXR_TYPE_TRACKABLE_MARKER_ANDROID -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur -
trackingStateharus berupa nilai XrTrackingStateANDROID yang valid -
dictionaryharus berupa nilai XrTrackableMarkerDictionaryANDROID yang valid
Contoh kode untuk mendapatkan penanda yang dapat dilacak
Kode contoh berikut menunjukkan cara mendapatkan penanda yang dapat dilacak.
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));
Perintah Baru
Struktur Baru
- XrTrackableMarkerANDROID
- XrTrackableMarkerDatabaseANDROID
- XrTrackableMarkerDatabaseEntryANDROID
Memperluas XrSystemProperties :
Memperluas XrTrackableTrackerCreateInfoANDROID :
Enum Baru
Konstanta Enum Baru
XR_ANDROID_TRACKABLES_MARKER_EXTENSION_NAMEXR_ANDROID_trackables_marker_SPEC_VERSIONMemperluas XrStructureType :
XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_ANDROIDXR_TYPE_TRACKABLE_MARKER_ANDROIDXR_TYPE_TRACKABLE_MARKER_CONFIGURATION_ANDROID
Memperluas XrTrackableTypeANDROID :
XR_TRACKABLE_TYPE_MARKER_ANDROID
Masalah
Riwayat Versi
Revisi 1, 23-07-2025 (Levana Chen)
- Deskripsi ekstensi awal.