XR_ANDROID_trackables_marker
Name String
XR_ANDROID_trackables_marker
Uzantı Türü
Örnek uzantısı
Kayıtlı Dahili Numara
708
Düzeltme
1
Onay Durumu
Onaylanmadı
Uzantı ve Sürüm Bağımlılıkları
XR_ANDROID_trackables
Desteği Sonlandırma Durumu
XR_EXT_spatial_marker_trackinguzantısı tarafından kullanımdan kaldırıldı
Son Değiştirilme Tarihi
2025-07-23
IP Durumu
Bilinen bir fikri mülkiyet hak talebi yok.
Katkıda bulunanlar
Christopher Doer, Google
Diego Tipaldi, Google
Levana Chen, Google
Jared Finder, Google
Spencer Quin, Google
Nihav Jain, Google
Ken Mackay, Google
Daniel Guttenberg, Qualcomm
Genel Bakış
Bu uzantı, fiziksel işaretçi takibini etkinleştirir ve uygulamaların XR içeriğini fiziksel işaretçilere verimli bir şekilde eklemesine olanak tanır.
Uzantı, iyi bilinen işaretçi türlerini (özellikle ArUco ve April Tags) destekler. Çalışma zamanlarının isteğe bağlı olarak işaretçi boyutu tahminini desteklemesini sağlar.
İzinler
Android uygulamalarının manifest dosyasında android.permission.SCENE_UNDERSTANDING_COARSE izni bulunmalıdır. Bu uzantı, XR_ANDROID_trackables uzantısına bağlıdır ve ortamın geometrisini gösterir. android.permission.SCENE_UNDERSTANDING_COARSE izni tehlikeli bir izin olarak kabul edilir. Bu nedenle uygulamaların bu izni açıkça istemesi gerekir.
(koruma düzeyi: tehlikeli)
Sistem özelliğini inceleme
XrSystemMarkerTrackingPropertiesANDROID yapısı şu şekilde tanımlanır:
typedef struct XrSystemMarkerTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsMarkerTracking;
XrBool32 supportsMarkerSizeEstimation;
uint16_t maxMarkerCount;
} XrSystemMarkerTrackingPropertiesANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType değeridir.next,NULLveya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir. Temel OpenXR'da veya bu uzantıda bu tür yapılar tanımlanmamıştır. Yapı zinciri hakkında daha fazla bilgi için genişletilen yapıya ( XrSystemProperties) bakın.supportsMarkerTracking, mevcut sistemin işaretçi izleme özelliği sağlayıp sağlamadığını gösteren birXrBool32değeridir.supportsMarkerSizeEstimation, mevcut sistemin işaretçi boyutu tahmini sağlayıp sağlamadığını gösteren birXrBool32değeridir.maxMarkerCount, çalışma zamanının aynı anda izleyebileceği maksimum işaretçi sayısıdır.
Uygulamalar, xrGetSystemProperties çağrısı yaparken XrSystemProperties'i XrSystemMarkerTrackingPropertiesANDROID yapısıyla genişleterek sistemin işaretçi takibi yapıp yapamayacağını kontrol edebilir. Çalışma zamanı, yalnızca supportsMarkerTracking, XR_FALSE ise işaretçi izleyici oluşturma için XR_ERROR_FEATURE_UNSUPPORTED değerini döndürmelidir.
Çalışma zamanı işaretçi izlemeyi destekliyorsa maxMarkerCount en az 1 olmalıdır.
Geçerli Kullanım (Dolaylı)
- XrSystemMarkerTrackingPropertiesANDROID kullanılmadan önce
XR_ANDROID_trackables_markeruzantısı etkinleştirilmelidir. -
typeXR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_ANDROIDolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır.
İzleme işaretçileri
Bu uzantı, XrTrackableTypeANDROID'ye XR_TRACKABLE_TYPE_MARKER_ANDROID ekler.
Uygulama, xrCreateTrackableTrackerANDROID'i çağırarak ve XrTrackableTrackerCreateInfoANDROID :: trackableType içinde izlenebilir tür olarak XR_TRACKABLE_TYPE_MARKER_ANDROID değerini belirterek bir XrTrackableTrackerANDROID oluşturur. Ayrıca, XrTrackableTrackerCreateInfoANDROID'in sonraki zincirine bir XrTrackableMarkerConfigurationANDROID ekleyerek geçerli bir yapılandırma ayarlar.
XrTrackableTrackerCreateInfoANDROID :: trackableType, XR_TRACKABLE_TYPE_MARKER_ANDROID ise ve XrSystemMarkerTrackingPropertiesANDROID :: supportsMarkerTracking, xrGetSystemProperties aracılığıyla XR_FALSE değerini döndürüyorsa çalışma zamanı XR_ERROR_FEATURE_UNSUPPORTED değerini döndürmelidir (must).
XrTrackableMarkerConfigurationANDROID yapısı şu şekilde tanımlanır:
typedef struct XrTrackableMarkerConfigurationANDROID {
XrStructureType type;
void* next;
XrTrackableMarkerTrackingModeANDROID trackingMode;
uint32_t databaseCount;
const XrTrackableMarkerDatabaseANDROID* databases;
} XrTrackableMarkerConfigurationANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType değeridir.next,NULLveya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir.trackingMode, istenen izleme modunu belirten bir XrTrackableMarkerTrackingModeANDROID değeridir.databaseCount,databasesdizisindeki öğe sayısını açıklayan biruint32_tdeğeridir.databases, her biri belirli bir sözlükten izlenecek istenen işaretçileri içeren bir XrTrackableMarkerDatabaseANDROID dizisine işaretçidir.
Uygulama, XrTrackableTrackerCreateInfoANDROID :: trackableType, XR_TRACKABLE_TYPE_MARKER_ANDROID olarak ayarlanmış şekilde xrCreateTrackableTrackerANDROID'i çağırırken XrTrackableTrackerCreateInfoANDROID :: next zincirine bir XrTrackableMarkerConfigurationANDROID ekleyerek geçerli bir yapılandırma ayarlamalıdır (must). Aksi takdirde, izleyici türü yukarıdaki gibi ayarlanmışsa ancak yapılandırma yapısı mevcut değilse veya geçerli değilse çalışma zamanı XR_ERROR_VALIDATION_FAILURE değerini döndürmelidir (must).
Çalışma zamanı, işaretçi boyutu tahminini destekliyorsa uygulama, boyut tahmininin kullanımını belirtmek için XrTrackableMarkerDatabaseANDROID :: entries içinde XrTrackableMarkerDatabaseEntryANDROID :: edgeSize değerini 0 olarak ayarlayabilir. Aksi takdirde uygulama, XrTrackableMarkerDatabaseEntryANDROID :: edgeSize değerini pozitif bir değere ayarlamalı veya çalışma zamanı XR_ERROR_VALIDATION_FAILURE değerini döndürmelidir.
Çalışma zamanı, trackingMode ve XrTrackableMarkerDatabaseEntryANDROID :: edgeSize ile eşleşmesi için xrGetAllTrackablesANDROID çıkışını filtrelemelidir (must).
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_trackables_markeruzantısı, XrTrackableMarkerConfigurationANDROID kullanılmadan önce etkinleştirilmelidir. -
typeXR_TYPE_TRACKABLE_MARKER_CONFIGURATION_ANDROIDolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır. -
trackingModegeçerli bir XrTrackableMarkerTrackingModeANDROID değeri olmalıdır -
databases,databaseCountgeçerli XrTrackableMarkerDatabaseANDROID yapısından oluşan bir diziye işaretçi olmalıdır. -
databaseCountparametresi0değerinden büyük olmalıdır.
XrTrackableMarkerTrackingModeANDROID enum, işaretçilerin desteklenen izleme modlarını açıklar.
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;
Numaralandırma Açıklamaları
XR_TRACKABLE_MARKER_TRACKING_MODE_DYNAMIC_ANDROID: Dinamik işaretçileri izleme. Bu mod en yüksek doğruluğa sahiptir ve hareketli ve statik işaretleyicilerde çalışır ancak aynı zamanda en yüksek güç tüketimine sahiptir.XR_TRACKABLE_MARKER_TRACKING_MODE_STATIC_ANDROID: Statik işaretçileri izleme. Bu mod, öncelikle statik olduğu bilinen işaretçiler için kullanışlıdır. Bu sayede, dinamik moda kıyasla daha az güç tüketimi sağlanır.
XrTrackableMarkerDatabaseANDROID yapısı, bir sözlük ve takip edilecek ilgili işaretçi kimliklerini tanımlar.
typedef struct XrTrackableMarkerDatabaseANDROID {
XrTrackableMarkerDictionaryANDROID dictionary;
uint32_t entryCount;
const XrTrackableMarkerDatabaseEntryANDROID* entries;
} XrTrackableMarkerDatabaseANDROID;
Üye Açıklamaları
dictionary, tümentriesöğelerinin ait olduğu XrTrackableMarkerDictionaryANDROID'dir.entryCount,entriesdizisindeki öğelerin sayısını açıklayan bir uint32_t'dir. Uygulama,dictionaryiçindeki tüm işaretçileri izlemek içinentryCount0değerini ayarlayabilir.entries, her biri izlenecek bir işaretçinin yapılandırmasını içeren bir XrTrackableMarkerDatabaseEntryANDROID dizisine işaret eder.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_trackables_markeruzantısı, XrTrackableMarkerDatabaseANDROID kullanılmadan önce etkinleştirilmelidir -
dictionarygeçerli bir XrTrackableMarkerDictionaryANDROID değeri olmalıdır. -
entryCount,0değilseentries,entryCountXrTrackableMarkerDatabaseEntryANDROID yapılarından oluşan bir dizinin işaretçisi olmalıdır.
XrTrackableMarkerDictionaryANDROID enum'u, desteklenen işaretçi sözlüklerini açıklar.
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 yapısı, bir sözlüğün tek bir işaretçi kimliğini yapılandırır.
typedef struct XrTrackableMarkerDatabaseEntryANDROID {
int32_t id;
float edgeSize;
} XrTrackableMarkerDatabaseEntryANDROID;
Üye Açıklamaları
id, sözlükte verilen işaretçi kimliğidir.edgeSize, işaretçi kenarının metre cinsinden boyutunu temsil eder. Çalışma zamanı, işaretçi boyutu tahminini destekliyorsa uygulama bunu sıfır olarak ayarlayabilir ve işaretçi boyutu online olarak tahmin edilir. Bu değer sıfır olarak ayarlanmışsa ancak çalışma zamanı, işaretçi boyutu tahminini desteklemiyorsa çalışma zamanıXR_ERROR_VALIDATION_FAILUREdeğerini döndürmelidir.
Geçerli Kullanım (Dolaylı)
- XrTrackableMarkerDatabaseEntryANDROID kullanılmadan önce
XR_ANDROID_trackables_markeruzantısı etkinleştirilmelidir
İşaretçileri alma
xrGetTrackableMarkerANDROID işlevi şu şekilde tanımlanır:
XrResult xrGetTrackableMarkerANDROID(
XrTrackableTrackerANDROID tracker,
const XrTrackableGetInfoANDROID* getInfo,
XrTrackableMarkerANDROID* markerOutput);
Parametre Açıklamaları
tracker, sorgulanacak XrTrackableTrackerANDROID'dir.getInfo, izlenebilir işaretçiyi almak için kullanılan bilgileri içeren XrTrackableGetInfoANDROID'dir.markerOutput, izlenebilir işaretçinin döndürüldüğü XrTrackableMarkerANDROID yapısına işaret eden bir işaretçidir.
XrTrackableANDROID öğesinin izlenebilir türü XR_TRACKABLE_TYPE_MARKER_ANDROID değilse veya XrTrackableTrackerANDROID öğesinin izlenebilir türü XR_TRACKABLE_TYPE_MARKER_ANDROID değilse çalışma zamanı XR_ERROR_MISMATCHING_TRACKABLE_TYPE_ANDROID değerini döndürmelidir.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_trackables_markeruzantısı, xrGetTrackableMarkerANDROID çağrılmadan önce etkinleştirilmelidir. -
trackergeçerli bir XrTrackableTrackerANDROID herkese açık kullanıcı adı olmalıdır -
getInfo, geçerli bir XrTrackableGetInfoANDROID yapısına işaret eden bir işaretçi olmalıdır. -
markerOutput, bir XrTrackableMarkerANDROID yapısına işaretçi olmalıdır.
Dönüş Kodları
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
XrTrackableMarkerANDROID yapısı şu şekilde tanımlanır:
typedef struct XrTrackableMarkerANDROID {
XrStructureType type;
void* next;
XrTrackingStateANDROID trackingState;
XrTime lastUpdatedTime;
XrTrackableMarkerDictionaryANDROID dictionary;
int32_t markerId;
XrPosef centerPose;
XrExtent2Df extents;
} XrTrackableMarkerANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType değeridir.next,NULLveya bir yapı zincirindeki sonraki yapıya işaret eden bir göstergedir. Temel OpenXR'da veya bu uzantıda bu tür yapılar tanımlanmamıştır.trackingState, işaretçinin XrTrackingStateANDROID değeridir.lastUpdatedTime, işaretçinin son güncellemesininXrTimedeğeridir.dictionary, işaretçinin XrTrackableMarkerDictionaryANDROID değeridir.markerId, sözlükte verilen işaretçi kimliğidir.centerPose, XrTrackableGetInfoANDROID ::baseSpaceiçinde bulunan işaretçinin XrPosef değeridir. İşaretçi, XZ düzleminde yer alır. X, işaretçinin sağını, Z ise altını gösterir. Y ise işaretçiden normal olarak çıkar.extents, işaretçinin XrExtent2Df boyutlarıdır. Sınırlayıcı kutunun sınırı şu noktalardadır:centerPose+/- (extents/ 2).
Geçerli Kullanım (Dolaylı)
- XrTrackableMarkerANDROID kullanılmadan önce
XR_ANDROID_trackables_markeruzantısı etkinleştirilmelidir -
typeXR_TYPE_TRACKABLE_MARKER_ANDROIDolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır. -
trackingStategeçerli bir XrTrackingStateANDROID değeri olmalıdır -
dictionarygeçerli bir XrTrackableMarkerDictionaryANDROID değeri olmalıdır.
İzlenebilir işaretçileri alma için örnek kod
Aşağıdaki örnek kodda, izlenebilir işaretçilerin nasıl alınacağı gösterilmektedir.
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));
Yeni Komutlar
Yeni Yapılar
- XrTrackableMarkerANDROID
- XrTrackableMarkerDatabaseANDROID
- XrTrackableMarkerDatabaseEntryANDROID
XrSystemProperties'i genişletme:
XrTrackableTrackerCreateInfoANDROID'i genişletme:
Yeni Enum Veri Türleri
Yeni Enum Sabitleri
XR_ANDROID_TRACKABLES_MARKER_EXTENSION_NAMEXR_ANDROID_trackables_marker_SPEC_VERSIONXrStructureType'ı genişletme:
XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_ANDROIDXR_TYPE_TRACKABLE_MARKER_ANDROIDXR_TYPE_TRACKABLE_MARKER_CONFIGURATION_ANDROID
XrTrackableTypeANDROID'i genişletme:
XR_TRACKABLE_TYPE_MARKER_ANDROID
Sayılar
Sürüm Geçmişi
Düzeltme 1, 23.07.2025 (Levana Chen)
- İlk uzantı açıklaması.