XR_ANDROID_spatial_discovery_bounds
Name String
XR_ANDROID_spatial_discovery_bounds
Tipo di estensione
Estensione dell'istanza
Numero di interno registrato
762
Revisione
1
Stato della ratifica
Non ratificato
Dipendenze di estensioni e versioni
XR_EXT_spatial_entity
Collaboratori
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
Panoramica
Questa estensione aggiunge definizioni per i limiti spaziali che consentono alle applicazioni di filtrare le entità spaziali rilevate quando chiamano xrCreateSpatialDiscoverySnapshotAsyncEXT .
Limiti spaziali
La struttura XrSpatialBoundsSpherefANDROID è definita come:
typedef struct XrSpatialBoundsSpherefANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrSpheref sphere;
} XrSpatialBoundsSpherefANDROID;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture.spaceè l'XrSpace in cui sono definite le posizioni per i limiti.timeè unXrTimein cui sono definite le posizioni per i limiti.sphereè un XrSpheref che descrive il volume sferico all'interno del quale il runtime deve limitare il rilevamento delle entità spaziali.
Le funzionalità spaziali che supportano XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID (come elencate da xrEnumerateSpatialCapabilityFeaturesEXT) consentono all'applicazione di limitare il rilevamento alle entità spaziali la cui posizione o i cui limiti si trovano all'interno o si intersecano con sphere concatenando XrSpatialBoundsSpherefANDROID a XrSpatialDiscoverySnapshotCreateInfoEXT :: next . Per uno snapshot di rilevamento in cui la funzionalità applicabile supporta XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID , se questa struttura è presente nella catena next, il runtime non deve includere entità spaziali la cui posizione o i cui limiti sono completamente al di fuori di sphere .
È importante notare che l'inclusione di XrSpatialBoundsSpherefANDROID nella catena successiva di XrSpatialDiscoverySnapshotCreateInfoEXT agisce come una condizione "AND" con gli altri filtri forniti. Le entità provenienti da funzionalità spaziali che non supportano XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID non devono essere incluse nello snapshot di discovery. Questo comportamento è diverso dal resto della specifica OpenXR, in cui le strutture non riconosciute o non supportate nella catena di puntatori successiva vengono ignorate dal runtime. Inoltre, come descritto nella sezione Unicità della struttura della catena successiva, il runtime elaborerà solo la prima occorrenza della struttura XrSpatialBoundsSpherefANDROID nella catena successiva.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_spatial_discovery_boundsdeve essere attivata prima di utilizzare XrSpatialBoundsSpherefANDROID -
typedeve essereXR_TYPE_SPATIAL_BOUNDS_SPHEREF_ANDROID -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture -
spacedeve essere un handle XrSpace valido
La struttura XrSpatialBoundsBoxfANDROID è definita come:
typedef struct XrSpatialBoundsBoxfANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrBoxf box;
} XrSpatialBoundsBoxfANDROID;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture.spaceè l'XrSpace in cui sono definite le posizioni per i limiti.timeè unXrTimein cui sono definite le posizioni per i limiti.boxè un XrBoxf che descrive il volume del box entro il quale il runtime deve limitare il rilevamento delle entità spaziali.
Le funzionalità spaziali che supportano XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID (come enumerate da xrEnumerateSpatialCapabilityFeaturesEXT) consentono all'applicazione di limitare il rilevamento alle entità spaziali la cui posizione o i cui limiti si trovano all'interno o si intersecano con box concatenando XrSpatialBoundsBoxfANDROID a XrSpatialDiscoverySnapshotCreateInfoEXT :: next . Per uno snapshot di rilevamento in cui la funzionalità applicabile supporta XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID , se questa struttura è presente nella catena next, il runtime non deve includere entità spaziali la cui posizione o i cui limiti sono completamente al di fuori di box .
È importante notare che l'inclusione di XrSpatialBoundsBoxfANDROID nella catena successiva di XrSpatialDiscoverySnapshotCreateInfoEXT agisce come una condizione "AND" con gli altri filtri forniti. Le entità provenienti da funzionalità spaziali che non supportano XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID non devono essere incluse nello snapshot di discovery. Questo comportamento è diverso dal resto della specifica OpenXR, in cui le strutture non riconosciute o non supportate nella catena di puntatori successiva vengono ignorate dal runtime. Inoltre, come descritto nella sezione Unicità della struttura della catena successiva, il runtime elaborerà solo la prima occorrenza della struttura XrSpatialBoundsBoxfANDROID nella catena successiva.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_spatial_discovery_boundsdeve essere abilitata prima di utilizzare XrSpatialBoundsBoxfANDROID -
typedeve essereXR_TYPE_SPATIAL_BOUNDS_BOXF_ANDROID -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture -
spacedeve essere un handle XrSpace valido
La struttura XrSpatialBoundsFrustumfANDROID è definita come:
typedef struct XrSpatialBoundsFrustumfANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrFrustumf frustum;
} XrSpatialBoundsFrustumfANDROID;
Descrizioni dei membri
typeè l'XrStructureType di questa struttura.nextèNULLo un puntatore alla struttura successiva in una catena di strutture.spaceè l'XrSpace in cui sono definite le posizioni per i limiti.timeè unXrTimein cui sono definite le posizioni per i limiti.frustumè un XrFrustumf che descrive il volume del frustum entro il quale il runtime deve limitare il rilevamento delle entità spaziali.
Le funzionalità spaziali che supportano XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID (come enumerate da xrEnumerateSpatialCapabilityFeaturesEXT) consentono all'applicazione di limitare il rilevamento alle entità spaziali la cui posizione o i cui limiti si trovano all'interno o si intersecano con frustum concatenando XrSpatialBoundsFrustumfANDROID a XrSpatialDiscoverySnapshotCreateInfoEXT :: next . Per uno snapshot di rilevamento in cui la funzionalità applicabile supporta XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID , se questa struttura è presente nella catena next, il runtime non deve includere entità spaziali la cui posizione o i cui limiti sono completamente al di fuori di frustum .
È importante notare che l'inclusione di XrSpatialBoundsFrustumfANDROID nella catena successiva di XrSpatialDiscoverySnapshotCreateInfoEXT funge da condizione "AND" con gli altri filtri forniti. Le entità provenienti da funzionalità spaziali che non supportano XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID non devono essere incluse nello snapshot di discovery. Questo comportamento è diverso dal resto della specifica OpenXR, in cui le strutture non riconosciute o non supportate nella catena di puntatori successiva vengono ignorate dal runtime. Inoltre, come descritto nella sezione Unicità della struttura della catena successiva, il runtime elaborerà solo la prima occorrenza della struttura XrSpatialBoundsFrustumfANDROID nella catena successiva.
Utilizzo valido (implicito)
- L'estensione
XR_ANDROID_spatial_discovery_boundsdeve essere abilitata prima di utilizzare XrSpatialBoundsFrustumfANDROID -
typedeve essereXR_TYPE_SPATIAL_BOUNDS_FRUSTUMF_ANDROID -
nextdeve essereNULLo un puntatore valido alla struttura successiva in una catena di strutture -
spacedeve essere un handle XrSpace valido
Esempio
Il codice seguente mostra come utilizzare i limiti spaziali per filtrare il rilevamento delle entità spaziali.
// 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));
Nuove strutture
Estensione di XrSpatialDiscoverySnapshotCreateInfoEXT :
Nuove costanti enum
XR_ANDROID_SPATIAL_DISCOVERY_BOUNDS_EXTENSION_NAMEXR_ANDROID_spatial_discovery_bounds_SPEC_VERSIONEstensione di XrSpatialCapabilityFeatureEXT :
XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROIDXR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROIDXR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID
Estensione di XrStructureType :
XR_TYPE_SPATIAL_BOUNDS_BOXF_ANDROIDXR_TYPE_SPATIAL_BOUNDS_FRUSTUMF_ANDROIDXR_TYPE_SPATIAL_BOUNDS_SPHEREF_ANDROID
Problemi
Perché il supporto dei limiti spaziali dipende da una definizione XrSpatialCapabilityFeatureEXT?
- Risolto
- Risposta: non tutte le funzionalità spaziali sono in grado di supportare i limiti spaziali. Un esempio è un'ipotetica entità contenitore globale che non ha una posizione o dei limiti spaziali propri, ma aiuta semplicemente a raccogliere e organizzare le altre entità al suo interno. I valori XrSpatialCapabilityFeatureEXT enumerati dalla funzionalità aiutano l'app a capire se è supportato il filtro dei limiti spaziali.
Cronologia delle versioni
Revisione 1, 03/05/2025 (Nihav Jain, Google)
- Descrizione iniziale dell'estensione