XR_ANDROID_spatial_discovery_bounds
Name String
XR_ANDROID_spatial_discovery_bounds
Uzantı Türü
Örnek uzantısı
Kayıtlı Dahili Numara
762
Düzeltme
1
Onay Durumu
Onaylanmadı
Uzantı ve Sürüm Bağımlılıkları
XR_EXT_spatial_entity
Katkıda bulunanlar
Nihav Jain, Google
Natalie Fleury, Meta
Yuichi Taguchi, Meta
Yin Li, Microsoft
Ron Bessems, Meta
Karthik Kadappan, Magic Leap
Jimmy Alamparambil, ByteDance
Zhipeng Liu, ByteDance
Jun Yan, ByteDance
Genel Bakış
Bu uzantı, uygulamaların xrCreateSpatialDiscoverySnapshotAsyncEXT işlevini çağırırken keşfedilen uzamsal varlıkları filtrelemesine olanak tanıyan uzamsal sınırlar için tanımlar ekler.
Uzamsal Sınırlar
XrSpatialBoundsSpherefANDROID yapısı şu şekilde tanımlanır:
typedef struct XrSpatialBoundsSpherefANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrSpheref sphere;
} XrSpatialBoundsSpherefANDROID;
Ü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.space, sınırlarla ilgili tüm pozların tanımlandığı XrSpace'tir.time, sınırların pozlarının tanımlandığı birXrTimedeğeridir.sphere, çalışma zamanının uzamsal varlıkları keşfetmesini kısıtlaması gereken küresel hacmi açıklayan bir XrSpheref'dir.
XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID destekleyen uzamsal özellikler (xrEnumerateSpatialCapabilityFeaturesEXT tarafından numaralandırıldığı şekilde), uygulamanın XrSpatialBoundsSpherefANDROID öğesini XrSpatialDiscoverySnapshotCreateInfoEXT :: next öğesine zincirleyerek keşfi, konumu veya sınırları sphere içinde olan ya da kesişen uzamsal varlıklarla kısıtlamasına olanak tanır. Geçerli özelliğin XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID değerini desteklediği bir keşif anlık görüntüsü için bu yapı next zincirinde mevcutsa çalışma zamanı, konumu veya sınırları tamamen sphere dışında olan herhangi bir uzamsal varlık içermemelidir.
XrSpatialDiscoverySnapshotCreateInfoEXT'nin sonraki zincirine XrSpatialBoundsSpherefANDROID'nin eklenmesinin, sağlanan diğer filtrelerle birlikte "VE" koşulu olarak işlev gördüğünü unutmayın. XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID özelliğini desteklemeyen konumsal özelliklerden gelen varlıklar keşif anlık görüntüsüne dahil edilmemelidir. Bu davranış, OpenXR spesifikasyonunun geri kalanından farklıdır. OpenXR spesifikasyonunun geri kalanında, sonraki işaretçi zincirindeki tanınmayan veya desteklenmeyen yapılar çalışma zamanı tarafından yoksayılır. Ayrıca, Sonraki Zincir Yapısı Benzersizliği bölümünde açıklandığı gibi, çalışma zamanı yalnızca sonraki zincirde XrSpatialBoundsSpherefANDROID yapısının ilk örneğini işler.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_spatial_discovery_boundsuzantısı, XrSpatialBoundsSpherefANDROID kullanılmadan önce etkinleştirilmelidir. -
typeXR_TYPE_SPATIAL_BOUNDS_SPHEREF_ANDROIDolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır. -
spacegeçerli bir XrSpace hesabı olmalıdır
XrSpatialBoundsBoxfANDROID yapısı şu şekilde tanımlanır:
typedef struct XrSpatialBoundsBoxfANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrBoxf box;
} XrSpatialBoundsBoxfANDROID;
Ü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.space, sınırlarla ilgili tüm pozların tanımlandığı XrSpace'tir.time, sınırların pozlarının tanımlandığı birXrTimedeğeridir.box, çalışma zamanının uzamsal varlıkları keşfetmesini kısıtlaması gereken kutu hacmini açıklayan bir XrBoxf'dir.
XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID özelliğini destekleyen uzamsal özellikler (xrEnumerateSpatialCapabilityFeaturesEXT tarafından numaralandırıldığı şekilde), uygulamanın XrSpatialBoundsBoxfANDROID öğesini XrSpatialDiscoverySnapshotCreateInfoEXT :: next öğesine zincirleyerek keşfi, konumu veya sınırları box içinde olan ya da kesişen uzamsal varlıklarla kısıtlamasına olanak tanır. Geçerli özelliğin XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID değerini desteklediği bir keşif anlık görüntüsü için bu yapı next zincirinde mevcutsa çalışma zamanı, konumu veya sınırları tamamen box dışında olan herhangi bir uzamsal varlık içermemelidir.
XrSpatialDiscoverySnapshotCreateInfoEXT'nin sonraki zincirine XrSpatialBoundsBoxfANDROID'in eklenmesinin, sağlanan diğer filtrelerle birlikte "VE" koşulu olarak işlev gördüğünü unutmayın. XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID özelliğini desteklemeyen konumsal özelliklerden gelen varlıklar keşif anlık görüntüsüne dahil edilmemelidir. Bu davranış, OpenXR spesifikasyonunun geri kalanından farklıdır. OpenXR spesifikasyonunun geri kalanında, sonraki işaretçi zincirindeki tanınmayan veya desteklenmeyen yapılar çalışma zamanı tarafından yoksayılır. Ayrıca, Sonraki Zincir Yapısı Benzersizliği bölümünde açıklandığı gibi, çalışma zamanı yalnızca sonraki zincirde XrSpatialBoundsBoxfANDROID yapısının ilk örneğini işler.
Geçerli Kullanım (Dolaylı)
- XrSpatialBoundsBoxfANDROID kullanılmadan önce
XR_ANDROID_spatial_discovery_boundsuzantısı etkinleştirilmelidir. -
typeXR_TYPE_SPATIAL_BOUNDS_BOXF_ANDROIDolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır. -
spacegeçerli bir XrSpace hesabı olmalıdır
XrSpatialBoundsFrustumfANDROID yapısı şu şekilde tanımlanır:
typedef struct XrSpatialBoundsFrustumfANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrFrustumf frustum;
} XrSpatialBoundsFrustumfANDROID;
Ü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.space, sınırlarla ilgili tüm pozların tanımlandığı XrSpace'tir.time, sınırların pozlarının tanımlandığı birXrTimedeğeridir.frustum, çalışma zamanının uzamsal varlıkları keşfetme işlemini kısıtlaması gereken kesik piramit hacmini açıklayan bir XrFrustumf'dir.
XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID özelliğini destekleyen uzamsal özellikler (xrEnumerateSpatialCapabilityFeaturesEXT tarafından numaralandırıldığı şekilde), uygulamanın XrSpatialBoundsFrustumfANDROID özelliğini XrSpatialDiscoverySnapshotCreateInfoEXT :: next özelliğine zincirleyerek keşfi, konumu veya sınırları frustum içinde olan ya da kesişen uzamsal varlıklarla kısıtlamasına olanak tanır. Geçerli özelliğin XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID değerini desteklediği bir keşif anlık görüntüsü için bu yapı next zincirinde mevcutsa çalışma zamanı, konumu veya sınırları tamamen frustum dışında olan herhangi bir uzamsal varlık içermemelidir.
XrSpatialDiscoverySnapshotCreateInfoEXT'nin sonraki zincirine XrSpatialBoundsFrustumfANDROID'in dahil edilmesinin, sağlanan diğer filtrelerle birlikte bir "VE" koşulu olarak işlev gördüğünü unutmayın. XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID özelliğini desteklemeyen konumsal özelliklerden gelen varlıklar keşif anlık görüntüsüne dahil edilmemelidir. Bu davranış, OpenXR spesifikasyonunun geri kalanından farklıdır. OpenXR spesifikasyonunun geri kalanında, sonraki işaretçi zincirindeki tanınmayan veya desteklenmeyen yapılar çalışma zamanı tarafından yoksayılır. Ayrıca, Sonraki Zincir Yapısı Benzersizliği bölümünde açıklandığı gibi, çalışma zamanı yalnızca sonraki zincirde XrSpatialBoundsFrustumfANDROID yapısının ilk örneğini işler.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_spatial_discovery_boundsuzantısı, XrSpatialBoundsFrustumfANDROID kullanılmadan önce etkinleştirilmelidir -
typeXR_TYPE_SPATIAL_BOUNDS_FRUSTUMF_ANDROIDolmalıdır -
next,NULLveya yapı zincirindeki bir sonraki yapıya geçerli bir işaretçi olmalıdır. -
spacegeçerli bir XrSpace hesabı olmalıdır
Örnek
Aşağıdaki kodda, uzamsal varlıkların keşfini filtrelemek için uzamsal sınırların nasıl kullanılacağı gösterilmektedir.
// previously initialized & configured with the XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT capability.
XrSpatialContextEXT spatialContext;
// Enumerate supported features for XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT capability
uint32_t featureCount = 0;
CHK_XR(xrEnumerateSpatialCapabilityFeaturesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT, 0, &featureCount, nullptr));
std::vector<XrSpatialCapabilityFeatureEXT> fooFeatures(featureCount);
CHK_XR(xrEnumerateSpatialCapabilityFeaturesEXT(instance, systemId, XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT, featureCount, &featureCount, fooFeatures.data()));
// Check if spatial sphere bounds filter is supported
const auto supportsFeature = [&fooFeatures](XrSpatialCapabilityFeatureEXT feature) {
return std::find(fooFeatures.begin(), fooFeatures.end(), feature) != fooFeatures.end();
};
const bool supportsSphereBoundsFilter = supportsFeature(XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID);
// We want to look for entities in a sphere around the head with a radius of 2m.
XrSpatialBoundsSpherefANDROID sphereBounds {
.type = XR_TYPE_SPATIAL_BOUNDS_SPHEREF_ANDROID,
.space = viewSpace,
.time = predictedDisplayTime,
.sphere = {
.center = {
.orientation = {
.w = 1.0f,
},
},
.radius = 2.0f,
},
};
// We want to look for entities that have the following components.
std::array<XrSpatialComponentTypeEXT, 1> snapshotComponents{XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT};
XrSpatialDiscoverySnapshotCreateInfoEXT snapshotCreateInfo{
.type = XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT,
.next = supportsSphereBoundsFilter ? &sphereBounds : nullptr,
.componentTypeCount = snapshotComponents.size(),
.componentTypes = snapshotComponents.data(),
};
XrFutureEXT future = XR_NULL_FUTURE_EXT;
CHK_XR(xrCreateSpatialDiscoverySnapshotAsyncEXT(spatialContext, &snapshotCreateInfo, &future));
Yeni Yapılar
XrSpatialDiscoverySnapshotCreateInfoEXT'yi genişletme:
Yeni Enum Sabitleri
XR_ANDROID_SPATIAL_DISCOVERY_BOUNDS_EXTENSION_NAMEXR_ANDROID_spatial_discovery_bounds_SPEC_VERSIONXrSpatialCapabilityFeatureEXT'yi genişletme:
XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROIDXR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROIDXR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID
XrStructureType'ı genişletme:
XR_TYPE_SPATIAL_BOUNDS_BOXF_ANDROIDXR_TYPE_SPATIAL_BOUNDS_FRUSTUMF_ANDROIDXR_TYPE_SPATIAL_BOUNDS_SPHEREF_ANDROID
Sayılar
Mekansal sınır desteği neden XrSpatialCapabilityFeatureEXT tanımına bağlı?
- Çözüldü
- Yanıt: Her uzamsal özellik, uzamsal sınırları destekleyemez. Buna örnek olarak, kendi mekansal konumu veya sınırları olmayan, yalnızca içindeki diğer varlıkları toplamaya ve düzenlemeye yardımcı olan varsayımsal bir global kapsayıcı varlık verilebilir. Özellik tarafından numaralandırılan XrSpatialCapabilityFeatureEXT değerleri, uygulamanın uzamsal sınır filtreleme desteği hakkında bilgi edinmesine yardımcı olur.
Sürüm Geçmişi
Düzeltme 1, 03.05.2025 (Nihav Jain, Google)
- İlk uzantı açıklaması