XR_EXT_spatial_object_tracking
String Nama
XR_EXT_spatial_object_tracking
Jenis Ekstensi
Ekstensi instance
Nomor Ekstensi Terdaftar
745
Revisi
1
Status Ratifikasi
Belum diratifikasi
Dependensi Ekstensi dan Versi
XR_EXT_spatial_entity
Status IP
Tidak ada klaim kekayaan intelektual yang diketahui.
Kontributor
Nihav Jain, Google
Natalie Fleury, Meta
Yuichi Taguchi, Meta
Ron Bessems, Meta
Yin Li, Microsoft
Jimmy Alamparambil, ByteDance
Zhipeng Liu, ByteDance
Jun Yan, ByteDance
Andy Biar, Unity Technologies
Rebecca Nordhauser, Unity Technologies
Ringkasan
Ekstensi ini dibuat berdasarkan XR_EXT_spatial_entity dan menentukan kemampuan spasial untuk melacak sekumpulan objek yang telah ditentukan tanpa memerlukan set data input dari aplikasi.
Dukungan Runtime
Jika runtime mendukung pelacakan objek, runtime harus menunjukkan hal ini dengan menghitung XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT di xrEnumerateSpatialCapabilitiesEXT .
Konfigurasi
Struktur XrSpatialCapabilityConfigurationObjectTrackingEXT didefinisikan sebagai:
typedef struct XrSpatialCapabilityConfigurationObjectTrackingEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationObjectTrackingEXT;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur.capabilityadalah XrSpatialCapabilityEXT dan harus berupaXR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT.enabledComponentCountadalahuint32_tyang menjelaskan jumlah elemen dalam arrayenabledComponents.enabledComponentsadalah pointer ke array XrSpatialComponentTypeEXT .
Aplikasi dapat mengaktifkan kemampuan spasial XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT dengan menambahkan pointer ke struktur XrSpatialCapabilityConfigurationObjectTrackingEXT di XrSpatialContextCreateInfoEXT :: capabilityConfigs .
Runtime harus menampilkan XR_ERROR_VALIDATION_FAILURE jika capability bukan XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_object_trackingharus diaktifkan sebelum menggunakan XrSpatialCapabilityConfigurationObjectTrackingEXT -
typeharus berupaXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_OBJECT_TRACKING_EXT -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur . Lihat juga: XrSpatialFeatureObjectSemanticLabelSubsetEXT -
capabilityharus berupa nilai XrSpatialCapabilityEXT yang valid -
enabledComponentsharus berupa pointer ke array nilai XrSpatialComponentTypeEXT yang validenabledComponentCount - Parameter
enabledComponentCountharus lebih besar dari0
Komponen Dijamin
Runtime yang mendukung XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT , harus mendukung komponen spasial berikut sebagai komponen yang dijamin dari entity yang ditemukan oleh kemampuan ini dan harus menghitungnya dalam xrEnumerateSpatialCapabilityComponentTypesEXT :
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT- Setidaknya satu jenis komponen yang menyediakan sekumpulan label semantik untuk objek yang dilacak. Kemampuan pelacakan objek tidak ada artinya tanpa komponen label semantik. Meskipun ekstensi ini menentukan
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXTdanXR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXTsebagai kemungkinan komponen label semantik yang didukung runtime, ekstensi lain dapat menentukan jenis komponen baru untuk menyediakan berbagai class label semantik yang mendeskripsikan objek yang dilacak. Lihat [ext_spatial_semantic_labels_guidelines] untuk mengetahui detail tentang set label semantik dan desain jenis komponen. Runtime mungkin tidak mendukungXR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXTatauXR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXTuntuk kemampuan pelacakan objek, tetapi harus mendukung setidaknya satu jenis komponen yang menyediakan label semantik.
Komponen 3D Terbatas
Komponen 3D yang dibatasi menyediakan pusat dan batas objek yang diwakili oleh entitas tempatnya berada. Lihat 3D Terbatas untuk mengetahui detail selengkapnya.
Komponen Opsional
Runtime yang mendukung XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT , mungkin mendukung komponen spasial selain yang tercantum di bagian Komponen yang Dijamin. Aplikasi dapat menggunakan xrEnumerateSpatialCapabilityComponentTypesEXT untuk mendapatkan daftar lengkap komponen yang didukung runtime dan dapat mengonfigurasi komponen yang diinginkan saat membuat konteks spasial.
Label Semantik Objek
Data komponen
typedef enum XrSpatialObjectSemanticLabelEXT {
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_UNCATEGORIZED_EXT = 1,
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_SOFA_EXT = 2,
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_BED_EXT = 3,
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_CHAIR_EXT = 4,
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_TABLE_EXT = 5,
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_LAMP_EXT = 6,
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_PLANT_EXT = 7,
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_DISPLAY_SCREEN_EXT = 8,
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_WALL_ART_EXT = 9,
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_CABINET_EXT = 10,
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialObjectSemanticLabelEXT;
Enumerasi XrSpatialObjectSemanticLabelEXT menjelaskan kumpulan label semantik untuk objek.
Untuk entity dengan label XR_SPATIAL_OBJECT_SEMANTIC_LABEL_DISPLAY_SCREEN_EXT, sumbu +Z dari komponen Bounded 3D harus kurang lebih cocok dengan normal permukaan layar.
Untuk entity dengan label XR_SPATIAL_OBJECT_SEMANTIC_LABEL_WALL_ART_EXT, sumbu +Z komponen Bounded 3D harus cocok dengan normal permukaan dinding tempat karya seni ditemukan.
Untuk entity dengan label XR_SPATIAL_OBJECT_SEMANTIC_LABEL_TABLE_EXT, sumbu +Z dari komponen Bounded 3D harus cocok dengan normal permukaan tabel.
Untuk semua label lain di XrSpatialObjectSemanticLabelEXT , aplikasi tidak boleh membuat asumsi apa pun tentang bagaimana XrBoxf :: center :: orientation yang disediakan oleh komponen Bounded 3D pada entitas selaras dengan atribut fisik objek tersebut.
Nilai enumerasi memiliki arti berikut:
Deskripsi Enum
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_UNCATEGORIZED_EXT
Runtime tidak dapat mengklasifikasikan entity ini.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_SOFA_EXT
Entity-nya adalah sofa.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_BED_EXT
Entitasnya adalah tempat tidur.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_CHAIR_EXT
Entitasnya adalah kursi.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_TABLE_EXT
Entity adalah tabel.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_LAMP_EXT
Entity-nya adalah lampu.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_PLANT_EXT
Entity tersebut adalah tanaman.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_DISPLAY_SCREEN_EXT
Entitasnya adalah layar tampilan, seperti monitor atau TV.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_WALL_ART_EXT
Entitasnya adalah hiasan dinding.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_CABINET_EXT
Entity adalah lemari.
Struktur Daftar Komponen untuk Membuat Kueri Data
Struktur XrSpatialComponentObjectSemanticLabelListEXT didefinisikan sebagai:
typedef struct XrSpatialComponentObjectSemanticLabelListEXT {
XrStructureType type;
void* next;
uint32_t semanticLabelCount;
XrSpatialObjectSemanticLabelEXT* semanticLabels;
} XrSpatialComponentObjectSemanticLabelListEXT;
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.semanticLabelCountadalahuint32_tyang menjelaskan jumlah elemen dalam arraysemanticLabels.semanticLabelsadalah array XrSpatialObjectSemanticLabelEXT .
Untuk mengkueri komponen label semantik objek dari entity spasial dalam XrSpatialSnapshotEXT , sertakan XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT dalam XrSpatialComponentDataQueryConditionEXT :: componentTypes dan tambahkan XrSpatialComponentObjectSemanticLabelListEXT ke rantai XrSpatialComponentDataQueryResultEXT :: next.
Runtime harus menampilkan XR_ERROR_VALIDATION_FAILURE dari xrQuerySpatialComponentDataEXT jika XrSpatialComponentObjectSemanticLabelListEXT berada dalam rantai XrSpatialComponentDataQueryResultEXT :: next, tetapi XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT tidak disertakan dalam XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Runtime harus menampilkan XR_ERROR_SIZE_INSUFFICIENT dari xrQuerySpatialComponentDataEXT jika semanticLabelCount kurang dari XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_object_trackingharus diaktifkan sebelum menggunakan XrSpatialComponentObjectSemanticLabelListEXT -
typeharus berupaXR_TYPE_SPATIAL_COMPONENT_OBJECT_SEMANTIC_LABEL_LIST_EXT -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur -
semanticLabelsharus berupa pointer ke array nilaisemanticLabelCountXrSpatialObjectSemanticLabelEXT - Parameter
semanticLabelCountharus lebih besar dari0
Konfigurasi
Jika XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT dienumerasi di XrSpatialCapabilityComponentTypesEXT :: componentTypes untuk beberapa kemampuan, aplikasi dapat mengaktifkannya dengan menyertakan enumerasi dalam daftar XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents dari struktur turunan XrSpatialCapabilityConfigurationBaseHeaderEXT dari kemampuan yang mendukung komponen ini.
Komponen ini tidak memerlukan konfigurasi khusus untuk disertakan dalam rantai XrSpatialCapabilityConfigurationBaseHeaderEXT :: next, tetapi menawarkan konfigurasi opsional untuk disediakan aplikasi.
Struktur XrSpatialFeatureObjectSemanticLabelSubsetEXT didefinisikan sebagai:
typedef struct XrSpatialFeatureObjectSemanticLabelSubsetEXT {
XrStructureType type;
const void* next;
uint32_t semanticLabelCount;
const XrSpatialObjectSemanticLabelEXT* semanticLabels;
} XrSpatialFeatureObjectSemanticLabelSubsetEXT;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur.semanticLabelCountadalahuint32_tyang menjelaskan jumlah elemen dalam arraysemanticLabels.semanticLabelsadalah array XrSpatialObjectSemanticLabelEXT .
Jika runtime menghitung XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT dari xrEnumerateSpatialCapabilityComponentTypesEXT untuk kemampuan tertentu, runtime harus juga menghitung XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT dari xrEnumerateSpatialCapabilityFeaturesEXT untuk kemampuan yang sama. Jika aplikasi mengaktifkan XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT saat mengonfigurasi kemampuan tersebut, aplikasi dapat merantai XrSpatialFeatureObjectSemanticLabelSubsetEXT ke struktur konfigurasi yang sesuai dari kemampuan tersebut untuk memberikan subset label yang ditentukan dalam XrSpatialObjectSemanticLabelEXT ke runtime. Runtime dapat menggunakan subset label ini untuk mengoptimalkan pipeline pelacakannya.
Runtime harus menampilkan XR_ERROR_VALIDATION_FAILURE dari xrCreateSpatialContextAsyncEXT jika semanticLabels berisi label apa pun yang tidak ditentukan di XrSpatialObjectSemanticLabelEXT atau jika semanticLabels berisi XR_SPATIAL_OBJECT_SEMANTIC_LABEL_UNCATEGORIZED_EXT .
Runtime harus menampilkan XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT dari xrCreateSpatialContextAsyncEXT jika aplikasi memberikan daftar label yang valid di semanticLabels, tetapi XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT tidak disertakan dalam array XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents dari struktur konfigurasi yang dirantai ke XrSpatialFeatureObjectSemanticLabelSubsetEXT.
Jika aplikasi mengonfigurasi kemampuan dengan XrSpatialFeatureObjectSemanticLabelSubsetEXT yang valid, runtime tidak boleh menyertakan entitas yang memiliki label semantik yang tidak tercantum dalam semanticLabels di snapshot penemuan apa pun yang dibuat untuk konteks spasial yang dikonfigurasi.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_object_trackingharus diaktifkan sebelum menggunakan XrSpatialFeatureObjectSemanticLabelSubsetEXT -
typeharus berupaXR_TYPE_SPATIAL_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur -
semanticLabelsharus berupa pointer ke array nilai XrSpatialObjectSemanticLabelEXT yang validsemanticLabelCount - Parameter
semanticLabelCountharus lebih besar dari0
Label Semantik Keyboard
Data komponen
typedef enum XrSpatialKeyboardSemanticLabelEXT {
XR_SPATIAL_KEYBOARD_SEMANTIC_LABEL_UNCATEGORIZED_EXT = 1,
XR_SPATIAL_KEYBOARD_SEMANTIC_LABEL_KEYBOARD_EXT = 2,
XR_SPATIAL_KEYBOARD_SEMANTIC_LABEL_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialKeyboardSemanticLabelEXT;
Enumerasi XrSpatialKeyboardSemanticLabelEXT menjelaskan label semantik untuk keyboard.
Luas dan orientasi XR_SPATIAL_KEYBOARD_SEMANTIC_LABEL_KEYBOARD_EXT yang diwakili oleh komponen Bounded 3D pada entity yang sama ditampilkan dalam gambar berikut (dengan xyz = rgb) yang berasal dari pusat objek.
Gambar 30. Orientasi keyboard.
Deskripsi Enum
XR_SPATIAL_KEYBOARD_SEMANTIC_LABEL_UNCATEGORIZED_EXT
Runtime tidak dapat mengklasifikasikan entity ini.
XR_SPATIAL_KEYBOARD_SEMANTIC_LABEL_KEYBOARD_EXT
Entitasnya adalah keyboard.
Struct Daftar Komponen untuk Mengkueri Data
Struktur XrSpatialComponentKeyboardSemanticLabelListEXT didefinisikan sebagai:
typedef struct XrSpatialComponentKeyboardSemanticLabelListEXT {
XrStructureType type;
void* next;
uint32_t semanticLabelCount;
XrSpatialKeyboardSemanticLabelEXT* semanticLabels;
} XrSpatialComponentKeyboardSemanticLabelListEXT;
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.semanticLabelCountadalahuint32_tyang menjelaskan jumlah elemen dalam arraysemanticLabels.semanticLabelsadalah array XrSpatialKeyboardSemanticLabelEXT .
Untuk mengkueri komponen label semantik keyboard dari entity spasial dalam XrSpatialSnapshotEXT , sertakan XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT dalam XrSpatialComponentDataQueryConditionEXT :: componentTypes dan tambahkan XrSpatialComponentKeyboardSemanticLabelListEXT ke rantai XrSpatialComponentDataQueryResultEXT :: next.
Runtime harus menampilkan XR_ERROR_VALIDATION_FAILURE dari xrQuerySpatialComponentDataEXT jika XrSpatialComponentKeyboardSemanticLabelListEXT berada dalam rantai XrSpatialComponentDataQueryResultEXT :: next, tetapi XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT tidak disertakan dalam XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Runtime harus menampilkan XR_ERROR_SIZE_INSUFFICIENT dari xrQuerySpatialComponentDataEXT jika semanticLabelCount kurang dari XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_object_trackingharus diaktifkan sebelum menggunakan XrSpatialComponentKeyboardSemanticLabelListEXT -
typeharus berupaXR_TYPE_SPATIAL_COMPONENT_KEYBOARD_SEMANTIC_LABEL_LIST_EXT -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur -
semanticLabelsharus berupa pointer ke array nilaisemanticLabelCountXrSpatialKeyboardSemanticLabelEXT - Parameter
semanticLabelCountharus lebih besar dari0
Konfigurasi
Jika XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT dienumerasi di XrSpatialCapabilityComponentTypesEXT :: componentTypes untuk beberapa kemampuan, aplikasi dapat mengaktifkannya dengan menyertakan enumerasi dalam daftar XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents dari struktur turunan XrSpatialCapabilityConfigurationBaseHeaderEXT dari kemampuan yang mendukung komponen ini.
Komponen ini tidak memerlukan konfigurasi khusus untuk disertakan dalam rantai XrSpatialCapabilityConfigurationBaseHeaderEXT :: next.
Label Semantik Mouse
Data komponen
typedef enum XrSpatialMouseSemanticLabelEXT {
XR_SPATIAL_MOUSE_SEMANTIC_LABEL_UNCATEGORIZED_EXT = 1,
XR_SPATIAL_MOUSE_SEMANTIC_LABEL_MOUSE_EXT = 2,
XR_SPATIAL_MOUSE_SEMANTIC_LABEL_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialMouseSemanticLabelEXT;
Enumerasi XrSpatialMouseSemanticLabelEXT menjelaskan label semantik untuk mouse.
Deskripsi Enum
XR_SPATIAL_MOUSE_SEMANTIC_LABEL_UNCATEGORIZED_EXT
Runtime tidak dapat mengklasifikasikan entity ini.
XR_SPATIAL_MOUSE_SEMANTIC_LABEL_MOUSE_EXT
Entity adalah mouse.
Struct Daftar Komponen untuk Mengkueri Data
Struktur XrSpatialComponentMouseSemanticLabelListEXT didefinisikan sebagai:
typedef struct XrSpatialComponentMouseSemanticLabelListEXT {
XrStructureType type;
void* next;
uint32_t semanticLabelCount;
XrSpatialMouseSemanticLabelEXT* semanticLabels;
} XrSpatialComponentMouseSemanticLabelListEXT;
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.semanticLabelCountadalahuint32_tyang menjelaskan jumlah elemen dalam arraysemanticLabels.semanticLabelsadalah array XrSpatialMouseSemanticLabelEXT .
Untuk mengkueri komponen label semantik mouse dari entity spasial dalam XrSpatialSnapshotEXT , sertakan XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT dalam XrSpatialComponentDataQueryConditionEXT :: componentTypes dan tambahkan XrSpatialComponentMouseSemanticLabelListEXT ke rantai XrSpatialComponentDataQueryResultEXT :: next.
Runtime harus menampilkan XR_ERROR_VALIDATION_FAILURE dari xrQuerySpatialComponentDataEXT jika XrSpatialComponentMouseSemanticLabelListEXT berada dalam rantai XrSpatialComponentDataQueryResultEXT :: next, tetapi XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT tidak disertakan dalam XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Runtime harus menampilkan XR_ERROR_SIZE_INSUFFICIENT dari xrQuerySpatialComponentDataEXT jika semanticLabelCount kurang dari XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_EXT_spatial_object_trackingharus diaktifkan sebelum menggunakan XrSpatialComponentMouseSemanticLabelListEXT -
typeharus berupaXR_TYPE_SPATIAL_COMPONENT_MOUSE_SEMANTIC_LABEL_LIST_EXT -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur -
semanticLabelsharus berupa pointer ke array nilaisemanticLabelCountXrSpatialMouseSemanticLabelEXT - Parameter
semanticLabelCountharus lebih besar dari0
Konfigurasi
Jika XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT dienumerasi di XrSpatialCapabilityComponentTypesEXT :: componentTypes untuk beberapa kemampuan, aplikasi dapat mengaktifkannya dengan menyertakan enumerasi dalam daftar XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents dari struktur turunan XrSpatialCapabilityConfigurationBaseHeaderEXT dari kemampuan yang mendukung komponen ini.
Komponen ini tidak memerlukan konfigurasi khusus untuk disertakan dalam rantai XrSpatialCapabilityConfigurationBaseHeaderEXT :: next.
Kode contoh
Mengonfigurasi Kemampuan Pelacakan Objek
Contoh kode berikut menunjukkan cara mengonfigurasi kemampuan pelacakan objek saat membuat konteks spasial.
// Check if object tracking capability is supported
uint32_t capabilityCount;
CHK_XR(xrEnumerateSpatialCapabilitiesEXT(instance, systemId, 0, &capabilityCount, nullptr));
std::vector<XrSpatialCapabilityEXT> capabilities(capabilityCount);
CHK_XR(xrEnumerateSpatialCapabilitiesEXT(instance, systemId, capabilityCount, &capabilityCount, capabilities.data()));
if (std::find(capabilities.begin(), capabilities.end(), XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT) == capabilities.end()) {
return;
}
// Enumerate supported components for object tracking capability
XrSpatialCapabilityComponentTypesEXT objectComponents{XR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT};
CHK_XR(xrEnumerateSpatialCapabilityComponentTypesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT, &objectComponents));
std::vector<XrSpatialComponentTypeEXT> objectCapabilityComponents(objectComponents.componentTypeCountOutput);
objectComponents.componentTypeCapacityInput = objectCapabilityComponents.size();
objectComponents.componentTypes = objectCapabilityComponents.data();
CHK_XR(xrEnumerateSpatialCapabilityComponentTypesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT, &objectComponents));
// Check if the object & keyboard semantic labels component is supported
const auto supportsComponent = [&objectCapabilityComponents](XrSpatialComponentTypeEXT component) {
return std::find(objectCapabilityComponents.begin(), objectCapabilityComponents.end(), component) != objectCapabilityComponents.end();
};
const bool supportsObjectSemanticLabel = supportsComponent(XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT);
const bool supportsKeyboardSemanticLabel = supportsComponent(XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT);
// Enumerate supported features for object tracking capability
uint32_t featureCount;
CHK_XR(xrEnumerateSpatialCapabilityFeaturesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT, 0, &featureCount, nullptr));
std::vector<XrSpatialCapabilityFeatureEXT> features(featureCount);
CHK_XR(xrEnumerateSpatialCapabilityFeaturesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT, featureCount, &featureCount, features.data()));
const bool supportsObjectSemanticLabelSubsetFeature = std::find(features.begin(), features.end(), XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT) != features.end();
// Create a spatial context
XrSpatialContextEXT spatialContext{};
// Enable the guaranteed components of the object tracking capability
std::vector<XrSpatialComponentTypeEXT> enabledComponents = {
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT,
};
// Optionally enable the supported semantic labels
if (supportsObjectSemanticLabel) {
enabledComponents.push_back(XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT);
}
if (supportsKeyboardSemanticLabel) {
enabledComponents.push_back(XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT);
}
// We only want to track sofa and table.
std::vector<XrSpatialObjectSemanticLabelEXT> objectSemanticLabelSubset = {
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_SOFA_EXT,
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_TABLE_EXT
};
XrSpatialFeatureObjectSemanticLabelSubsetEXT subsetFeature{XR_TYPE_SPATIAL_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT};
subsetFeature.semanticLabelCount = objectSemanticLabelSubset.size();
subsetFeature.semanticLabels = objectSemanticLabelSubset.data();
XrSpatialCapabilityConfigurationObjectTrackingEXT objectTrackingConfig{XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_OBJECT_TRACKING_EXT};
objectTrackingConfig.capability = XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT;
objectTrackingConfig.enabledComponentCount = enabledComponents.size();
objectTrackingConfig.enabledComponents = enabledComponents.data();
if (supportsObjectSemanticLabelSubsetFeature) {
objectTrackingConfig.next = &subsetFeature;
}
std::array<XrSpatialCapabilityConfigurationBaseHeaderEXT*, 1> capabilityConfigs = {
reinterpret_cast<XrSpatialCapabilityConfigurationBaseHeaderEXT*>(&objectTrackingConfig),
};
XrSpatialContextCreateInfoEXT spatialContextCreateInfo{XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT};
spatialContextCreateInfo.capabilityConfigCount = capabilityConfigs.size();
spatialContextCreateInfo.capabilityConfigs = capabilityConfigs.data();
XrFutureEXT createContextFuture;
CHK_XR(xrCreateSpatialContextAsyncEXT(session, &spatialContextCreateInfo, &createContextFuture));
waitUntilReady(createContextFuture);
XrCreateSpatialContextCompletionEXT completion{XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT};
CHK_XR(xrCreateSpatialContextCompleteEXT(session, createContextFuture, &completion));
if (completion.futureResult != XR_SUCCESS) {
return;
}
spatialContext = completion.spatialContext;
// ...
// Discovery entities with the spatial context
// ...
CHK_XR(xrDestroySpatialContextEXT(spatialContext));
Menemukan Entity Spasial & Membuat Kueri Data Komponen
Contoh kode berikut menunjukkan cara menemukan entity spasial untuk konteks yang dikonfigurasi dengan XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT dan mengkueri data komponennya.
XrFutureEXT future = XR_NULL_FUTURE_EXT;
// We want to look for entities that have the following components.
std::vector<XrSpatialComponentTypeEXT> snapshotComponents = {
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT,
};
if (supportsKeyboardSemanticLabel) {
snapshotComponents.push_back(XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT);
}
auto discoverSpatialEntities = [&](XrSpatialContextEXT spatialContext, XrTime time) {
XrSpatialDiscoverySnapshotCreateInfoEXT snapshotCreateInfo{XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT};
snapshotCreateInfo.componentTypeCount = snapshotComponents.size();
snapshotCreateInfo.componentTypes = snapshotComponents.data();
CHK_XR(xrCreateSpatialDiscoverySnapshotAsyncEXT(spatialContext, &snapshotCreateInfo, &future));
waitUntilReady(future);
XrCreateSpatialDiscoverySnapshotCompletionInfoEXT completionInfo{XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT};
completionInfo.baseSpace = localSpace;
completionInfo.time = time;
completionInfo.future = future;
XrCreateSpatialDiscoverySnapshotCompletionEXT completion{XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT};
CHK_XR(xrCreateSpatialDiscoverySnapshotCompleteEXT(spatialContext, &completionInfo, &completion));
if (completion.futureResult == XR_SUCCESS) {
// Query for the semantic label component data
XrSpatialComponentDataQueryConditionEXT queryCond{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT};
queryCond.componentTypeCount = snapshotComponents.size();
queryCond.componentTypes = snapshotComponents.data();
XrSpatialComponentDataQueryResultEXT queryResult{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT};
CHK_XR(xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond, &queryResult));
std::vector<XrSpatialEntityIdEXT> entityIds(queryResult.entityIdCountOutput);
std::vector<XrSpatialEntityTrackingStateEXT> entityStates(queryResult.entityIdCountOutput);
queryResult.entityIdCapacityInput = entityIds.size();
queryResult.entityIds = entityIds.data();
queryResult.entityStateCapacityInput = entityStates.size();
queryResult.entityStates = entityStates.data();
std::vector<XrBoxf> bounded3D(queryResult.entityIdCountOutput);
XrSpatialComponentBounded3DListEXT bounded3DList{XR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT};
bounded3DList.boundCount = bounded3D.size();
bounded3DList.bounds = bounded3D.data();
queryResult.next = &bounded3DList;
std::vector<XrSpatialKeyboardSemanticLabelEXT> semanticLabels;
XrSpatialComponentKeyboardSemanticLabelListEXT semanticLabelsList{XR_TYPE_SPATIAL_COMPONENT_KEYBOARD_SEMANTIC_LABEL_LIST_EXT};
if (supportsKeyboardSemanticLabel) {
semanticLabels.resize(queryResult.entityIdCountOutput);
semanticLabelsList.semanticLabelCount = semanticLabels.size();
semanticLabelsList.semanticLabels = semanticLabels.data();
semanticLabelsList.next = queryResult.next;
queryResult.next = &semanticLabelsList;
}
CHK_XR(xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond, &queryResult));
for (int32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
if (entityStates[i] != XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT) {
continue;
}
// 3D bounds for entity entityIds[i] is bounded3D[i].extents centered on bounded3D[i].center.
if (supportsKeyboardSemanticLabel) {
// semantic label for entity entityIds[i] is semanticLabels[i].
}
}
CHK_XR(xrDestroySpatialSnapshotEXT(completion.snapshot));
}
};
while (1) {
// ...
// For every frame in frame loop
// ...
XrFrameState frameState; // previously returned from xrWaitFrame
const XrTime time = frameState.predictedDisplayTime;
// Poll for the XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT event
XrEventDataBuffer event = {XR_TYPE_EVENT_DATA_BUFFER};
XrResult result = xrPollEvent(instance, &event);
if (result == XR_SUCCESS) {
switch (event.type) {
case XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT: {
const XrEventDataSpatialDiscoveryRecommendedEXT& eventdata =
*reinterpret_cast<XrEventDataSpatialDiscoveryRecommendedEXT*>(&event);
// Discover spatial entities for the context that we received the "discovery
// recommended" event for.
discoverSpatialEntities(eventdata.spatialContext, time);
break;
}
}
}
// ...
// Finish frame loop
// ...
}
Struktur Baru
- XrSpatialCapabilityConfigurationObjectTrackingEXT
Memperluas XrSpatialCapabilityConfigurationObjectTrackingEXT :
Memperluas XrSpatialComponentDataQueryResultEXT :
Enum Baru
Konstanta Enum Baru
XR_EXT_SPATIAL_OBJECT_TRACKING_EXTENSION_NAMEXR_EXT_spatial_object_tracking_SPEC_VERSIONMemperluas XrSpatialCapabilityEXT :
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT
Memperluas XrSpatialCapabilityFeatureEXT :
XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT
Memperluas XrSpatialComponentTypeEXT :
XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXTXR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXTXR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT
Memperluas XrStructureType :
XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_OBJECT_TRACKING_EXTXR_TYPE_SPATIAL_COMPONENT_KEYBOARD_SEMANTIC_LABEL_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_MOUSE_SEMANTIC_LABEL_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_OBJECT_SEMANTIC_LABEL_LIST_EXTXR_TYPE_SPATIAL_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT
Masalah
Riwayat Versi
Revisi 1, 03-06-2025 (Nihav Jain, Google)
- Deskripsi ekstensi awal