XR_ANDROID_spatial_discovery_bounds
String Nama
XR_ANDROID_spatial_discovery_bounds
Jenis Ekstensi
Ekstensi instance
Nomor Ekstensi Terdaftar
762
Revisi
1
Status Ratifikasi
Belum diratifikasi
Dependensi Ekstensi dan Versi
XR_EXT_spatial_entity
Kontributor
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
Ringkasan
Ekstensi ini menambahkan definisi untuk batas spasial yang memungkinkan aplikasi memfilter entity spasial yang ditemukan saat memanggil xrCreateSpatialDiscoverySnapshotAsyncEXT .
Batas Spasial
Struktur XrSpatialBoundsSpherefANDROID didefinisikan sebagai:
typedef struct XrSpatialBoundsSpherefANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrSpheref sphere;
} XrSpatialBoundsSpherefANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur.spaceadalah XrSpace yang menentukan pose untuk batas.timeadalahXrTimetempat pose untuk batas ditentukan.sphereadalah XrSpheref yang menjelaskan volume bola tempat runtime harus membatasi penemuan entity spasialnya.
Kemampuan spasial yang mendukung XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID (seperti yang disebutkan oleh xrEnumerateSpatialCapabilityFeaturesEXT ) memungkinkan aplikasi membatasi penemuan ke entity spasial yang lokasi atau batasnya berada di dalam atau berpotongan dengan sphere dengan merantai XrSpatialBoundsSpherefANDROID ke XrSpatialDiscoverySnapshotCreateInfoEXT :: next . Untuk snapshot penemuan yang kemampuan yang berlaku mendukung XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID , jika struktur ini ada dalam rantai next, runtime tidak boleh menyertakan entity spasial yang lokasi atau batasnya sepenuhnya berada di luar sphere .
Perlu diperhatikan bahwa penyertaan XrSpatialBoundsSpherefANDROID dalam rantai berikutnya dari XrSpatialDiscoverySnapshotCreateInfoEXT bertindak sebagai kondisi 'AND' dengan filter lain yang disediakan. Entity yang berasal dari kemampuan spasial yang tidak mendukung XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID tidak boleh disertakan dalam snapshot penemuan. Perilaku ini berbeda dengan spesifikasi OpenXR lainnya, yang mengabaikan struktur yang tidak dikenali atau tidak didukung dalam rantai pointer berikutnya oleh runtime. Selain itu, seperti yang dijelaskan di bagian Keunikan Struktur Rantai Berikutnya, runtime hanya akan memproses kemunculan pertama struktur XrSpatialBoundsSpherefANDROID di rantai berikutnya.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_spatial_discovery_boundsharus diaktifkan sebelum menggunakan XrSpatialBoundsSpherefANDROID -
typeharus berupaXR_TYPE_SPATIAL_BOUNDS_SPHEREF_ANDROID -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur -
spaceharus berupa nama sebutan channel XrSpace yang valid
Struktur XrSpatialBoundsBoxfANDROID didefinisikan sebagai:
typedef struct XrSpatialBoundsBoxfANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrBoxf box;
} XrSpatialBoundsBoxfANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur.spaceadalah XrSpace yang menentukan pose untuk batas.timeadalahXrTimetempat pose untuk batas ditentukan.boxadalah XrBoxf yang menjelaskan volume kotak tempat runtime harus membatasi penemuan entity spasialnya.
Kemampuan spasial yang mendukung XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID (seperti yang disebutkan oleh xrEnumerateSpatialCapabilityFeaturesEXT ) memungkinkan aplikasi membatasi penemuan ke entity spasial yang lokasi atau batasnya berada di dalam atau berpotongan dengan box dengan merantai XrSpatialBoundsBoxfANDROID ke XrSpatialDiscoverySnapshotCreateInfoEXT :: next . Untuk snapshot penemuan yang kemampuan yang berlaku mendukung XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID , jika struktur ini ada dalam rantai next, runtime tidak boleh menyertakan entity spasial yang lokasi atau batasnya sepenuhnya berada di luar box .
Perlu diperhatikan bahwa penyertaan XrSpatialBoundsBoxfANDROID dalam rantai berikutnya dari XrSpatialDiscoverySnapshotCreateInfoEXT bertindak sebagai kondisi 'AND' dengan filter lain yang disediakan. Entity yang berasal dari kemampuan spasial yang tidak mendukung XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID tidak boleh disertakan dalam snapshot penemuan. Perilaku ini berbeda dengan spesifikasi OpenXR lainnya, yang mengabaikan struktur yang tidak dikenali atau tidak didukung dalam rantai pointer berikutnya oleh runtime. Selain itu, seperti yang dijelaskan di bagian Keunikan Struktur Next Chain, runtime hanya akan memproses kemunculan pertama struktur XrSpatialBoundsBoxfANDROID di next chain.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_spatial_discovery_boundsharus diaktifkan sebelum menggunakan XrSpatialBoundsBoxfANDROID -
typeharus berupaXR_TYPE_SPATIAL_BOUNDS_BOXF_ANDROID -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur -
spaceharus berupa nama sebutan channel XrSpace yang valid
Struktur XrSpatialBoundsFrustumfANDROID didefinisikan sebagai:
typedef struct XrSpatialBoundsFrustumfANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrFrustumf frustum;
} XrSpatialBoundsFrustumfANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur.spaceadalah XrSpace yang menentukan pose untuk batas.timeadalahXrTimetempat pose untuk batas ditentukan.frustumadalah XrFrustumf yang menjelaskan volume frustum tempat runtime harus membatasi penemuan entity spasialnya.
Kemampuan spasial yang mendukung XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID (seperti yang disebutkan oleh xrEnumerateSpatialCapabilityFeaturesEXT ) memungkinkan aplikasi membatasi penemuan ke entity spasial yang lokasi atau batasnya berada di dalam atau berpotongan dengan frustum dengan merantai XrSpatialBoundsFrustumfANDROID ke XrSpatialDiscoverySnapshotCreateInfoEXT :: next . Untuk snapshot penemuan yang kemampuan yang berlaku mendukung XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID , jika struktur ini ada dalam rantai next, runtime tidak boleh menyertakan entity spasial yang lokasi atau batasnya sepenuhnya berada di luar frustum .
Perlu diperhatikan bahwa penyertaan XrSpatialBoundsFrustumfANDROID dalam rantai berikutnya dari XrSpatialDiscoverySnapshotCreateInfoEXT bertindak sebagai kondisi 'AND' dengan filter lain yang disediakan. Entity yang berasal dari kemampuan spasial yang tidak mendukung XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID tidak boleh disertakan dalam snapshot penemuan. Perilaku ini berbeda dengan spesifikasi OpenXR lainnya, yang mengabaikan struktur yang tidak dikenali atau tidak didukung dalam rantai pointer berikutnya oleh runtime. Selain itu, seperti yang dijelaskan di bagian Keunikan Struktur Next Chain, runtime hanya akan memproses kemunculan pertama struktur XrSpatialBoundsFrustumfANDROID di next chain.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_spatial_discovery_boundsharus diaktifkan sebelum menggunakan XrSpatialBoundsFrustumfANDROID -
typeharus berupaXR_TYPE_SPATIAL_BOUNDS_FRUSTUMF_ANDROID -
nextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur -
spaceharus berupa nama sebutan channel XrSpace yang valid
Contoh
Kode berikut menunjukkan cara menggunakan batas spasial untuk memfilter penemuan entity spasial.
// 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));
Struktur Baru
Memperluas XrSpatialDiscoverySnapshotCreateInfoEXT :
Konstanta Enum Baru
XR_ANDROID_SPATIAL_DISCOVERY_BOUNDS_EXTENSION_NAMEXR_ANDROID_spatial_discovery_bounds_SPEC_VERSIONMemperluas XrSpatialCapabilityFeatureEXT :
XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROIDXR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROIDXR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID
Memperluas XrStructureType :
XR_TYPE_SPATIAL_BOUNDS_BOXF_ANDROIDXR_TYPE_SPATIAL_BOUNDS_FRUSTUMF_ANDROIDXR_TYPE_SPATIAL_BOUNDS_SPHEREF_ANDROID
Masalah
Mengapa dukungan untuk batas spasial bergantung pada definisi XrSpatialCapabilityFeatureEXT?
- Selesai
- Jawaban: Tidak semua kemampuan spasial dapat mendukung batas spasial. Contohnya adalah entitas penampung global hipotetis yang tidak memiliki posisi atau batas spasialnya sendiri, tetapi hanya membantu mengumpulkan dan mengatur entitas lain di dalamnya. Nilai XrSpatialCapabilityFeatureEXT yang dihitung oleh kemampuan membantu menginformasikan aplikasi tentang dukungan untuk pemfilteran batas spasial.
Riwayat Versi
Revisi 1, 03-05-2025 (Nihav Jain, Google)
- Deskripsi ekstensi awal