XR_ANDROID_spatial_discovery_bounds
Name String
XR_ANDROID_spatial_discovery_bounds
Typ rozszerzenia
Rozszerzenie instancji
Zarejestrowany numer wewnętrzny
762
Wersja
1
Stan ratyfikacji
Nie ratyfikowano
Zależności rozszerzeń i wersji
XR_EXT_spatial_entity
Twórcy
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
Przegląd
To rozszerzenie dodaje definicje granic przestrzennych, które umożliwiają aplikacjom filtrowanie wykrytych elementów przestrzennych podczas wywoływania funkcji xrCreateSpatialDiscoverySnapshotAsyncEXT .
Granice przestrzenne
Struktura XrSpatialBoundsSpherefANDROID jest zdefiniowana w ten sposób:
typedef struct XrSpatialBoundsSpherefANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrSpheref sphere;
} XrSpatialBoundsSpherefANDROID;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur.spaceto XrSpace, w której zdefiniowane są wszystkie pozycje granic.timetoXrTime, w którym zdefiniowane są pozy dla granic.sphereto XrSpheref, który opisuje sferyczny obszar, w którym środowisko wykonawcze musi ograniczyć wykrywanie elementów przestrzennych.
Funkcje przestrzenne obsługujące XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID (wymienione przez xrEnumerateSpatialCapabilityFeaturesEXT) umożliwiają aplikacji ograniczenie wykrywania do elementów przestrzennych, których lokalizacja lub granice znajdują się w obrębie lub przecinają się z sphere, przez połączenie XrSpatialBoundsSpherefANDROID z XrSpatialDiscoverySnapshotCreateInfoEXT :: next . W przypadku migawki wykrywania, w której odpowiednia funkcja obsługuje XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID, jeśli ta struktura jest obecna w łańcuchu next, środowisko wykonawcze nie może zawierać żadnych elementów przestrzennych, których lokalizacja lub granice znajdują się całkowicie poza sphere .
Ważne jest, aby pamiętać, że uwzględnienie XrSpatialBoundsSpherefANDROID w następnym łańcuchu XrSpatialDiscoverySnapshotCreateInfoEXT działa jako warunek „ORAZ” z innymi podanymi filtrami. Encje pochodzące z funkcji przestrzennych, które nie obsługują XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID, nie mogą być uwzględniane w migawce wykrywania. To zachowanie różni się od pozostałych elementów specyfikacji OpenXR, w których nierozpoznane lub nieobsługiwane struktury w następnym łańcuchu wskaźników są ignorowane przez środowisko wykonawcze. Jak opisano w sekcji Unikalność struktury następnego łańcucha, środowisko wykonawcze przetworzy tylko pierwsze wystąpienie struktury XrSpatialBoundsSpherefANDROID w następnym łańcuchu.
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_ANDROID_spatial_discovery_boundsmusi być włączone przed użyciem XrSpatialBoundsSpherefANDROID. -
typemusi mieć wartośćXR_TYPE_SPATIAL_BOUNDS_SPHEREF_ANDROID -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur -
spacemusi być prawidłowym nickiem XrSpace
Struktura XrSpatialBoundsBoxfANDROID jest zdefiniowana w ten sposób:
typedef struct XrSpatialBoundsBoxfANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrBoxf box;
} XrSpatialBoundsBoxfANDROID;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur.spaceto XrSpace, w której zdefiniowane są wszystkie pozycje granic.timetoXrTime, w którym zdefiniowane są pozy dla granic.boxto XrBoxf, który opisuje objętość pola, w którym środowisko wykonawcze musi ograniczyć wykrywanie elementów przestrzennych.
Funkcje przestrzenne obsługujące XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID (wymienione przez xrEnumerateSpatialCapabilityFeaturesEXT) umożliwiają aplikacji ograniczenie wykrywania do elementów przestrzennych, których lokalizacja lub granice znajdują się w obrębie lub przecinają się z box, przez połączenie XrSpatialBoundsBoxfANDROID z XrSpatialDiscoverySnapshotCreateInfoEXT :: next . W przypadku migawki wykrywania, w której odpowiednia funkcja obsługuje XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID, jeśli ta struktura jest obecna w łańcuchu next, środowisko wykonawcze nie może zawierać żadnych elementów przestrzennych, których lokalizacja lub granice znajdują się całkowicie poza box .
Warto zauważyć, że uwzględnienie XrSpatialBoundsBoxfANDROID w następnym łańcuchu XrSpatialDiscoverySnapshotCreateInfoEXT działa jako warunek „ORAZ” z innymi podanymi filtrami. Encje pochodzące z funkcji przestrzennych, które nie obsługują XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID, nie mogą być uwzględniane w migawce wykrywania. To zachowanie różni się od pozostałych elementów specyfikacji OpenXR, w których nierozpoznane lub nieobsługiwane struktury w następnym łańcuchu wskaźników są ignorowane przez środowisko wykonawcze. Jak opisano w sekcji Unikalność struktury następnego łańcucha, środowisko wykonawcze przetworzy tylko pierwsze wystąpienie struktury XrSpatialBoundsBoxfANDROID w następnym łańcuchu.
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_ANDROID_spatial_discovery_boundsmusi być włączone przed użyciem XrSpatialBoundsBoxfANDROID. -
typemusi mieć wartośćXR_TYPE_SPATIAL_BOUNDS_BOXF_ANDROID -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur -
spacemusi być prawidłowym nickiem XrSpace
Struktura XrSpatialBoundsFrustumfANDROID jest zdefiniowana w ten sposób:
typedef struct XrSpatialBoundsFrustumfANDROID {
XrStructureType type;
const void* next;
XrSpace space;
XrTime time;
XrFrustumf frustum;
} XrSpatialBoundsFrustumfANDROID;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur.spaceto XrSpace, w której zdefiniowane są wszystkie pozycje granic.timetoXrTime, w którym zdefiniowane są pozy dla granic.frustumto XrFrustumf, który opisuje objętość ostrosłupa ściętego, w której środowisko wykonawcze musi ograniczyć wykrywanie elementów przestrzennych.
Funkcje przestrzenne obsługujące XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID (wymienione przez xrEnumerateSpatialCapabilityFeaturesEXT) umożliwiają aplikacji ograniczenie wykrywania do elementów przestrzennych, których lokalizacja lub granice znajdują się w obrębie lub przecinają się z frustum, przez połączenie XrSpatialBoundsFrustumfANDROID z XrSpatialDiscoverySnapshotCreateInfoEXT :: next . W przypadku migawki wykrywania, w której odpowiednia funkcja obsługuje XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID, jeśli ta struktura jest obecna w łańcuchu next, środowisko wykonawcze nie może zawierać żadnych elementów przestrzennych, których lokalizacja lub granice znajdują się całkowicie poza frustum .
Warto zauważyć, że uwzględnienie XrSpatialBoundsFrustumfANDROID w następnym łańcuchu XrSpatialDiscoverySnapshotCreateInfoEXT działa jako warunek „ORAZ” z innymi podanymi filtrami. Encje pochodzące z funkcji przestrzennych, które nie obsługują XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID, nie mogą być uwzględniane w migawce wykrywania. To zachowanie różni się od pozostałych elementów specyfikacji OpenXR, w których nierozpoznane lub nieobsługiwane struktury w następnym łańcuchu wskaźników są ignorowane przez środowisko wykonawcze. Jak opisano w sekcji Unikalność struktury Next Chain, środowisko wykonawcze przetworzy tylko pierwsze wystąpienie struktury XrSpatialBoundsFrustumfANDROID w łańcuchu Next Chain.
Prawidłowe użycie (pośrednie)
- Rozszerzenie
XR_ANDROID_spatial_discovery_boundsmusi być włączone przed użyciem XrSpatialBoundsFrustumfANDROID. -
typemusi mieć wartośćXR_TYPE_SPATIAL_BOUNDS_FRUSTUMF_ANDROID -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur -
spacemusi być prawidłowym nickiem XrSpace
Przykład
Poniższy kod pokazuje, jak używać granic przestrzennych do filtrowania wykrywania elementów przestrzennych.
// 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));
Nowe domy
Rozszerzenie XrSpatialDiscoverySnapshotCreateInfoEXT :
Nowe stałe typu wyliczeniowego
XR_ANDROID_SPATIAL_DISCOVERY_BOUNDS_EXTENSION_NAMEXR_ANDROID_spatial_discovery_bounds_SPEC_VERSIONRozszerzenie XrSpatialCapabilityFeatureEXT :
XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROIDXR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROIDXR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID
Rozszerzanie XrStructureType :
XR_TYPE_SPATIAL_BOUNDS_BOXF_ANDROIDXR_TYPE_SPATIAL_BOUNDS_FRUSTUMF_ANDROIDXR_TYPE_SPATIAL_BOUNDS_SPHEREF_ANDROID
Problemy
Dlaczego obsługa granic przestrzennych zależy od definicji XrSpatialCapabilityFeatureEXT?
- Rozwiązane
- Odpowiedź: nie wszystkie funkcje przestrzenne obsługują granice przestrzenne. Przykładem może być hipotetyczny globalny kontener, który nie ma własnej pozycji przestrzennej ani granic, ale służy jedynie do zbierania i porządkowania innych elementów, które się w nim znajdują. Wartości XrSpatialCapabilityFeatureEXT wyliczane przez funkcję pomagają aplikacji uzyskać informacje o obsłudze filtrowania granic przestrzennych.
Historia zmian
Wersja 1, 3 maja 2025 r. (Nihav Jain, Google)
- Początkowy opis rozszerzenia