XR_EXT_spatial_object_tracking
Name String
XR_EXT_spatial_object_tracking
Uzantı Türü
Örnek uzantısı
Kayıtlı Dahili Numara
745
Düzeltme
1
Onay Durumu
Onaylanmadı
Uzantı ve Sürüm Bağımlılıkları
XR_EXT_spatial_entity
IP Durumu
Bilinen bir fikri mülkiyet hak talebi yok.
Katkıda bulunanlar
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
Genel Bakış
Bu uzantı, XR_EXT_spatial_entity üzerine kuruludur ve uygulamadan giriş veri kümesi gerektirmeden önceden tanımlanmış bir nesne kümesini izlemek için uzamsal bir özellik tanımlar.
Çalışma Zamanı Desteği
Çalışma zamanı, nesne izlemeyi destekliyorsa bunu xrEnumerateSpatialCapabilitiesEXT içinde XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT değerini numaralandırarak belirtmesi gerekir.
Yapılandırma
XrSpatialCapabilityConfigurationObjectTrackingEXT yapısı şu şekilde tanımlanır:
typedef struct XrSpatialCapabilityConfigurationObjectTrackingEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationObjectTrackingEXT;
Ü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.capability, bir XrSpatialCapabilityEXT'tir veXR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXTolmalıdır.enabledComponentCount,enabledComponentsdizisindeki öğe sayısını açıklayan biruint32_tdeğeridir.enabledComponents, XrSpatialComponentTypeEXT dizisine işaret eden bir göstergedir.
Uygulamalar, XrSpatialContextCreateInfoEXT :: capabilityConfigs içindeki XrSpatialCapabilityConfigurationObjectTrackingEXT yapısına bir işaretçi ekleyerek XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT uzamsal özelliğini etkinleştirebilir.
capability, XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT değilse çalışma zamanı XR_ERROR_VALIDATION_FAILURE değerini döndürmelidir.
Geçerli Kullanım (Dolaylı)
- XrSpatialCapabilityConfigurationObjectTrackingEXT kullanılmadan önce
XR_EXT_spatial_object_trackinguzantısı etkinleştirilmelidir -
typeXR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_OBJECT_TRACKING_EXTolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır. Ayrıca bkz: XrSpatialFeatureObjectSemanticLabelSubsetEXT -
capabilitygeçerli bir XrSpatialCapabilityEXT değeri olmalıdır -
enabledComponents,enabledComponentCountgeçerli XrSpatialComponentTypeEXT değerinden oluşan bir diziye işaretçi olmalıdır -
enabledComponentCountparametresi0değerinden büyük olmalıdır.
Garantili Bileşenler
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT özelliğini destekleyen bir çalışma zamanı, bu özellik tarafından keşfedilen varlıkların garantili bileşenleri olarak aşağıdaki uzamsal bileşenleri desteklemeli (must) ve bunları xrEnumerateSpatialCapabilityComponentTypesEXT içinde listelemelidir (must):
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT- İzlenen nesneler için bir dizi anlamsal etiket sağlayan en az bir bileşen türü. Nesne izleme özelliği, anlamsal etiket bileşeni olmadan anlamsızdır. Bu uzantı, çalışma zamanlarının desteklemesi için olası semantik etiket bileşenleri olarak
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXTveXR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXTdeğerlerini tanımlarken diğer uzantılar, izlenen bir nesneyi açıklayan farklı semantik etiket sınıfları sağlamak için yeni bileşen türleri tanımlayabilir. Anlamsal etiket kümeleri ve bileşen türleri tasarımı hakkında ayrıntılı bilgi için [ext_spatial_semantic_labels_guidelines] adresini ziyaret edin. Çalışma zamanları, nesne dosyası özelliği içinXR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXTveyaXR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT'yi desteklemeyebilir ancak anlamsal etiket sağlayan en az bir bileşen türünü desteklemesi gerekir.
Sınırlı 3D Bileşen
Sınırlı 3D bileşeni, üzerinde bulunduğu varlık tarafından temsil edilen nesnenin merkezini ve kapsamını sağlar. Daha fazla bilgi için Sınırlı 3D bölümüne bakın.
İsteğe Bağlı Bileşenler
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT destekleyen bir çalışma zamanı, Garantili Bileşenler bölümünde listelenenlere ek olarak uzamsal bileşenleri destekleyebilir (may). Uygulama, bir çalışma zamanının desteklediği bileşenlerin tam listesini almak için xrEnumerateSpatialCapabilityComponentTypesEXT'yi kullanabilir ve ardından uzamsal bağlamı oluştururken ilgilendiği bileşenleri yapılandırabilir.
Nesne Anlamsal Etiketi
Bileşen verileri
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;
XrSpatialObjectSemanticLabelEXT numaralandırması, nesneler için bir dizi anlamsal etiketi tanımlar.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_DISPLAY_SCREEN_EXT etiketine sahip varlıklar için Sınırlı 3D bileşeninin +Z ekseni, ekranın yüzey normaliyle kabaca eşleşmelidir.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_WALL_ART_EXT etiketine sahip varlıklar için Sınırlı 3D bileşeninin +Z ekseni, sanat eserinin keşfedildiği duvarın yüzey normaliyle eşleşmelidir.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_TABLE_EXT etiketine sahip varlıklar için Sınırlı 3D bileşeninin +Z ekseni, tablonun yüzey normaliyle eşleşmelidir.
XrSpatialObjectSemanticLabelEXT içindeki diğer tüm etiketler için uygulama, varlıktaki Bounded 3D bileşeni tarafından sağlanan XrBoxf :: center :: orientation değerinin, ilgili nesnenin fiziksel özellikleriyle nasıl uyumlu olduğu konusunda herhangi bir varsayımda bulunmamalıdır.
Numaralandırma değerleri aşağıdaki anlamlara sahiptir:
Enum Açıklaması
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_UNCATEGORIZED_EXT
Çalışma zamanı bu varlığı sınıflandıramadı.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_SOFA_EXT
Öğe bir kanepedir.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_BED_EXT
Varlık bir yataktır.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_CHAIR_EXT
Öğe bir sandalyedir.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_TABLE_EXT
Varlık bir tablodur.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_LAMP_EXT
Öğe bir lamba.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_PLANT_EXT
Varlık bir bitkidir.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_DISPLAY_SCREEN_EXT
Varlık, monitör veya TV gibi bir ekrandır.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_WALL_ART_EXT
Varlık, duvar sanatı.
XR_SPATIAL_OBJECT_SEMANTIC_LABEL_CABINET_EXT
Varlık bir dolaptır.
Verileri Sorgulamak İçin Bileşen Listesi Yapısı
XrSpatialComponentObjectSemanticLabelListEXT yapısı şu şekilde tanımlanır:
typedef struct XrSpatialComponentObjectSemanticLabelListEXT {
XrStructureType type;
void* next;
uint32_t semanticLabelCount;
XrSpatialObjectSemanticLabelEXT* semanticLabels;
} XrSpatialComponentObjectSemanticLabelListEXT;
Ü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.semanticLabelCount,semanticLabelsdizisindeki öğe sayısını açıklayan biruint32_tdeğeridir.semanticLabels, XrSpatialObjectSemanticLabelEXT dizisidir.
XrSpatialSnapshotEXT içindeki uzamsal varlıkların nesne semantik etiket bileşenini sorgulamak için XrSpatialComponentDataQueryConditionEXT :: componentTypes içine XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT ekleyin ve XrSpatialComponentDataQueryResultEXT :: next zincirine XrSpatialComponentObjectSemanticLabelListEXT ekleyin.
XrSpatialComponentDataQueryResultEXT :: next zincirinde XrSpatialComponentObjectSemanticLabelListEXT varsa ancak XrSpatialComponentDataQueryConditionEXT :: componentTypes içinde XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT yoksa çalışma zamanı, xrQuerySpatialComponentDataEXT'ten XR_ERROR_VALIDATION_FAILURE döndürmelidir.
semanticLabelCount, XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput değerinden küçükse çalışma zamanı, xrQuerySpatialComponentDataEXT'ten XR_ERROR_SIZE_INSUFFICIENT değerini döndürmelidir.
Geçerli Kullanım (Dolaylı)
- XrSpatialComponentObjectSemanticLabelListEXT kullanılmadan önce
XR_EXT_spatial_object_trackinguzantısı etkinleştirilmelidir. -
typeXR_TYPE_SPATIAL_COMPONENT_OBJECT_SEMANTIC_LABEL_LIST_EXTolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır. -
semanticLabels,semanticLabelCountXrSpatialObjectSemanticLabelEXT değerlerinden oluşan bir dizinin işaretçisi olmalıdır. -
semanticLabelCountparametresi0değerinden büyük olmalıdır.
Yapılandırma
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT, bir özellik için XrSpatialCapabilityComponentTypesEXT :: componentTypes içinde listeleniyorsa uygulama, bu bileşeni destekleyen özelliğin XrSpatialCapabilityConfigurationBaseHeaderEXT türetilmiş yapısının XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents listesine numaralandırıcıyı ekleyerek bu özelliği etkinleştirebilir.
Bu bileşenin XrSpatialCapabilityConfigurationBaseHeaderEXT :: next zincirine dahil edilmesi için özel bir yapılandırma gerekmez ancak uygulamaların sağlayabileceği isteğe bağlı bir yapılandırma sunar.
XrSpatialFeatureObjectSemanticLabelSubsetEXT yapısı şu şekilde tanımlanır:
typedef struct XrSpatialFeatureObjectSemanticLabelSubsetEXT {
XrStructureType type;
const void* next;
uint32_t semanticLabelCount;
const XrSpatialObjectSemanticLabelEXT* semanticLabels;
} XrSpatialFeatureObjectSemanticLabelSubsetEXT;
Ü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.semanticLabelCount,semanticLabelsdizisindeki öğe sayısını açıklayan biruint32_tdeğeridir.semanticLabels, XrSpatialObjectSemanticLabelEXT dizisidir.
Çalışma zamanı, belirli bir özellik için xrEnumerateSpatialCapabilityComponentTypesEXT'ten XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT değerini listeliyorsa aynı özellik için xrEnumerateSpatialCapabilityFeaturesEXT'ten XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT değerini de listelemesi gerekir. Bir uygulama, bu özelliği yapılandırırken XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT özelliğini etkinleştirirse XrSpatialFeatureObjectSemanticLabelSubsetEXT özelliğini bu özelliğin ilgili yapılandırma yapısına zincirleyerek çalışma zamanına XrSpatialObjectSemanticLabelEXT içinde tanımlanan etiketlerin bir alt kümesini sağlayabilir. Çalışma zamanı, izleme ardışık düzenlerini optimize etmek için bu etiket alt kümesini kullanabilir.
semanticLabels, XrSpatialObjectSemanticLabelEXT içinde tanımlanmamış bir etiket içeriyorsa veya semanticLabels, XR_SPATIAL_OBJECT_SEMANTIC_LABEL_UNCATEGORIZED_EXT içeriyorsa çalışma zamanı, xrCreateSpatialContextAsyncEXT'ten XR_ERROR_VALIDATION_FAILURE döndürmelidir.
Uygulama, semanticLabels içinde geçerli bir etiket listesi sağlıyorsa ancak XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT, XrSpatialFeatureObjectSemanticLabelSubsetEXT'nin bağlı olduğu yapılandırma yapısının XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents dizisine dahil edilmemişse çalışma zamanı, xrCreateSpatialContextAsyncEXT'ten XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT değerini döndürmelidir.
Uygulama, geçerli bir XrSpatialFeatureObjectSemanticLabelSubsetEXT ile bir özelliği yapılandırırsa çalışma zamanı, yapılandırılmış uzamsal bağlam için oluşturulan herhangi bir keşif anlık görüntüsünde semanticLabels içinde listelenmeyen semantik etiketlere sahip varlıkları içermemelidir.
Geçerli Kullanım (Dolaylı)
-
XR_EXT_spatial_object_trackinguzantısı, XrSpatialFeatureObjectSemanticLabelSubsetEXT kullanılmadan önce etkinleştirilmelidir -
typeXR_TYPE_SPATIAL_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXTolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır. -
semanticLabels,semanticLabelCountgeçerli XrSpatialObjectSemanticLabelEXT değerinden oluşan bir diziye işaretçi olmalıdır. -
semanticLabelCountparametresi0değerinden büyük olmalıdır.
Klavye Anlamsal Etiketi
Bileşen verileri
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;
XrSpatialKeyboardSemanticLabelEXT numaralandırması, klavyenin semantik etiketini açıklar.
Aynı varlıktaki Sınırlı 3D bileşeniyle temsil edilen XR_SPATIAL_KEYBOARD_SEMANTIC_LABEL_KEYBOARD_EXT öğesinin kapsamı ve yönü, nesnenin merkezinden kaynaklanan aşağıdaki resimde (xyz = rgb ile) gösterilmektedir.
30. şekil Klavye yönü.
Enum Açıklaması
XR_SPATIAL_KEYBOARD_SEMANTIC_LABEL_UNCATEGORIZED_EXT
Çalışma zamanı bu varlığı sınıflandıramadı.
XR_SPATIAL_KEYBOARD_SEMANTIC_LABEL_KEYBOARD_EXT
Öğe bir klavyedir.
Sorgu Verileri İçin Bileşen Listesi Yapısı
XrSpatialComponentKeyboardSemanticLabelListEXT yapısı şu şekilde tanımlanır:
typedef struct XrSpatialComponentKeyboardSemanticLabelListEXT {
XrStructureType type;
void* next;
uint32_t semanticLabelCount;
XrSpatialKeyboardSemanticLabelEXT* semanticLabels;
} XrSpatialComponentKeyboardSemanticLabelListEXT;
Ü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.semanticLabelCount,semanticLabelsdizisindeki öğe sayısını açıklayan biruint32_tdeğeridir.semanticLabels, XrSpatialKeyboardSemanticLabelEXT dizisidir.
XrSpatialSnapshotEXT içindeki uzamsal varlıkların klavye semantik etiket bileşenini sorgulamak için XrSpatialComponentDataQueryConditionEXT :: componentTypes içine XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT ekleyin ve XrSpatialComponentDataQueryResultEXT :: next zincirine XrSpatialComponentKeyboardSemanticLabelListEXT ekleyin.
XrSpatialComponentKeyboardSemanticLabelListEXT, XrSpatialComponentDataQueryResultEXT :: next zincirindeyse ancak XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT, XrSpatialComponentDataQueryConditionEXT :: componentTypes içinde yer almıyorsa çalışma zamanı, xrQuerySpatialComponentDataEXT'ten XR_ERROR_VALIDATION_FAILURE değerini döndürmelidir.
semanticLabelCount, XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput değerinden küçükse çalışma zamanı, xrQuerySpatialComponentDataEXT'ten XR_ERROR_SIZE_INSUFFICIENT değerini döndürmelidir.
Geçerli Kullanım (Dolaylı)
- XrSpatialComponentKeyboardSemanticLabelListEXT kullanılmadan önce
XR_EXT_spatial_object_trackinguzantısı etkinleştirilmelidir -
typeXR_TYPE_SPATIAL_COMPONENT_KEYBOARD_SEMANTIC_LABEL_LIST_EXTolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır. -
semanticLabels,semanticLabelCountXrSpatialKeyboardSemanticLabelEXT değerlerinden oluşan bir diziye işaretçi olmalıdır. -
semanticLabelCountparametresi0değerinden büyük olmalıdır.
Yapılandırma
XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT, bir özellik için XrSpatialCapabilityComponentTypesEXT :: componentTypes içinde listeleniyorsa uygulama, bu bileşeni destekleyen özelliğin XrSpatialCapabilityConfigurationBaseHeaderEXT türetilmiş yapısının XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents listesine numaralandırıcıyı ekleyerek bu özelliği etkinleştirebilir.
Bu bileşenin XrSpatialCapabilityConfigurationBaseHeaderEXT :: next zincirine dahil edilmesi için özel bir yapılandırma gerekmez.
Fare Anlamsal Etiketi
Bileşen verileri
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;
XrSpatialMouseSemanticLabelEXT numaralandırması, fare için anlamsal bir etiketi açıklar.
Enum Açıklaması
XR_SPATIAL_MOUSE_SEMANTIC_LABEL_UNCATEGORIZED_EXT
Çalışma zamanı bu varlığı sınıflandıramadı.
XR_SPATIAL_MOUSE_SEMANTIC_LABEL_MOUSE_EXT
Varlık bir faredir.
Sorgu Verileri İçin Bileşen Listesi Yapısı
XrSpatialComponentMouseSemanticLabelListEXT yapısı şu şekilde tanımlanır:
typedef struct XrSpatialComponentMouseSemanticLabelListEXT {
XrStructureType type;
void* next;
uint32_t semanticLabelCount;
XrSpatialMouseSemanticLabelEXT* semanticLabels;
} XrSpatialComponentMouseSemanticLabelListEXT;
Ü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.semanticLabelCount,semanticLabelsdizisindeki öğe sayısını açıklayan biruint32_tdeğeridir.semanticLabels, XrSpatialMouseSemanticLabelEXT dizisidir.
XrSpatialSnapshotEXT içindeki uzamsal varlıkların fare semantik etiket bileşenini sorgulamak için XrSpatialComponentDataQueryConditionEXT :: componentTypes içine XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT ekleyin ve XrSpatialComponentDataQueryResultEXT :: next zincirine XrSpatialComponentMouseSemanticLabelListEXT ekleyin.
XrSpatialComponentMouseSemanticLabelListEXT, XrSpatialComponentDataQueryResultEXT :: next zincirindeyse ancak XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT, XrSpatialComponentDataQueryConditionEXT :: componentTypes içinde yer almıyorsa çalışma zamanı, xrQuerySpatialComponentDataEXT'ten XR_ERROR_VALIDATION_FAILURE döndürmelidir.
semanticLabelCount, XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput değerinden küçükse çalışma zamanı, xrQuerySpatialComponentDataEXT'ten XR_ERROR_SIZE_INSUFFICIENT değerini döndürmelidir.
Geçerli Kullanım (Dolaylı)
- XrSpatialComponentMouseSemanticLabelListEXT kullanılmadan önce
XR_EXT_spatial_object_trackinguzantısı etkinleştirilmelidir. -
typeXR_TYPE_SPATIAL_COMPONENT_MOUSE_SEMANTIC_LABEL_LIST_EXTolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır. -
semanticLabels,semanticLabelCountXrSpatialMouseSemanticLabelEXT değerlerinden oluşan bir diziye işaretçi olmalıdır -
semanticLabelCountparametresi0değerinden büyük olmalıdır.
Yapılandırma
XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT, bir özellik için XrSpatialCapabilityComponentTypesEXT :: componentTypes içinde listeleniyorsa uygulama, bu bileşeni destekleyen özelliğin XrSpatialCapabilityConfigurationBaseHeaderEXT türetilmiş yapısının XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents listesine numaralandırıcıyı ekleyerek bu özelliği etkinleştirebilir.
Bu bileşenin XrSpatialCapabilityConfigurationBaseHeaderEXT :: next zincirine dahil edilmesi için özel bir yapılandırma gerekmez.
Örnek kod
Nesne İzleme Özelliğini Yapılandırma
Aşağıdaki örnek kodda, uzamsal bağlam oluştururken nesne izleme özelliğinin nasıl yapılandırılacağı gösterilmektedir.
// 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));
Mekansal Varlıkları Keşfetme ve Bileşen Verilerini Sorgulama
Aşağıdaki örnek kodda, XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT ile yapılandırılmış bir bağlam için uzamsal varlıkların nasıl keşfedileceği ve bileşen verilerinin nasıl sorgulanacağı gösterilmektedir.
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
// ...
}
Yeni Yapılar
- XrSpatialCapabilityConfigurationObjectTrackingEXT
XrSpatialCapabilityConfigurationObjectTrackingEXT'yi genişletme:
XrSpatialComponentDataQueryResultEXT'yi genişletme:
Yeni Enum Veri Türleri
Yeni Enum Sabitleri
XR_EXT_SPATIAL_OBJECT_TRACKING_EXTENSION_NAMEXR_EXT_spatial_object_tracking_SPEC_VERSIONXrSpatialCapabilityEXT'yi genişletme:
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT
XrSpatialCapabilityFeatureEXT'yi genişletme:
XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT
XrSpatialComponentTypeEXT'yi genişletme:
XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXTXR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXTXR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT
XrStructureType'ı genişletme:
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
Sayılar
Sürüm Geçmişi
Revizyon 1, 03.06.2025 (Nihav Jain, Google)
- İlk uzantı açıklaması