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, NULL veya 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ığı bir XrTime değ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ı)

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, NULL veya 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ığı bir XrTime değ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ı)

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, NULL veya 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ığı bir XrTime değ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ı)

Ö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

Yeni Enum Sabitleri

  • XR_ANDROID_SPATIAL_DISCOVERY_BOUNDS_EXTENSION_NAME
  • XR_ANDROID_spatial_discovery_bounds_SPEC_VERSION
  • XrSpatialCapabilityFeatureEXT'yi genişletme:

    • XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID
    • XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID
    • XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID
  • XrStructureType'ı genişletme:

    • XR_TYPE_SPATIAL_BOUNDS_BOXF_ANDROID
    • XR_TYPE_SPATIAL_BOUNDS_FRUSTUMF_ANDROID
    • XR_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ı