XR_EXT_spatial_entity
Ciąg znaków nazwy
XR_EXT_spatial_entity
Typ rozszerzenia
Rozszerzenie instancji
Zarejestrowany numer wewnętrzny
741
Wersja
1
Stan ratyfikacji
Ratyfikacja
Zależności rozszerzeń i wersji
XR_EXT_future
Twórcy
Nihav Jain, Google
Jared Finder, Google
Natalie Fleury, Meta
Yuichi Taguchi, Meta
Ron Bessems, Meta
Yin Li, Microsoft
Karthik Kadappan, Magic Leap
Jimmy Alamparambil, ByteDance
Zhipeng Liu, ByteDance
Jun Yan, ByteDance
Przegląd
To rozszerzenie wprowadza koncepcje i podstawy dotyczące rozumienia sceny i rozumowania przestrzennego w OpenXR. Ujednolica to kilka powiązanych, ale odrębnych obszarów funkcjonalności, które są wyliczane, konfigurowane i z którymi można wchodzić w interakcje w sposób w dużej mierze jednolity, zgodnie z definicją tego rozszerzenia. Ponieważ to rozszerzenie nie zawiera konkretnych definicji żadnego z tych obszarów funkcjonalnych, tekst formalnej specyfikacji jest zwykle dość abstrakcyjny. Przykłady zawarte w tekście specyfikacji tego rozszerzenia czasami odnoszą się do funkcji zdefiniowanych w nadchodzącym lub hipotetycznym powiązanym rozszerzeniu w celu ilustracyjnym, bez ograniczania lub określania takich dodatkowych funkcji.
Główne elementy tego rozszerzenia to:
- Obiekty przestrzenne : funkcjonalność opiera się na obiektach , które same w sobie mają bardzo małą funkcjonalność.
- Komponenty przestrzenne : te jednostki mają powiązane z nimi komponenty, które dostarczają dane i zachowania.
- Typy komponentów przestrzennych : każdy komponent przestrzenny ma określony typ komponentu , a każdy element ma co najwyżej 1 komponent danego typu komponentu .
- Kontekst przestrzenny : wszystkie interakcje z obiektami przestrzennymi odbywają się w kontekście po fazie inicjowania i konfiguracji.
- Funkcje przestrzenne : manipulowanie obiektami przestrzennymi jest w dużej mierze zapewniane przez funkcje . Funkcja to jednostka funkcjonalności, np. (bez ograniczeń) zdefiniowane przez aplikację punkty zakotwiczenia, wykrywanie płaszczyzn lub śledzenie obrazów. Każda funkcja jest zwykle zdefiniowana w osobnym rozszerzeniu (włączanym jak zwykle podczas tworzenia instancji) i jest włączana dla określonego kontekstu w momencie tworzenia.
- Każda funkcja jest powiązana z zestawem typów komponentów, dla których komponenty występują w każdym elemencie udostępnianym przez tę funkcję . Rozszerzenie definiujące możliwość określa, które typy komponentów są obowiązkowe w przypadku tej możliwości („gwarantowane”), a to samo rozszerzenie lub inne rozszerzenia mogą określać opcjonalne typy komponentów udostępniane przez niektóre potencjalne implementacje. Dowolna liczba możliwości może dostarczać encjom komponenty danego typu komponentu, które są jednolicie użyteczne niezależnie od możliwości, która je wygenerowała.
- Funkcje związane z przestrzennością : niektóre funkcje wymagają konfiguracji, dlatego są parametryzowane przez funkcje związane z przestrzennością .
To rozszerzenie udostępnia mechanizm wyliczania komponentów udostępnianych przez każdą funkcję obsługiwaną w bieżącym systemie, zarówno obowiązkowych, jak i opcjonalnych komponentów .
Ponieważ niektóre implementacje mogą wymagać różnego stopnia parametryzacji możliwości , to rozszerzenie zapewnia mechanizm wyliczania obsługiwanych funkcji związanych z daną możliwością w bieżącym systemie.
To rozszerzenie definiuje też kilka typowych komponentów, które mają być używane w szerokim zakresie funkcji .
Obiekt przestrzenny
Obiekty przestrzenne to obiekty, które istnieją w jakiejś przestrzeni i mają różne powiązane dane uporządkowane w komponenty. Mogą to być:
- fizyczne (np. płaskie powierzchnie, takie jak ściany i podłogi, obiekty, takie jak krzesła i regały na książki itp.);
- wirtualne (np. treści umieszczone i udostępnione przez inną aplikację lub użytkownika);
- Zdefiniowane przez aplikację (np.aplikacja oznaczająca obszar jako „salon” lub „kuchnia” albo oznaczająca punkt jako miejsce, w którym ma się znajdować telewizor itp.).
Elementy udostępniane przez system działań, takie jak kontrolery czy śledzenie wzroku, nie są przeznaczone do modelowania jako obiekty przestrzenne.
Obiekty przestrzenne w OpenXR są modelowane jako system komponentów encji . Każdy obiekt przestrzenny ma zestaw komponentów, a każdy komponent zapewnia unikalny zestaw danych i zachowań dla tego obiektu.
Obiekty przestrzenne są reprezentowane przez XrSpatialEntityIdEXT atom lub uchwyt XrSpatialEntityEXT, którego szczegóły znajdziesz w sekcji Reprezentacje obiektów przestrzennych.
Typy komponentów przestrzennych
Obiekt przestrzenny ma co najmniej 1 komponent, który dostarcza dane lub zachowania tego obiektu. Więcej informacji o niektórych typowych komponentach zdefiniowanych przez to rozszerzenie znajdziesz w artykule Typowe komponenty.
typedef enum XrSpatialComponentTypeEXT {
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT = 1,
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT = 2,
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT = 3,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT = 4,
XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT = 1000741000,
XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT = 1000741001,
XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT = 1000741002,
XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT = 1000741003,
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT = 1000743000,
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT = 1000744000,
XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT = 1000744001,
XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT = 1000744002,
XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT = 1000762000,
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT = 1000763000,
XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT = 1000782000,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT = 1000783000,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT = 1000783001,
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT = 1000783002,
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID = 1000785000,
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID = 1000786000,
XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID = 1000791000,
XR_SPATIAL_COMPONENT_TYPE_ROOM_ANDROIDSYS = 1000792002,
XR_SPATIAL_COMPONENT_TYPE_MATERIAL_TYPE_ANDROIDSYS = 1000792003,
XR_SPATIAL_COMPONENT_TYPE_CONFIDENCE_ANDROIDSYS = 1000792004,
XR_SPATIAL_COMPONENT_TYPE_ROOM_EMPTINESS_ANDROIDSYS = 1000792005,
XR_SPATIAL_COMPONENT_TYPE_OCCUPANCY_GRID_ANDROIDX1 = 1000793000,
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID = 1000794000,
XR_SPATIAL_COMPONENT_TYPE_STREETSCAPE_GEOMETRY_METADATA_ANDROIDX2 = 1000798000,
XR_SPATIAL_COMPONENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialComponentTypeEXT;
Wyliczenie XrSpatialComponentTypeEXT określa różne typy komponentów, które środowisko wykonawcze może obsługiwać.
Nie wszystkie wymienione typy komponentów są udostępniane przez to rozszerzenie samodzielnie: niektóre wymagają włączenia dodatkowych rozszerzeń podczas tworzenia instancji, zgodnie z dokumentacją.
Wartości wyliczeniowe to:
Opis typu wyliczeniowego
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT
Komponent, który udostępnia granice 2D dla obiektu przestrzennego. Odpowiednia struktura listy to XrSpatialComponentBounded2DListEXT, a odpowiednia struktura danych to XrSpatialBounded2DDataEXT.
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT
Komponent, który udostępnia granice 3D dla obiektu przestrzennego. Odpowiednia struktura listy to XrSpatialComponentBounded3DListEXT, a odpowiednia struktura danych to XrBoxf.
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT
Komponent, który udostępnia XrSpatialEntityIdEXT elementu nadrzędnego dla obiektu przestrzennego. Odpowiednia struktura listy to XrSpatialComponentParentListEXT, a odpowiednia struktura danych to XrSpatialEntityIdEXT.
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT
Komponent, który udostępnia siatkę 3D dla obiektu przestrzennego. Odpowiednia struktura listy to XrSpatialComponentMesh3DListEXT, a odpowiednia struktura danych to XrSpatialMeshDataEXT.
XR_SPATIAL_COMPONENT_TYPE_PLANE_ALIGNMENT_EXT
Komponent, który udostępnia wyliczenie wyrównania płaszczyzny dla obiektu przestrzennego. Odpowiednia struktura listy to XrSpatialComponentPlaneAlignmentListEXT, a odpowiednia struktura danych to XrSpatialPlaneAlignmentEXT (dodana przez rozszerzenie XR_EXT_spatial_plane_tracking).
XR_SPATIAL_COMPONENT_TYPE_MESH_2D_EXT
Komponent, który udostępnia siatkę 2D dla obiektu przestrzennego. Odpowiednia struktura listy to XrSpatialComponentMesh2DListEXT, a odpowiednia struktura danych to XrSpatialMeshDataEXT (dodana przez rozszerzenie XR_EXT_spatial_plane_tracking).
XR_SPATIAL_COMPONENT_TYPE_POLYGON_2D_EXT
Komponent, który udostępnia wielokąt graniczny 2D dla encji przestrzennej. Odpowiednia struktura listy to XrSpatialComponentPolygon2DListEXT; odpowiednia struktura danych to XrSpatialPolygon2DDataEXT (dodana przez rozszerzenie XR_EXT_spatial_plane_tracking).
XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT
Komponent, który zapewnia etykietę semantyczną dla płaszczyzny. Odpowiednia struktura listy to XrSpatialComponentPlaneSemanticLabelListEXT; odpowiednia struktura danych to XrSpatialPlaneSemanticLabelEXT (dodana przez rozszerzenie XR_EXT_spatial_plane_tracking).
XR_SPATIAL_COMPONENT_TYPE_MARKER_EXT
Komponent opisujący typ, identyfikator i lokalizację znacznika. Odpowiednia struktura listy to XrSpatialComponentMarkerListEXT; odpowiednia struktura danych to XrSpatialMarkerDataEXT (dodana przez rozszerzenie XR_EXT_spatial_marker_tracking).
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_EXT
Komponent, który udostępnia etykietę semantyczną sceny. Odpowiednia struktura listy to XrSpatialComponentObjectSemanticLabelListEXT. Odpowiednia struktura danych to XrSpatialObjectSemanticLabelEXT . (Dodane przez rozszerzenie XR_EXT_spatial_object_tracking)
XR_SPATIAL_COMPONENT_TYPE_KEYBOARD_SEMANTIC_LABEL_EXT
Komponent, który zapewnia etykietę semantyczną dla klawiatury. Odpowiednia struktura listy to XrSpatialComponentKeyboardSemanticLabelListEXT. Odpowiednia struktura danych to XrSpatialKeyboardSemanticLabelEXT (dodana przez rozszerzenie XR_EXT_spatial_object_tracking).
XR_SPATIAL_COMPONENT_TYPE_MOUSE_SEMANTIC_LABEL_EXT
Komponent, który zapewnia etykietę semantyczną dla myszy. Odpowiednia struktura listy to XrSpatialComponentMouseSemanticLabelListEXT. Odpowiednia struktura danych to XrSpatialMouseSemanticLabelEXT (dodana przez rozszerzenie XR_EXT_spatial_object_tracking).
XR_SPATIAL_COMPONENT_TYPE_ANCHOR_EXT
Komponent, który określa lokalizację kotwicy. Odpowiednia struktura listy to XrSpatialComponentAnchorListEXT, a struktura danych to XrPosef (dodana przez rozszerzenie XR_EXT_spatial_anchor).
XR_SPATIAL_COMPONENT_TYPE_PERSISTENCE_EXT
Komponent, który udostępnia trwały identyfikator UUID dla obiektu przestrzennego. Odpowiednia struktura listy to XrSpatialComponentPersistenceListEXT, a odpowiednia struktura danych to XrSpatialPersistenceDataEXT (dodana przez rozszerzenie XR_EXT_spatial_persistence).
XR_SPATIAL_COMPONENT_TYPE_IMAGE_2D_EXT
Komponent opisujący typ obrazu płaskiego. Odpowiednia struktura listy to XrSpatialComponentImage2DListEXT, a odpowiednia struktura danych to XrSpatialImageSizeEXT . (Dodane przez rozszerzenie XR_EXT_spatial_image_tracking)
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_NORMALS_EXT
Komponent, który udostępnia wektory normalne siatki 3D obiektu przestrzennego. Odpowiednia struktura listy to XrSpatialComponentMesh3DNormalsListEXT; odpowiednia struktura danych to XrSpatialBufferEXT (dodana przez rozszerzenie XR_EXT_spatial_mesh_tracking).
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_VERTEX_SEMANTIC_LABELS_EXT
Komponent, który udostępnia etykiety semantyczne dla każdego wierzchołka siatki 3D obiektu przestrzennego. Odpowiednia struktura listy to XrSpatialComponentMesh3DVertexSemanticLabelsListEXT; odpowiednia struktura danych to XrSpatialBufferEXT; dane w buforze są mapowane na XrSpatialMeshSemanticLabelEXT (dodane przez rozszerzenie XR_EXT_spatial_mesh_tracking).
XR_SPATIAL_COMPONENT_TYPE_MESH_3D_TRIANGLE_SEMANTIC_LABELS_EXT
Komponent, który zawiera etykiety semantyczne dla każdej trójkątnej powierzchni siatki 3D obiektu przestrzennego. Odpowiednia struktura listy to XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT; odpowiednia struktura danych to XrSpatialBufferEXT; dane w buforze są mapowane na XrSpatialMeshSemanticLabelEXT (dodane przez rozszerzenie XR_EXT_spatial_mesh_tracking).
XR_SPATIAL_COMPONENT_TYPE_OBJECT_SEMANTIC_LABEL_ANDROID
Komponent, który zapewnia etykietę semantyczną dla obiektu; odpowiednia struktura listy to XrSpatialComponentObjectSemanticLabelListANDROID; odpowiednia struktura danych to XrSpatialObjectSemanticLabelANDROID (dodana przez rozszerzenie XR_ANDROID_spatial_object_tracking).
XR_SPATIAL_COMPONENT_TYPE_RAYCAST_RESULT_ANDROID
Komponent, który określa pozycję trafienia raycastem w element. Odpowiednia struktura listy to XrSpatialComponentRaycastResultListANDROID, a struktura danych to XrSpatialRaycastResultDataANDROID (dodana przez rozszerzenie XR_ANDROID_spatial_discovery_raycast).
XR_SPATIAL_COMPONENT_TYPE_SUBSUMED_BY_ANDROID
Komponent, który podaje identyfikator elementu nadrzędnego dołączonego elementu. Odpowiednia struktura listy to XrSpatialComponentSubsumedByListANDROID, a odpowiednia struktura danych to XrSpatialEntityIdEXT (dodana przez rozszerzenie XR_ANDROID_spatial_component_subsumed_by).
XR_SPATIAL_COMPONENT_TYPE_ROOM_ANDROIDSYS
Komponent, który zawiera wymiary i typ pomieszczenia w budynku. Odpowiednia struktura listy to XrSpatialComponentRoomListANDROIDSYS, a odpowiednia struktura danych to XrSpatialRoomDataANDROIDSYS (dodana przez rozszerzenie XR_ANDROIDSYS_spatial_room_tracking).
XR_SPATIAL_COMPONENT_TYPE_MATERIAL_TYPE_ANDROIDSYS
Komponent, który określa typ materiału powierzchni granicznej. Odpowiednia struktura listy to XrSpatialComponentMaterialTypeListANDROIDSYS, a odpowiednia struktura danych to XrSpatialMaterialTypeANDROIDSYS (dodana przez rozszerzenie XR_ANDROIDSYS_spatial_room_tracking).
XR_SPATIAL_COMPONENT_TYPE_CONFIDENCE_ANDROIDSYS
Komponent, który określa poziom ufności śledzonego obiektu. Odpowiednia struktura listy to XrSpatialComponentConfidenceListANDROIDSYS. Odpowiednia struktura danych to float (dodana przez rozszerzenie XR_ANDROIDSYS_spatial_room_tracking).
XR_SPATIAL_COMPONENT_TYPE_ROOM_EMPTINESS_ANDROIDSYS
Komponent, który określa, czy pomieszczenie jest puste. Odpowiednia struktura listy to XrSpatialComponentRoomEmptinessListANDROIDSYS, a odpowiednia struktura danych to float (dodana przez rozszerzenie XR_ANDROIDSYS_spatial_room_tracking).
XR_SPATIAL_COMPONENT_TYPE_OCCUPANCY_GRID_ANDROIDX1
Komponent, który dostarcza informacje o siatce zajętości dołączonego podmiotu. Odpowiednia struktura listy to XrSpatialComponentOccupancyGridListANDROIDX1, a odpowiednia struktura danych to XrSpatialOccupancyGridDataANDROIDX1 (dodana przez rozszerzenie XR_ANDROIDX1_spatial_occupancy_grid).
XR_SPATIAL_COMPONENT_TYPE_ANNOTATION_QUAD_ANDROID
Komponent opisujący adnotację w postaci czworokąta. Odpowiednia struktura listy to XrSpatialComponentAnnotationQuadListANDROID, a struktura danych to XrSpatialAnnotationQuadDataANDROID (dodana przez rozszerzenie XR_ANDROID_spatial_annotation_tracking).
XR_SPATIAL_COMPONENT_TYPE_STREETSCAPE_GEOMETRY_METADATA_ANDROIDX2
Komponent, który zawiera metadane geometrii krajobrazu miejskiego; odpowiednia struktura listy to XrSpatialComponentStreetscapeGeometryMetadataListANDROIDX2; odpowiednia struktura danych to XrSpatialStreetscapeGeometryMetadataANDROIDX2 (dodana przez rozszerzenie XR_ANDROIDX2_geospatial_streetscape).
Możliwości przestrzenne i konfiguracja
Funkcje przestrzenne określają możliwości środowiska wykonawczego w zakresie wykrywania obiektów, które mają gwarantowany zestaw komponentów. Aplikacje włączają komponenty funkcji przestrzennych podczas tworzenia interfejsu XrSpatialContextEXT, a środowisko wykonawcze musi z kolei udostępniać tylko włączone komponenty w wykrytych obiektach. Jeśli np. środowisko wykonawcze zgłosi, że jednym z komponentów danej funkcji są „etykiety semantyczne”, oznacza to, że aplikacja może włączyć etykiety semantyczne za pomocą konfiguracji tej funkcji, a środowisko wykonawcze musi udostępniać komponent etykiety semantycznej tylko wtedy, gdy jest on skonfigurowany.
typedef enum XrSpatialCapabilityEXT {
XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT = 1000741000,
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT = 1000743000,
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT = 1000743001,
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT = 1000743002,
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT = 1000743003,
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT = 1000744000,
XR_SPATIAL_CAPABILITY_ANCHOR_EXT = 1000762000,
XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT = 1000782000,
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT = 1000783000,
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID = 1000785000,
XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID = 1000786000,
XR_SPATIAL_CAPABILITY_ROOM_TRACKING_ANDROIDSYS = 1000792000,
XR_SPATIAL_CAPABILITY_ROOM_BOUNDARY_TRACKING_ANDROIDSYS = 1000792001,
XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID = 1000794000,
XR_SPATIAL_CAPABILITY_STREETSCAPE_GEOMETRY_ANDROIDX2 = 1000798000,
XR_SPATIAL_CAPABILITY_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialCapabilityEXT;
Wyliczenie XrSpatialCapabilityEXT określa różne typy funkcji, które środowisko wykonawcze może obsługiwać.
Wartości wyliczeniowe to:
Opis typu wyliczeniowego
XR_SPATIAL_CAPABILITY_PLANE_TRACKING_EXT
Śledzenie samolotów (dodane przez rozszerzenie XR_EXT_spatial_plane_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_QR_CODE_EXT
możliwość wykrywania i śledzenia kodów QR; (Dodane przez rozszerzenie XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_MICRO_QR_CODE_EXT
Możliwość wykrywania i śledzenia mikrokodów QR. (Dodane przez rozszerzenie XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_ARUCO_MARKER_EXT
Możliwość wykrywania i śledzenia znaczników Aruco. (Dodane przez rozszerzenie XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_MARKER_TRACKING_APRIL_TAG_EXT
Możliwość wykrywania i śledzenia tagów AprilTag. (Dodane przez rozszerzenie XR_EXT_spatial_marker_tracking)
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_EXT
Śledzenie obiektów (dodane przez rozszerzenie XR_EXT_spatial_object_tracking)
XR_SPATIAL_CAPABILITY_ANCHOR_EXT
Możliwość tworzenia kotwic przestrzennych (dodana przez rozszerzenie XR_EXT_spatial_anchor)
XR_SPATIAL_CAPABILITY_IMAGE_TRACKING_EXT
Możliwość wykrywania i śledzenia płaskich obrazów referencyjnych. (Dodane przez rozszerzenie XR_EXT_spatial_image_tracking)
XR_SPATIAL_CAPABILITY_MESH_TRACKING_EXT
Możliwość śledzenia siatki środowiska. (Dodane przez rozszerzenie XR_EXT_spatial_mesh_tracking)
XR_SPATIAL_CAPABILITY_OBJECT_TRACKING_ANDROID
Śledzenie obiektów (dodane przez rozszerzenie XR_ANDROID_spatial_object_tracking)
XR_SPATIAL_CAPABILITY_DEPTH_RAYCAST_ANDROID
Raycast against depth buffer (Added by the XR_ANDROID_spatial_discovery_raycast extension)
XR_SPATIAL_CAPABILITY_ROOM_TRACKING_ANDROIDSYS
Możliwość śledzenia pokoju (dodana przez rozszerzenie XR_ANDROIDSYS_spatial_room_tracking)
XR_SPATIAL_CAPABILITY_ROOM_BOUNDARY_TRACKING_ANDROIDSYS
Możliwość śledzenia granic pomieszczenia (dodana przez rozszerzenie XR_ANDROIDSYS_spatial_room_tracking)
XR_SPATIAL_CAPABILITY_ANNOTATION_TRACKING_ANDROID
Śledzenie adnotacji (dodane przez rozszerzenie XR_ANDROID_spatial_annotation_tracking)
XR_SPATIAL_CAPABILITY_STREETSCAPE_GEOMETRY_ANDROIDX2
Geometria widoku ulicy (dodana przez rozszerzenie XR_ANDROIDX2_geospatial_streetscape)
Funkcja xrEnumerateSpatialCapabilitiesEXT jest zdefiniowana w ten sposób:
XrResult xrEnumerateSpatialCapabilitiesEXT(
XrInstance instance,
XrSystemId systemId,
uint32_t capabilityCapacityInput,
uint32_t* capabilityCountOutput,
XrSpatialCapabilityEXT* capabilities);
Opisy parametrów
instanceto uchwyt do XrInstance .systemIdtoXrSystemId, którego możliwości przestrzenne zostaną wymienione.capabilityCapacityInputto pojemność tablicycapabilitieslub 0, aby wskazać żądanie pobrania wymaganej pojemności.capabilityCountOutputto liczba funkcji lub wymagana pojemność w przypadku, gdycapabilityCapacityInputjest niewystarczająca.capabilitiesto tablica elementów XrSpatialCapabilityEXT . Może to byćNULL, jeślicapabilityCapacityInputwynosi 0.- Szczegółowy opis pobierania wymaganego rozmiaru
capabilitiesznajdziesz w sekcji Parametry rozmiaru bufora.
Aplikacja może wyliczyć listę funkcji przestrzennych obsługiwanych przez dany XrSystemId, korzystając z funkcji xrEnumerateSpatialCapabilitiesEXT .
Środowisko wykonawcze nie może wyliczać możliwości przestrzennych, których rozszerzenie nie jest włączone w przypadku instance .
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem funkcji xrEnumerateSpatialCapabilitiesEXT. -
instancemusi być prawidłowym uchwytem XrInstance -
capabilityCountOutputmusi być wskaźnikiem wartościuint32_t. - Jeśli
capabilityCapacityInputnie jest równe0,capabilitiesmusi być wskaźnikiem do tablicycapabilityCapacityInputwartości XrSpatialCapabilityEXT.
Kody zwrotne
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
Funkcja xrEnumerateSpatialCapabilityComponentTypesEXT jest zdefiniowana w ten sposób:
XrResult xrEnumerateSpatialCapabilityComponentTypesEXT(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
XrSpatialCapabilityComponentTypesEXT* capabilityComponents);
Opisy parametrów
instanceto uchwyt do XrInstance .systemIdtoXrSystemId, którego komponenty funkcji przestrzennych zostaną wyliczone.capabilityto XrSpatialCapabilityEXT, dla którego zostaną wyliczone komponenty.capabilityComponentsto wskaźnik do XrSpatialCapabilityComponentTypesEXT, czyli struktury wejścia/wyjścia, w której wypełniana jest tablica przydzielona przez aplikację.
Ta funkcja wylicza typy komponentów, które dana funkcja udostępnia w swoich jednostkach w systemie zgodnie z konfiguracją.
Aplikacja może używać typów komponentów wymienionych w XrSpatialCapabilityComponentTypesEXT :: componentTypes, aby poznać pełny zestaw komponentów, które systemId obsługuje w przypadku capability, i może używać tej listy do określania, jaka jest prawidłowa konfiguracja capability podczas tworzenia dla niego XrSpatialContextEXT.
Środowisko wykonawcze musi zwrócić wartość XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT, jeśli wartość capability nie jest wyliczana przez funkcję xrEnumerateSpatialCapabilitiesEXT .
Środowisko wykonawcze nie może wyliczać typów komponentów przestrzennych, których rozszerzenie nie jest włączone w przypadku instance .
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem funkcji xrEnumerateSpatialCapabilityComponentTypesEXT. -
instancemusi być prawidłowym uchwytem XrInstance -
capabilitymusi być prawidłową wartością XrSpatialCapabilityEXT. -
capabilityComponentsmusi być wskaźnikiem struktury XrSpatialCapabilityComponentTypesEXT.
Kody zwrotne
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
Struktura XrSpatialCapabilityComponentTypesEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialCapabilityComponentTypesEXT {
XrStructureType type;
void* next;
uint32_t componentTypeCapacityInput;
uint32_t componentTypeCountOutput;
XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialCapabilityComponentTypesEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur. W podstawowej specyfikacji OpenXR ani w tym rozszerzeniu nie zdefiniowano takich struktur.componentTypeCapacityInputto pojemność tablicy lub 0, aby wskazać żądanie pobrania wymaganej pojemności.componentTypeCountOutputto liczba typów komponentów lub wymagana pojemność w przypadku, gdycomponentTypeCapacityInputjest niewystarczająca.componentTypesto tablica elementów XrSpatialComponentTypeEXT . Może to byćNULL, jeślicomponentTypeCapacityInputwynosi 0.- Szczegółowy opis pobierania wymaganego rozmiaru
componentTypesznajdziesz w sekcji Parametry rozmiaru bufora.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialCapabilityComponentTypesEXT. -
typemusi mieć wartośćXR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur. - Jeśli
componentTypeCapacityInputnie jest równe0,componentTypesmusi być wskaźnikiem do tablicy wartościcomponentTypeCapacityInputXrSpatialComponentTypeEXT.
Funkcje związane z możliwościami przestrzennymi
typedef enum XrSpatialCapabilityFeatureEXT {
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT = 1000743000,
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT = 1000743001,
XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT = 1000744000,
XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID = 1000761000,
XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID = 1000761001,
XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID = 1000761002,
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXT = 1000782000,
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_STATIC_IMAGES_EXT = 1000782001,
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_FIXED_SIZE_IMAGES_EXT = 1000782002,
XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT = 1000783000,
XR_SPATIAL_CAPABILITY_FEATURE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialCapabilityFeatureEXT;
Niektóre funkcje mają parametry udostępniane aplikacji, aby skonfigurować sposób obliczania danych komponentu przez środowisko wykonawcze. Te wymiary parametryzacji i konfigurowalności są nazywane funkcjami. Na przykład w przypadku funkcji śledzenia obrazów środowisko wykonawcze może obsługiwać funkcję, która pozwala aplikacji określić, czy śledzone obrazy są nieruchome.
Przekazywanie tych informacji do środowiska wykonawczego za pomocą struktury konfiguracji nie może zmieniać zestawu typów komponentów obecnych w powiązanych elementach, np. na śledzonym obrazie. Środowisko wykonawcze może jednak optymalizować np. możliwości śledzenia obrazu i zapewniać lepsze wrażenia w aplikacji.
Takie funkcje są reprezentowane przez XrSpatialCapabilityFeatureEXT, a aplikacja wylicza je za pomocą funkcji xrEnumerateSpatialCapabilityFeaturesEXT .
Każda funkcja ma odpowiednią strukturę konfiguracji, która umożliwia jej włączenie. Takie struktury konfiguracji muszą być połączone z XrSpatialCapabilityConfigurationBaseHeaderEXT :: next odpowiedniej funkcji.
Wartości wyliczeniowe to:
Opis typu wyliczeniowego
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_FIXED_SIZE_MARKERS_EXT
Funkcja umożliwiająca aplikacjom określanie rozmiaru markerów. Odpowiednia struktura konfiguracji to XrSpatialMarkerSizeEXT (dodana przez rozszerzenie XR_EXT_spatial_marker_tracking).
XR_SPATIAL_CAPABILITY_FEATURE_MARKER_TRACKING_STATIC_MARKERS_EXT
Funkcja umożliwiająca aplikacjom określanie, czy markery są statyczne. Odpowiednia struktura konfiguracji to XrSpatialMarkerStaticOptimizationEXT (dodana przez rozszerzenie XR_EXT_spatial_marker_tracking).
XR_SPATIAL_CAPABILITY_FEATURE_OBJECT_SEMANTIC_LABEL_SUBSET_EXT
Funkcja przestrzenna umożliwiająca aplikacjom określenie podzbioru etykiet z XrSpatialObjectSemanticLabelEXT, które środowisko wykonawcze ma śledzić. Odpowiednia struktura konfiguracji to XrSpatialFeatureObjectSemanticLabelSubsetEXT . (Dodane przez rozszerzenie XR_EXT_spatial_object_tracking)
XR_SPATIAL_CAPABILITY_FEATURE_SPHERE_BOUNDS_FILTER_ANDROID
Środowisko wykonawcze obsługuje filtr XrSpatialBoundsSpherefANDROID dla XrSpatialDiscoverySnapshotCreateInfoEXT. Nie wymaga to uwzględniania żadnej struktury konfiguracji podczas tworzenia kontekstu przestrzennego. (Dodane przez rozszerzenie XR_ANDROID_spatial_discovery_bounds)
XR_SPATIAL_CAPABILITY_FEATURE_BOX_BOUNDS_FILTER_ANDROID
Środowisko wykonawcze obsługuje filtr XrSpatialBoundsBoxfANDROID w przypadku XrSpatialDiscoverySnapshotCreateInfoEXT. Nie wymaga to uwzględniania żadnej struktury konfiguracji podczas tworzenia kontekstu przestrzennego. (Dodane przez rozszerzenie XR_ANDROID_spatial_discovery_bounds)
XR_SPATIAL_CAPABILITY_FEATURE_FRUSTUM_BOUNDS_FILTER_ANDROID
Środowisko wykonawcze obsługuje filtr XrSpatialBoundsFrustumfANDROID dla XrSpatialDiscoverySnapshotCreateInfoEXT. Nie wymaga to uwzględniania żadnej struktury konfiguracji podczas tworzenia kontekstu przestrzennego. (Dodane przez rozszerzenie XR_ANDROID_spatial_discovery_bounds)
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_AUTOMATIC_SIZE_IMAGES_EXT
Środowisko wykonawcze obsługuje automatyczne określanie fizycznego rozmiaru wykrytych i śledzonych obrazów. Odpowiednia struktura konfiguracji to XrSpatialImageSizeEXT (dodana przez rozszerzenie XR_EXT_spatial_image_tracking).
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_STATIC_IMAGES_EXT
Środowisko wykonawcze obsługuje XrSpatialImageStaticOptimizationEXT . Odpowiednia struktura konfiguracji to XrSpatialImageStaticOptimizationEXT . (Dodane przez rozszerzenie XR_EXT_spatial_image_tracking)
XR_SPATIAL_CAPABILITY_FEATURE_IMAGE_TRACKING_FIXED_SIZE_IMAGES_EXT
Środowisko wykonawcze obsługuje XrSpatialImageSizeEXT . Odpowiednia struktura konfiguracji to XrSpatialImageSizeEXT (dodana przez rozszerzenie XR_EXT_spatial_image_tracking).
XR_SPATIAL_CAPABILITY_FEATURE_TRACK_WATERTIGHT_MESH_EXT
Funkcja umożliwiająca śledzenie wodoszczelnej siatki środowiska. Odpowiednia struktura konfiguracji to XrSpatialFeatureTrackWatertightMeshEXT . (Dodane przez rozszerzenie XR_EXT_spatial_mesh_tracking)
Funkcja xrEnumerateSpatialCapabilityFeaturesEXT jest zdefiniowana w ten sposób:
XrResult xrEnumerateSpatialCapabilityFeaturesEXT(
XrInstance instance,
XrSystemId systemId,
XrSpatialCapabilityEXT capability,
uint32_t capabilityFeatureCapacityInput,
uint32_t* capabilityFeatureCountOutput,
XrSpatialCapabilityFeatureEXT* capabilityFeatures);
Opisy parametrów
instanceto uchwyt do XrInstance .systemIdtoXrSystemId, którego funkcje przestrzenne zostaną wymienione.capabilityto XrSpatialCapabilityEXT, dla którego zostaną wyliczone funkcje.capabilityFeatureCapacityInputto pojemność tablicy lub 0, aby wskazać żądanie pobrania wymaganej pojemności.capabilityFeatureCountOutputto liczba funkcji lub wymagana pojemność w przypadku, gdycapabilityFeatureCapacityInputjest niewystarczająca.capabilityFeaturesto tablica elementów XrSpatialCapabilityFeatureEXT . Może to byćNULL, jeślicapabilityFeatureCapacityInputwynosi 0.- Szczegółowy opis pobierania wymaganego rozmiaru
capabilityFeaturesznajdziesz w sekcji Parametry rozmiaru bufora.
Aplikacja wykrywa funkcje obsługiwane przez dany system dla XrSpatialCapabilityEXT za pomocą funkcji xrEnumerateSpatialCapabilityFeaturesEXT .
W przypadku funkcji, które mają ujawnione funkcje, aplikacja wybiera funkcję lub funkcje do włączenia i podaje odpowiednią strukturę konfiguracji w następnym łańcuchu struktur konfiguracji funkcji w XrSpatialContextCreateInfoEXT :: capabilityConfigs .
Jeśli capability nie jest możliwością wyliczoną przez xrEnumerateSpatialCapabilitiesEXT , środowisko wykonawcze musi zwrócić XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT .
Środowisko wykonawcze nie może wyliczać funkcji związanych z możliwościami przestrzennymi, których rozszerzenie nie jest włączone w przypadku instance .
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem funkcji xrEnumerateSpatialCapabilityFeaturesEXT. -
instancemusi być prawidłowym uchwytem XrInstance -
capabilitymusi być prawidłową wartością XrSpatialCapabilityEXT. -
capabilityFeatureCountOutputmusi być wskaźnikiem wartościuint32_t. - Jeśli wartość
capabilityFeatureCapacityInputnie jest równa0,capabilityFeaturesmusi być wskaźnikiem do tablicycapabilityFeatureCapacityInputwartości XrSpatialCapabilityFeatureEXT.
Kody zwrotne
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
Kontekst przestrzenny
Tworzenie kontekstu przestrzennego
XR_DEFINE_HANDLE(XrSpatialContextEXT)
Uchwyt XrSpatialContextEXT reprezentuje zasoby do wykrywania i aktualizowania pewnej liczby obiektów przestrzennych w środowisku użytkownika. Aplikacja może używać tego uchwytu do wykrywania i aktualizowania obiektów przestrzennych za pomocą innych funkcji tego rozszerzenia.
Funkcja xrCreateSpatialContextAsyncEXT jest zdefiniowana w ten sposób:
XrResult xrCreateSpatialContextAsyncEXT(
XrSession session,
const XrSpatialContextCreateInfoEXT* createInfo,
XrFutureEXT* future);
Opisy parametrów
sessionto XrSession, w której kontekst przestrzenny będzie aktywny.createInfoto struktura XrSpatialContextCreateInfoEXT używana do określania parametrów kontekstu przestrzennego.futureto wskaźnik doXrFutureEXT.
Aplikacja może utworzyć uchwyt XrSpatialContextEXT, wykonując te czynności:
- Przekazywanie struktur pochodnych XrSpatialCapabilityConfigurationBaseHeaderEXT w XrSpatialContextCreateInfoEXT ::
capabilityConfigsw celu włączenia funkcji i komponentów dla tej funkcji. - Konfigurowanie samych funkcji za pomocą odpowiednich struktur konfiguracji XrSpatialCapabilityFeatureEXT .
Środowisko wykonawcze musi zwracać wartość XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT, jeśli XrSpatialContextCreateInfoEXT ::capabilityConfigCount ma wartość 0. Uchwyt kontekstu przestrzennego musi mieć co najmniej 1 możliwość.
Środowisko wykonawcze musi zwrócić XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT, jeśli żadna funkcja w tablicy XrSpatialContextCreateInfoEXT :: capabilityConfigs nie jest wyliczana przez xrEnumerateSpatialCapabilitiesEXT .
Środowisko wykonawcze musi zwracać wartość XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT, jeśli którykolwiek element XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponentCount w strukturze XrSpatialContextCreateInfoEXT :: capabilityConfigs ma wartość 0. Konfiguracja funkcji jest niekompletna bez listy typów komponentów, które mają być włączone dla tej funkcji.
Środowisko wykonawcze musi zwrócić XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT, jeśli jakikolwiek typ komponentu wymieniony w XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents nie jest wyliczony dla XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability w xrEnumerateSpatialCapabilityComponentTypesEXT .
Jeśli któraś ze struktur w kolejnym łańcuchu XrSpatialContextCreateInfoEXT :: capabilityConfigs odpowiada strukturze XrSpatialCapabilityFeatureEXT, która nie jest wyliczona dla tej funkcji w funkcji xrEnumerateSpatialCapabilityFeaturesEXT, środowisko wykonawcze musi zignorować tę strukturę XrSpatialCapabilityFeatureEXT.
Środowisko wykonawcze musi zwrócić XR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT, jeśli XrSpatialContextCreateInfoEXT :: capabilityConfigs zawiera wiele struktur z tym samym XrSpatialCapabilityConfigurationBaseHeaderEXT :: capability .
Aby zapewnić optymalne wykorzystanie zasobów systemowych, środowisko wykonawcze może używać konfiguracji podanych w tablicy XrSpatialContextCreateInfoEXT, aby przygotować się na nadchodzące żądania przestrzenne. Na przykład środowisko wykonawcze obsługujące śledzenie płaszczyzny może rozpocząć proces śledzenia płaszczyzny tylko wtedy, gdy aplikacja utworzy uchwyt kontekstu przestrzennego zawierający funkcję śledzenia płaszczyzny. Jeśli skonfigurowane funkcje mają długi czas rozgrzewania, wywołania funkcji xrCreateSpatialDiscoverySnapshotAsyncEXT mogą skutkować pustym zrzutem. Aplikacja może poczekać na zdarzenie XrEventDataSpatialDiscoveryRecommendedEXT, zanim użyje funkcji xrCreateSpatialDiscoverySnapshotAsyncEXT, aby mieć pewność, że podstawowe usługi śledzenia są gotowe do działania.
Jeśli środowisko wykonawcze wymusza system uprawnień do kontrolowania dostępu aplikacji do funkcji przestrzennych konfigurowanych dla interfejsu XrSpatialContextEXT, musi zwrócić wartość XR_ERROR_PERMISSION_INSUFFICIENT, jeśli te uprawnienia nie zostały przyznane tej aplikacji.
Ta funkcja rozpoczyna operację asynchroniczną i tworzy odpowiedni obiekt XrFutureEXT , który można wykorzystać z funkcją xrPollFutureEXT i funkcjami powiązanymi. Wartość zwracana przez tę funkcję wskazuje tylko, czy parametry były akceptowalne do zaplanowania operacji asynchronicznej. Odpowiednią funkcją zakończenia jest xrCreateSpatialContextCompleteEXT, której można używać, gdy przyszłość z tej funkcji jest w stanie READY, a dane wyjściowe są wypełniane przez tę funkcję w strukturze zakończenia XrCreateSpatialContextCompletionEXT .
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem funkcji xrCreateSpatialContextAsyncEXT. -
sessionmusi być prawidłowym uchwytem XrSession -
createInfomusi być wskaźnikiem do prawidłowej struktury XrSpatialContextCreateInfoEXT. -
futuremusi być wskaźnikiem do wartościXrFutureEXT
Kody zwrotne
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_PERMISSION_INSUFFICIENTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXTXR_ERROR_VALIDATION_FAILURE
Struktura XrSpatialContextCreateInfoEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialContextCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t capabilityConfigCount;
const XrSpatialCapabilityConfigurationBaseHeaderEXT* const* capabilityConfigs;
} XrSpatialContextCreateInfoEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur. W podstawowej specyfikacji OpenXR ani w tym rozszerzeniu nie zdefiniowano takich struktur.capabilityConfigCounttouint32_topisujący liczbę elementów w tablicycapabilityConfigs.capabilityConfigsto wskaźnik do tablicy wskaźników XrSpatialCapabilityConfigurationBaseHeaderEXT.
Struktura XrSpatialContextCreateInfoEXT zawiera informacje potrzebne do utworzenia uchwytu XrSpatialContextEXT.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialContextCreateInfoEXT. -
typemusi mieć wartośćXR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur . Zobacz też: XrSpatialContextPersistenceConfigEXT -
capabilityConfigsmusi być wskaźnikiem do tablicycapabilityConfigCountprawidłowych struktur opartych na XrSpatialCapabilityConfigurationBaseHeaderEXT. Zobacz też: XrSpatialCapabilityConfigurationAnchorEXT , XrSpatialCapabilityConfigurationAprilTagEXT , XrSpatialCapabilityConfigurationArucoMarkerEXT , XrSpatialCapabilityConfigurationDepthRaycastANDROID , XrSpatialCapabilityConfigurationImageTrackingEXT , XrSpatialCapabilityConfigurationMeshTrackingEXT , XrSpatialCapabilityConfigurationMicroQrCodeEXT , XrSpatialCapabilityConfigurationObjectTrackingANDROID , XrSpatialCapabilityConfigurationObjectTrackingEXT , XrSpatialCapabilityConfigurationPlaneTrackingEXT , XrSpatialCapabilityConfigurationQrCodeEXT , XrSpatialCapabilityConfigurationRoomBoundaryTrackingANDROIDSYS , XrSpatialCapabilityConfigurationRoomTrackingANDROIDSYS , XrSpatialCapabilityConfigurationStreetscapeGeometryANDROIDX2 - Parametr
capabilityConfigCountmusi być większy niż0.
Struktura XrSpatialCapabilityConfigurationBaseHeaderEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialCapabilityConfigurationBaseHeaderEXT {
XrStructureType type;
const void* next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationBaseHeaderEXT;
Ta struktura nie jest używana bezpośrednio w interfejsie API, ale jej struktury podrzędne mogą być używane z parametrem XrSpatialContextCreateInfoEXT do konfigurowania funkcji przestrzennych.
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur.capabilityto XrSpatialCapabilityEXT .enabledComponentCounttouint32_topisujący liczbę elementów w tablicyenabledComponents.enabledComponentsto wskaźnik tablicy elementów XrSpatialComponentTypeEXT .
Środowisko wykonawcze musi zwrócić wartość XR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXT, jeśli wartość capability nie jest wyliczana przez funkcję xrEnumerateSpatialCapabilitiesEXT . Środowisko wykonawcze musi zwrócić wartość XR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXT, jeśli jakikolwiek typ komponentu wymieniony w enabledComponents nie jest wyliczony dla capability w funkcji xrEnumerateSpatialCapabilityComponentTypesEXT .
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialCapabilityConfigurationBaseHeaderEXT. -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur. -
capabilitymusi być prawidłową wartością XrSpatialCapabilityEXT. -
enabledComponentsmusi być wskaźnikiem do tablicyenabledComponentCountprawidłowych wartości XrSpatialComponentTypeEXT. - Parametr
enabledComponentCountmusi być większy niż0.
Funkcja xrCreateSpatialContextCompleteEXT jest zdefiniowana w ten sposób:
XrResult xrCreateSpatialContextCompleteEXT(
XrSession session,
XrFutureEXT future,
XrCreateSpatialContextCompletionEXT* completion);
Opisy parametrów
sessionto obiekt XrSession przekazany wcześniej do funkcji xrCreateSpatialContextAsyncEXT ::session.futuretoXrFutureEXTotrzymany z funkcji xrCreateSpatialContextAsyncEXT .completionto wskaźnik do struktury XrCreateSpatialContextCompletionEXT .
Funkcja xrCreateSpatialContextCompleteEXT kończy operację asynchroniczną rozpoczętą przez funkcję xrCreateSpatialContextAsyncEXT . Środowisko wykonawcze musi zwrócić wartość XR_ERROR_FUTURE_PENDING_EXT, jeśli future nie jest w stanie gotowości. Środowisko wykonawcze musi zwrócić wartość XR_ERROR_FUTURE_INVALID_EXT, jeśli future zostało już ukończone lub anulowane.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem funkcji xrCreateSpatialContextCompleteEXT. -
sessionmusi być prawidłowym uchwytem XrSession -
completionmusi być wskaźnikiem struktury XrCreateSpatialContextCompletionEXT.
Kody zwrotne
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_FUTURE_INVALID_EXTXR_ERROR_FUTURE_PENDING_EXTXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_VALIDATION_FAILURE
Struktura XrCreateSpatialContextCompletionEXT jest zdefiniowana w ten sposób:
typedef struct XrCreateSpatialContextCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialContextEXT spatialContext;
} XrCreateSpatialContextCompletionEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur.futureResultto XrResult operacji tworzenia kontekstu przestrzennego.spatialContextto obiekt XrSpatialContextEXT utworzony na podstawie danych i konfiguracji w funkcji xrCreateSpatialContextAsyncEXT ::createInfo.
Kody zwrotu w przyszłości
Wartości pola futureResult:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXT
Jeśli futureResult jest kodem powodzenia, spatialContext musi być prawidłowy. Jeśli spatialContext jest prawidłowy, pozostaje taki tylko w okresie istnienia xrCreateSpatialContextAsyncEXT :: session lub do momentu, gdy aplikacja zniszczy spatialContext za pomocą xrDestroySpatialContextEXT, w zależności od tego, co nastąpi wcześniej.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem funkcji XrCreateSpatialContextCompletionEXT. -
typemusi mieć wartośćXR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur. -
futureResultmusi być prawidłową wartością XrResult - Jeśli
spatialContextnie jest wartością XR_NULL_HANDLE ,spatialContextmusi być prawidłowym uchwytem XrSpatialContextEXT.
Zniszczenie kontekstu przestrzennego
Funkcja xrDestroySpatialContextEXT jest zdefiniowana w ten sposób:
XrResult xrDestroySpatialContextEXT(
XrSpatialContextEXT spatialContext);
Opisy parametrów
spatialContextto obiekt XrSpatialContextEXT utworzony wcześniej przez funkcję xrCreateSpatialContextAsyncEXT .
Aplikacja może wywołać funkcję xrDestroySpatialContextEXT, aby zwolnić uchwyt spatialContext i powiązane z nim zasoby po zakończeniu zadań związanych z wykrywaniem i aktualizowaniem jednostek przestrzennych. Jeśli nie ma innego prawidłowego elementu XrSpatialContextEXT utworzonego z tymi samymi możliwościami przestrzennymi co spatialContext, to wywołanie służy jako sugestia dla środowiska wykonawczego, aby wyłączyć usługi śledzenia wymagane do obsługi tych możliwości w celu zaoszczędzenia zasobów systemowych.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem funkcji xrDestroySpatialContextEXT. -
spatialContextmusi być prawidłowym uchwytem XrSpatialContextEXT.
Bezpieczeństwo wątków
- Dostęp do
spatialContexti wszystkich uchwytów podrzędnych musi być synchronizowany zewnętrznie.
Kody zwrotne
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Reprezentacje encji przestrzennych
Identyfikator jednostki przestrzennej
XR_DEFINE_ATOM(XrSpatialEntityIdEXT)
XrSpatialEntityIdEXT reprezentuje dowolny rodzaj obiektu wykrytego przez środowisko wykonawcze w przestrzeni użytkownika. Wartość XrSpatialEntityIdEXT jest ważna w przypadku elementu XrSpatialContextEXT, w którym została wykryta, a środowisko wykonawcze nie może ponownie używać tej samej wartości XrSpatialEntityIdEXT w przypadku różnych elementów w tym samym elemencie XrSpatialContextEXT . Ponadto środowisko wykonawcze nie może ponownie używać tego samego XrSpatialEntityIdEXT w wielu obiektach XrSpatialContextEXT w ramach tej samej sesji XrSession, niezależnie od tego, czy reprezentuje on ten sam czy różne podmioty.
#define XR_NULL_SPATIAL_ENTITY_ID_EXT 0
XR_NULL_SPATIAL_ENTITY_ID_EXT to wartość zarezerwowana reprezentująca nieprawidłowy identyfikator XrSpatialEntityIdEXT . Można go przekazywać do funkcji interfejsu API i z nich zwracać tylko wtedy, gdy jest to wyraźnie dozwolone.
Uchwyt obiektu przestrzennego
XR_DEFINE_HANDLE(XrSpatialEntityEXT)
Uchwyt XrSpatialEntityEXT reprezentuje jednostkę przestrzenną. Aplikacja może utworzyć taki uchwyt, aby poinformować środowisko wykonawcze o swoim zainteresowaniu konkretnym elementem.
Tworzenie uchwytu encji przestrzennej na podstawie identyfikatora
Funkcja xrCreateSpatialEntityFromIdEXT jest zdefiniowana w ten sposób:
XrResult xrCreateSpatialEntityFromIdEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialEntityFromIdCreateInfoEXT* createInfo,
XrSpatialEntityEXT* spatialEntity);
Opisy parametrów
spatialContextto wcześniej utworzony element XrSpatialContextEXT za pomocą funkcji xrCreateSpatialContextAsyncEXT .createInfoto wskaźnik struktury XrSpatialEntityFromIdCreateInfoEXT.spatialEntityto zwrócony uchwyt XrSpatialEntityEXT.
Aplikacja może używać funkcji xrCreateSpatialEntityFromIdEXT do tworzenia uchwytu XrSpatialEntityEXT, który jest odwołaniem do obiektu istniejącego w środowisku użytkownika.
Środowisko wykonawcze musi zwrócić XR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT, jeśli XrSpatialEntityFromIdCreateInfoEXT :: entityId nie jest prawidłowym identyfikatorem dla spatialContext .
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem funkcji xrCreateSpatialEntityFromIdEXT. -
spatialContextmusi być prawidłowym uchwytem XrSpatialContextEXT. -
createInfomusi być wskaźnikiem do prawidłowej struktury XrSpatialEntityFromIdCreateInfoEXT. -
spatialEntitymusi być wskaźnikiem do uchwytu XrSpatialEntityEXT.
Kody zwrotne
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Struktura XrSpatialEntityFromIdCreateInfoEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialEntityFromIdCreateInfoEXT {
XrStructureType type;
const void* next;
XrSpatialEntityIdEXT entityId;
} XrSpatialEntityFromIdCreateInfoEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur. W podstawowej specyfikacji OpenXR ani w tym rozszerzeniu nie zdefiniowano takich struktur.entityIdtoXrSpatialEntityIdEXTjednostki, dla której aplikacja chce utworzyć uchwyt.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialEntityFromIdCreateInfoEXT. -
typemusi mieć wartośćXR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur.
Destroy Spatial Entity Handle
Funkcja xrDestroySpatialEntityEXT jest zdefiniowana w ten sposób:
XrResult xrDestroySpatialEntityEXT(
XrSpatialEntityEXT spatialEntity);
Opisy parametrów
spatialEntityto uchwyt do obiektu XrSpatialEntityEXT utworzonego wcześniej przez funkcję taką jak xrCreateSpatialEntityFromIdEXT .
Aplikacja może użyć funkcji xrDestroySpatialEntityEXT, aby zwolnić uchwyt spatialEntity, gdy nie będzie już zainteresowana obiektem, do którego odnosi się ten uchwyt.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem funkcji xrDestroySpatialEntityEXT. -
spatialEntitymusi być prawidłowym uchwytem XrSpatialEntityEXT
Bezpieczeństwo wątków
- Dostęp do
spatialEntityi wszystkich uchwytów podrzędnych musi być synchronizowany zewnętrznie.
Kody zwrotne
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Zrzut przestrzenny
XR_DEFINE_HANDLE(XrSpatialSnapshotEXT)
Aplikacja może tworzyć migawki przestrzenne w celu wykrywania obiektów przestrzennych lub aktualizowania informacji o znanych obiektach przestrzennych. Uchwyt XrSpatialSnapshotEXT reprezentuje niezmienne dane wykrytych lub zaktualizowanych obiektów przestrzennych oraz podzbiór ich komponentów wybranych przez aplikację. Zrzut przestrzenny przedstawia spójny widok encji i ich danych składowych. Po utworzeniu zrzutu dane zrzutu muszą pozostać stałe, dopóki zrzut jest ważny.
Aplikacja może tworzyć dowolną liczbę zrzutów, ale musi pamiętać o pamięci przydzielanej do każdego nowego zrzutu i musi usuwać zrzuty, gdy nie są już potrzebne.
Tworzenie zrzutu wykrywania
Funkcja xrCreateSpatialDiscoverySnapshotAsyncEXT jest zdefiniowana w ten sposób:
XrResult xrCreateSpatialDiscoverySnapshotAsyncEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialDiscoverySnapshotCreateInfoEXT* createInfo,
XrFutureEXT* future);
Opisy parametrów
spatialContextto wcześniej utworzony obiekt XrSpatialContextEXT za pomocą funkcji xrCreateSpatialContextAsyncEXT .createInfoto wskaźnik do struktury XrSpatialDiscoverySnapshotCreateInfoEXT .futureto wskaźnik doXrFutureEXT.
Aplikacja może wykrywać obiekty przestrzenne, tworząc migawkę wykrywania za pomocą funkcji xrCreateSpatialDiscoverySnapshotAsyncEXT .
Ta funkcja rozpoczyna operację asynchroniczną i tworzy odpowiedni obiekt XrFutureEXT , który można wykorzystać z funkcją xrPollFutureEXT i funkcjami powiązanymi. Wartość zwracana przez tę funkcję wskazuje tylko, czy parametry były akceptowalne do zaplanowania operacji asynchronicznej. Odpowiednią funkcją zakończenia jest xrCreateSpatialDiscoverySnapshotCompleteEXT, której można użyć, gdy przyszłość z tej funkcji jest w stanie READY, a dane wyjściowe są wypełnione przez tę funkcję w strukturze zakończenia XrCreateSpatialDiscoverySnapshotCompletionEXT .
Aplikacja może przesyłać wiele żądań utworzenia migawki wykrywania bez konieczności czekania na zakończenie poprzedniego żądania. Środowisko wykonawcze może przetwarzać i tworzyć zrzuty w dowolnej kolejności. Środowisko wykonawcze może opóźnić zakończenie tworzenia migawki wykrywania, aby ograniczyć działanie aplikacji, jeśli musi ona zmniejszyć wykorzystanie zasobów systemowych ze względu na zasilanie, temperaturę lub inne zasady urządzenia.
Aplikacja może używać XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes do filtrowania listy podmiotów i komponentów, których dane środowisko wykonawcze musi uwzględnić w migawce. Jeśli aplikacja podaje prawidłową listę typów komponentów przestrzennych w strukturze XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes , środowisko wykonawcze musi uwzględniać w migawce tylko te jednostki przestrzenne, które mają co najmniej 1 komponent podany w strukturze XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes . Poza tym środowisko wykonawcze musi zawierać tylko dane tych komponentów w zrzucie.
Środowisko wykonawcze musi zwrócić XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT, jeśli którykolwiek z elementów XrSpatialComponentTypeEXT w XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes nie jest włączony w przypadku funkcji przestrzennych przekazanych do XrSpatialContextCreateInfoEXT :: capabilityConfigs podczas tworzenia spatialContext .
Jeśli aplikacja nie podaje listy typów komponentów przestrzennych w XrSpatialDiscoverySnapshotCreateInfoEXT :: componentTypes , środowisko wykonawcze musi uwzględnić w migawce wszystkie obiekty przestrzenne, które mają zestaw komponentów wymienionych w XrSpatialCapabilityConfigurationBaseHeaderEXT ::enabledComponents dla funkcji skonfigurowanych dla spatialContext . Czas działania musi obejmować dane wszystkich włączonych komponentów funkcji skonfigurowanych dla spatialContext .
Jeśli zdarzenie XrEventDataReferenceSpaceChangePending zostanie umieszczone w kolejce przed zakończeniem działania funkcji future, a wartość XrEventDataReferenceSpaceChangePending :: poseValid będzie fałszywa, środowisko wykonawcze może utworzyć obiekt XrSpatialSnapshotEXT, który nie zawiera żadnych elementów, lub ustawić wartość XrSpatialEntityTrackingStateEXT elementów, których nie można już zlokalizować w obiekcie XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace w obiekcie XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time na XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT lub XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT . Środowisko wykonawcze nie może ustawić XrCreateSpatialContextCompletionEXT :: futureResult na kod błędu z powodu XrEventDataReferenceSpaceChangePending .
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem funkcji xrCreateSpatialDiscoverySnapshotAsyncEXT. -
spatialContextmusi być prawidłowym uchwytem XrSpatialContextEXT. -
createInfomusi być wskaźnikiem do prawidłowej struktury XrSpatialDiscoverySnapshotCreateInfoEXT. -
futuremusi być wskaźnikiem do wartościXrFutureEXT
Kody zwrotne
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXTXR_ERROR_VALIDATION_FAILURE
Struktura XrSpatialDiscoverySnapshotCreateInfoEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialDiscoverySnapshotCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialDiscoverySnapshotCreateInfoEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur. W podstawowej specyfikacji OpenXR ani w tym rozszerzeniu nie zdefiniowano takich struktur.componentTypeCounttouint32_topisujący liczbę elementów w tablicycomponentTypes.componentTypesto tablica elementów XrSpatialComponentTypeEXT .
Struktura XrSpatialDiscoverySnapshotCreateInfoEXT opisuje informacje potrzebne do utworzenia uchwytu XrSpatialSnapshotEXT podczas wykrywania jednostek przestrzennych.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialDiscoverySnapshotCreateInfoEXT. -
typemusi mieć wartośćXR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur . Zobacz też: XrSpatialBoundsBoxfANDROID , XrSpatialBoundsFrustumfANDROID , XrSpatialBoundsSpherefANDROID , XrSpatialDiscoveryPersistenceUuidFilterEXT , XrSpatialDiscoveryRoomBoundaryFilterANDROIDSYS , XrSpatialDiscoveryUniqueEntitiesFilterANDROID , XrSpatialFilterTrackingStateEXT , XrSpatialRaycastInfoANDROID - Jeśli
componentTypeCountnie jest równe0,componentTypesmusi być wskaźnikiem do tablicycomponentTypeCountprawidłowych wartości XrSpatialComponentTypeEXT.
Funkcja xrCreateSpatialDiscoverySnapshotCompleteEXT jest zdefiniowana w ten sposób:
XrResult xrCreateSpatialDiscoverySnapshotCompleteEXT(
XrSpatialContextEXT spatialContext,
const XrCreateSpatialDiscoverySnapshotCompletionInfoEXT* createSnapshotCompletionInfo,
XrCreateSpatialDiscoverySnapshotCompletionEXT* completion);
Opisy parametrów
spatialContextto XrSpatialContextEXT, który był wcześniej przekazywany do xrCreateSpatialDiscoverySnapshotAsyncEXT ::spatialContext.createSnapshotCompletionInfoto wskaźnik do struktury XrCreateSpatialDiscoverySnapshotCompletionInfoEXT, która zawiera informacje o zakończeniu żądania utworzenia zrzutu odkrywania przestrzennego.completionto wskaźnik do XrCreateSpatialDiscoverySnapshotCompletionEXT .
Funkcja xrCreateSpatialDiscoverySnapshotCompleteEXT kończy operację asynchroniczną rozpoczętą przez funkcję xrCreateSpatialDiscoverySnapshotAsyncEXT . Środowisko wykonawcze musi zwrócić XR_ERROR_FUTURE_PENDING_EXT, jeśli XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future nie jest w stanie gotowości. Środowisko wykonawcze musi zwrócić XR_ERROR_FUTURE_INVALID_EXT, jeśli XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: future zostało już ukończone lub anulowane.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem funkcji xrCreateSpatialDiscoverySnapshotCompleteEXT. -
spatialContextmusi być prawidłowym uchwytem XrSpatialContextEXT. -
createSnapshotCompletionInfomusi być wskaźnikiem do prawidłowej struktury XrCreateSpatialDiscoverySnapshotCompletionInfoEXT. -
completionmusi być wskaźnikiem do struktury XrCreateSpatialDiscoverySnapshotCompletionEXT.
Kody zwrotne
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_FUTURE_INVALID_EXTXR_ERROR_FUTURE_PENDING_EXTXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
Struktura XrCreateSpatialDiscoverySnapshotCompletionInfoEXT jest zdefiniowana w ten sposób:
typedef struct XrCreateSpatialDiscoverySnapshotCompletionInfoEXT {
XrStructureType type;
const void* next;
XrSpace baseSpace;
XrTime time;
XrFutureEXT future;
} XrCreateSpatialDiscoverySnapshotCompletionInfoEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur.baseSpaceto XrSpace, w którym będą się znajdować wszystkie lokalizacje XrSpatialSnapshotEXT.timetoXrTime, w którym będą znajdować się wszystkie lokalizacje wykrytego obiektu XrSpatialSnapshotEXT.futuretoXrFutureEXTotrzymany z funkcji xrCreateSpatialDiscoverySnapshotAsyncEXT.
Lokalizacje w różnych danych komponentów uwzględnionych w utworzonym zrzucie będą reprezentowane w baseSpace , znajdującym się w time .
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem funkcji XrCreateSpatialDiscoverySnapshotCompletionInfoEXT. -
typemusi mieć wartośćXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur. -
baseSpacemusi być prawidłowym uchwytem XrSpace.
Struktura XrCreateSpatialDiscoverySnapshotCompletionEXT jest zdefiniowana w ten sposób:
typedef struct XrCreateSpatialDiscoverySnapshotCompletionEXT {
XrStructureType type;
void* next;
XrResult futureResult;
XrSpatialSnapshotEXT snapshot;
} XrCreateSpatialDiscoverySnapshotCompletionEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur.futureResultto XrResult operacji tworzenia zrzutu wykrywania przestrzennego.snapshotto XrSpatialSnapshotEXT, którego można używać do wysyłania zapytań o dane komponentów wykrytych encji przestrzennych.
Kody zwrotu w przyszłości
Wartości pola futureResult:
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_RUNTIME_FAILUREXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHED
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem funkcji XrCreateSpatialDiscoverySnapshotCompletionEXT. -
typemusi mieć wartośćXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur. -
futureResultmusi być prawidłową wartością XrResult - Jeśli
snapshotnie jest wartością XR_NULL_HANDLE ,snapshotmusi być prawidłowym uchwytem XrSpatialSnapshotEXT.
Zdarzenie rekomendacji w sekcji Odkrywaj
Struktura XrEventDataSpatialDiscoveryRecommendedEXT jest zdefiniowana w ten sposób:
typedef struct XrEventDataSpatialDiscoveryRecommendedEXT {
XrStructureType type;
const void* next;
XrSpatialContextEXT spatialContext;
} XrEventDataSpatialDiscoveryRecommendedEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur.spatialContextto XrSpatialContextEXT, dla którego środowisko wykonawcze zaleca odkrywanie.
Aplikacja może pobrać to zdarzenie za pomocą funkcji xrPollEvent . Aplikacja może uniknąć nadmiernej liczby wywołań funkcji xrCreateSpatialDiscoverySnapshotAsyncEXT w celu wykrywania obiektów przestrzennych, czekając na to zdarzenie. Jeśli aplikacja utworzy wiele zrzutów wykrywania z tym samym parametrem XrSpatialDiscoverySnapshotCreateInfoEXT między dwoma zdarzeniami XrEventDataSpatialDiscoveryRecommendedEXT, wynikowe zrzuty mogą zawierać te same elementy, a tym samym tworzenie zrzutów i zapytania o dane byłyby niepotrzebne.
Oczekiwanie na to zdarzenie w celu utworzenia nowego zrzutu wykrywania zapewnia, że aplikacja nie przeciąża systemu żądaniami wykrywania, dla których środowisko wykonawcze może nie zwracać żadnych nowych danych. Pomaga to uniknąć ryzyka nadmiernego wykorzystania zasobów systemowych i ograniczenia przepustowości z powodu zasad zasilania lub termicznych urządzenia. Pomaga to również w zapewnieniu równości między środowiskami wykonawczymi, które wykrywają jednostki przestrzenne na bieżąco za pomocą śledzenia na żywo, a środowiskami wykonawczymi, które udostępniają jednostki przestrzenne na podstawie wcześniej zarejestrowanego stanu (w którym środowisko wykonawcze może umieszczać w kolejce zdarzenie rekomendacji wykrywania tylko raz dla każdego XrSpatialContextEXT).
Środowisko wykonawcze nie może umieszczać tego zdarzenia w kolejce, aby powiadamiać aplikację o zmianach lub dostosowaniach wprowadzonych w danych komponentów istniejących obiektów przestrzennych. Aplikacja może używać funkcji xrCreateSpatialUpdateSnapshotEXT do śledzenia aktualizacji danych komponentów w przypadku interesujących ją obiektów przestrzennych.
Środowisko wykonawcze może umieścić w kolejce zdarzenie rekomendacji wykrywania bez czekania, aż aplikacja najpierw wywoła funkcję xrCreateSpatialDiscoverySnapshotAsyncEXT . Na przykład środowisko wykonawcze może podejmować decyzję o umieszczeniu w kolejce zdarzenia rekomendacji dotyczącej wykrywania na podstawie konfiguracji XrSpatialContextEXT, własnej wiedzy o otoczeniu użytkownika (wykrywanie nowych obiektów lub utrata istniejących) lub w celu podpowiedzi aplikacji odpowiedniej częstotliwości żądań wykrywania, aby nie przeciążać zasobów systemu. Środowisko wykonawcze może nigdy nie umieścić tego zdarzenia w kolejce dla XrSpatialContextEXT, jeśli w środowisku użytkownika nie zostaną znalezione żadne obiekty przez cały okres istnienia tego XrSpatialContextEXT .
Środowisko wykonawcze nie może umieszczać tego zdarzenia w kolejce dla danego spatialContext, dopóki aplikacja nie zakończy tworzenia za pomocą funkcji xrCreateSpatialContextCompleteEXT .
Po wywołaniu przez aplikację funkcji xrDestroySpatialContextEXT środowisko wykonawcze nie może już umieszczać w kolejce żadnych zdarzeń rekomendacji dotyczących wykrywania dla tego kontekstu przestrzennego ani zwracać żadnych takich zdarzeń dla tego kontekstu z funkcji xrPollEvent .
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrEventDataSpatialDiscoveryRecommendedEXT. -
typemusi mieć wartośćXR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur.
Wykonywanie zapytań o dane komponentu
Funkcja xrQuerySpatialComponentDataEXT jest zdefiniowana w ten sposób:
XrResult xrQuerySpatialComponentDataEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialComponentDataQueryConditionEXT* queryCondition,
XrSpatialComponentDataQueryResultEXT* queryResult);
Opisy parametrów
snapshotto XrSpatialSnapshotEXT wcześniej dostarczony przez xrCreateSpatialDiscoverySnapshotCompleteEXT lub xrCreateSpatialUpdateSnapshotEXT .queryConditionto wskaźnik struktury XrSpatialComponentDataQueryConditionEXT.queryResultto wskaźnik struktury XrSpatialComponentDataQueryResultEXT.
Aplikacja może używać funkcji xrQuerySpatialComponentDataEXT do wysyłania zapytań o dane komponentów jednostek w migawce przez dołączenie struktury listy do XrSpatialComponentDataQueryResultEXT :: next odpowiadającej każdemu XrSpatialComponentTypeEXT w XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Jeśli aplikacja dołącza do XrSpatialComponentDataQueryResultEXT :: next strukturę listy, która nie odpowiada żadnemu z komponentów wymienionych w XrSpatialComponentDataQueryConditionEXT :: componentTypes, środowisko wykonawcze musi zwrócić XR_ERROR_VALIDATION_FAILURE .
Aplikacja może dołączyć struktury list odpowiadające tylko podzbiorowi komponentów wymienionych w XrSpatialComponentDataQueryConditionEXT :: componentTypes . Aplikacja może całkowicie pominąć struktury list, jeśli chce tylko poznać identyfikatory i stan śledzenia obiektów przestrzennych, które spełniają warunek queryCondition . Środowisko wykonawcze nie może traktować braku struktur list w łańcuchu XrSpatialComponentDataQueryResultEXT :: next jako błędu.
Jeśli zdarzenie XrEventDataReferenceSpaceChangePending jest w kolejce i XrEventDataReferenceSpaceChangePending :: changeTime upłynęło, gdy aplikacja wysyła zapytanie o dane komponentu z XrSpatialSnapshotEXT, aplikacja może użyć danych zdarzenia do odpowiedniego dostosowania pozycji.
Środowisko wykonawcze musi wypełniać strukturę XrSpatialComponentDataQueryResultEXT :: entityIds tylko encjami, które mają wszystkie komponenty określone w strukturze XrSpatialComponentDataQueryConditionEXT :: componentTypes . Jeśli XrSpatialComponentDataQueryConditionEXT :: componentTypeCount ma wartość 0, środowisko wykonawcze musi wypełnić pole queryResult wszystkimi encjami (i ich stanami śledzenia), które znajdują się w migawce. Jeśli do XrSpatialComponentDataQueryConditionEXT :: next zostaną dodane dodatkowe warunki zapytania, środowisko wykonawcze musi traktować je jako „AND” z dostępnością typów komponentów, tzn. środowisko wykonawcze musi wypełniać XrSpatialComponentDataQueryResultEXT ::entityIds tylko jednostkami, które spełniają wszystkie podane warunki. Środowisko wykonawcze musi wypełniać dane komponentu w strukturach list w tej samej kolejności co encje w XrSpatialComponentDataQueryResultEXT :: entityIds, tzn. dane komponentu pod danym indeksem w tablicy struktury listy muszą odpowiadać encji pod tym samym indeksem.
Jeśli stan śledzenia encji nie jest XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT , środowisko wykonawcze nie może zmieniać danych w indeksie odpowiadającym tej encji w tablicy zawartej w strukturach listy dołączonych do XrSpatialComponentDataQueryResultEXT .
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem funkcji xrQuerySpatialComponentDataEXT. -
snapshotmusi być prawidłowym uchwytem XrSpatialSnapshotEXT -
queryConditionmusi być wskaźnikiem do prawidłowej struktury XrSpatialComponentDataQueryConditionEXT. -
queryResultmusi być wskaźnikiem struktury XrSpatialComponentDataQueryResultEXT.
Kody zwrotne
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_VALIDATION_FAILURE
Na przykład aplikacja tworzy obiekt XrSpatialSnapshotEXT, który zawiera 5 elementów, gdzie:
- Encje 1 i 2 mają komponenty
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTiXR_SPATIAL_COMPONENT_TYPE_PARENT_EXT - Encje 3 i 4 mają komponenty
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTiXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT. - Encja 5 ma komponenty
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTiXR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
1
1
2
2
3
3
4
4
5
5
Bounded2D
Bounded2D
Tak
Tak
Tak
Tak
Nie
Nie
Nie
Nie
Tak
Tak
Rodzic
Rodzic
Tak
Tak
Tak
Tak
Nie
Nie
Nie
Nie
Nie
Nie
Mesh3D
Mesh3D
Nie
Nie
Nie
Nie
Tak
Tak
Tak
Tak
Tak
Tak
Bounded3D
Bounded3D
Nie
Nie
Nie
Nie
Tak
Tak
Tak
Tak
Nie
Brak Tekst nie jest w formacie SVG – nie można go wyświetlić
Rysunek 20. Przykładowy zrzut
Wywołanie funkcji xrQuerySpatialComponentDataEXT na powyższym zrzucie z wartością XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT wymienioną w warunku zapytania spowoduje zwrócenie do aplikacji jednostek 1, 2 i 5, a aplikacja może dołączyć tablicę XrSpatialBounded2DDataEXT jako część struktury XrSpatialComponentBounded2DListEXT do następnego łańcucha XrSpatialComponentDataQueryResultEXT, aby uzyskać dane bounded2D.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
1
1
2
2
5
5
Bounded2D
Bounded2D
Dane dla identyfikatora jednostki 1
Dane dotyczące podmiotu...
Dane dla identyfikatora encji 2
Dane dotyczące podmiotu...
Dane dla identyfikatora encji 5
Dane dotyczące podmiotu...
entityIds
entityIds
dalej
dalej
XrSpatialComponent DataQueryResultEXT
XrSpatialComponent Dat...
granice,
granice,
XrSpatialComponent Bounded2DListEXT
XrSpatialComponent Bou... Tekst nie jest w formacie SVG – nie można go wyświetlić
Ilustracja 21. Przykładowy wynik zapytania
Wywołanie funkcji xrQuerySpatialComponentDataEXT na powyższym zrzucie z komponentami XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT i XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT wymienionymi w warunku zapytania spowoduje, że do aplikacji zostaną zwrócone jednostki 3 i 4, a aplikacja może dołączyć tablice XrBoxf i XrSpatialMeshDataEXT w ramach struktur XrSpatialComponentBounded3DListEXT i XrSpatialComponentMesh3DListEXT do następnego łańcucha XrSpatialComponentDataQueryResultEXT, aby uzyskać dane komponentu.
XrSpatialEntityIdEXT
XrSpatialEntityIdEXT
3
3
4
4
Bounded3D
Bounded3D
Dane dla identyfikatora jednostki 3
Dane dotyczące podmiotu...
Dane dla identyfikatora encji 4
Dane dotyczące podmiotu...
Mesh3D
Mesh3D
Dane dla identyfikatora jednostki 3
Dane dotyczące podmiotu...
Dane dla identyfikatora encji 4
Dane dotyczące podmiotu...
entityIds
entityIds
dalej
dalej
XrSpatialComponent DataQueryResultEXT
XrSpatialComponent Da...
granice,
granice,
dalej
dalej
XrSpatialComponent Bounded3DListEXT
XrSpatialComponent Bo...
XrSpatialComponent Mesh3DListEXT
XrSpatialComponent Me...
siatki,
siatki Tekst nie jest w formacie SVG – nie można go wyświetlić
Rysunek 22. Przykładowy wynik zapytania
Struktura XrSpatialComponentDataQueryConditionEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialComponentDataQueryConditionEXT {
XrStructureType type;
const void* next;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
} XrSpatialComponentDataQueryConditionEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur.componentTypeCounttouint32_topisujący liczbę elementów w tablicycomponentTypes.componentTypesto tablica elementów XrSpatialComponentTypeEXT, dla których mają zostać pobrane dane z migawki.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialComponentDataQueryConditionEXT. -
typemusi mieć wartośćXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur . Zobacz też: XrSpatialDiscoveryPersistenceUuidFilterEXT , XrSpatialFilterArchetypeEXT , XrSpatialFilterTrackingStateEXT - Jeśli
componentTypeCountnie jest równe0,componentTypesmusi być wskaźnikiem do tablicycomponentTypeCountprawidłowych wartości XrSpatialComponentTypeEXT.
Struktura XrSpatialComponentDataQueryResultEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialComponentDataQueryResultEXT {
XrStructureType type;
void* next;
uint32_t entityIdCapacityInput;
uint32_t entityIdCountOutput;
XrSpatialEntityIdEXT* entityIds;
uint32_t entityStateCapacityInput;
uint32_t entityStateCountOutput;
XrSpatialEntityTrackingStateEXT* entityStates;
} XrSpatialComponentDataQueryResultEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur.entityIdCapacityInputto pojemność tablicyentityIdslub 0, aby wskazać żądanie pobrania wymaganej pojemności.entityIdCountOutputto liczbaXrSpatialEntityIdEXTwentityIdslub wymagana pojemność w przypadku , gdyentityIdCapacityInputjest niewystarczająca.entityIdsto tablica elementówXrSpatialEntityIdEXT. Może to byćNULL, jeślientityIdCapacityInputwynosi 0.entityStateCapacityInputto pojemność tablicyentityStateslub 0, aby wskazać żądanie pobrania wymaganej pojemności.entityStateCountOutputto liczba elementów XrSpatialEntityTrackingStateEXT wentityStateslub wymagana pojemność w przypadku , gdyentityStateCapacityInputjest niewystarczająca. Ta wartość musi być zawsze taka sama jak wartośćentityIdCountOutput.entityStatesto tablica elementów XrSpatialEntityTrackingStateEXT . Może to byćNULL, jeślientityStateCapacityInputwynosi 0.- Szczegółowy opis pobierania wymaganego rozmiaru
entityIdsznajdziesz w sekcji Parametry rozmiaru bufora.
Aplikacja może używać entityIds z funkcją xrCreateSpatialEntityFromIdEXT do tworzenia uchwytów XrSpatialEntityEXT dla jednostek, w przypadku których chce otrzymywać regularne aktualizacje. Aplikacja może następnie używać tych uchwytów XrSpatialEntityEXT z funkcją xrCreateSpatialUpdateSnapshotEXT, aby utworzyć zrzut aktualizacji zawierający najnowsze znane dane komponentów dla podanych elementów.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialComponentDataQueryResultEXT. -
typemusi mieć wartośćXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur . Zobacz też: XrSpatialComponentAnchorListEXT , XrSpatialComponentAnnotationQuadListANDROID , XrSpatialComponentBounded2DListEXT , XrSpatialComponentBounded3DListEXT , XrSpatialComponentConfidenceListANDROIDSYS , XrSpatialComponentImage2DListEXT , XrSpatialComponentKeyboardSemanticLabelListEXT , XrSpatialComponentMarkerListEXT , XrSpatialComponentMaterialTypeListANDROIDSYS , XrSpatialComponentMesh2DListEXT , XrSpatialComponentMesh3DListEXT , XrSpatialComponentMesh3DNormalsListEXT , XrSpatialComponentMesh3DTriangleSemanticLabelsListEXT , XrSpatialComponentMesh3DVertexSemanticLabelsListEXT , XrSpatialComponentMouseSemanticLabelListEXT , XrSpatialComponentObjectSemanticLabelListANDROID , XrSpatialComponentObjectSemanticLabelListEXT , XrSpatialComponentOccupancyGridListANDROIDX1 , XrSpatialComponentParentListEXT , XrSpatialComponentPersistenceListEXT , XrSpatialComponentPlaneAlignmentListEXT , XrSpatialComponentPlaneSemanticLabelListEXT , XrSpatialComponentPolygon2DListEXT , XrSpatialComponentRaycastResultListANDROID , XrSpatialComponentRoomEmptinessListANDROIDSYS , XrSpatialComponentRoomListANDROIDSYS , XrSpatialComponentStreetscapeGeometryMetadataListANDROIDX2 , XrSpatialComponentSubsumedByListANDROID - Jeśli
entityIdCapacityInputnie jest równe0,entityIdsmusi być wskaźnikiem do tablicy wartościentityIdCapacityInputXrSpatialEntityIdEXT. - Jeśli
entityStateCapacityInputnie jest równe0,entityStatesmusi być wskaźnikiem do tablicy wartościentityStateCapacityInputXrSpatialEntityTrackingStateEXT.
typedef enum XrSpatialEntityTrackingStateEXT {
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT = 1,
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT = 2,
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT = 3,
XR_SPATIAL_ENTITY_TRACKING_STATE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialEntityTrackingStateEXT;
Wyliczenie XrSpatialEntityTrackingStateEXT zawiera możliwe stany śledzenia jednostki przestrzennej:
Wartości wyliczeniowe mają następujące znaczenia:
Opis typu wyliczeniowego
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT
Środowisko wykonawcze przestało śledzić ten podmiot i nigdy nie wznowi jego śledzenia.
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT
Środowisko wykonawcze wstrzymało śledzenie tego podmiotu, ale może wznowić je w przyszłości.
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT
Środowisko wykonawcze śledzi obecnie ten element, a dane jego komponentów są prawidłowe.
ŚLEDZENIE
WSTRZYMANE
ZATRZYMANO
Ilustracja 23. XrSpatialEntityTrackingStateEXT
- Środowisko wykonawcze może zmienić stan obiektu przestrzennego z
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTnaXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT, jeśli wstrzyma śledzenie tego obiektu, ale będzie miało możliwość wznowienia go w przyszłości. Przykłady sytuacji, w których środowisko wykonawcze może to zrobić, obejmują (ale nie tylko): utratę przez aplikację fokusu wejściowego, zbyt dużą odległość danego obiektu przestrzennego od użytkownika, która uniemożliwia dokładne śledzenie, lub zbyt dużą liczbę śledzonych obiektów, co powoduje, że środowisko wykonawcze chce zmniejszyć koszt śledzenia. XrSpatialEntityTrackingStateEXT pomaga aplikacji odizolować się od różnych zasad śledzenia w poszczególnych środowiskach wykonawczych. - Środowisko wykonawcze może zmienić stan elementu z
XR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTnaXR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTlubXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT. - Środowisko wykonawcze musi zmienić stan obiektu przestrzennego z
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXTlubXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXTnaXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT, jeśli obiekt przestrzenny zostanie utracony i jego śledzenie nigdy nie zostanie przywrócone ani wznowione. Przykładem takiej sytuacji może być utrata śledzenia przez urządzenie, ponowne uruchomienie sesji śledzenia, ale brak możliwości ponownej lokalizacji w środowisku, co powoduje, że wykryte elementy w tej sesji śledzenia są traktowane jako nowe elementy. - Gdy stan śledzenia elementu zostanie ustawiony na
XR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXT, środowisko wykonawcze nie może nigdy zmienić go na żaden inny stan. - Podczas wysyłania zapytania o dane komponentu obiektu przestrzennego za pomocą funkcji xrQuerySpatialComponentDataEXT środowisko wykonawcze musi ustawić prawidłowe dane w zawartości buforów dostarczonych przez aplikację w następnym łańcuchu XrSpatialComponentDataQueryResultEXT , jeśli stan obiektu to
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT. Jeśli stan elementu toXR_SPATIAL_ENTITY_TRACKING_STATE_STOPPED_EXTlubXR_SPATIAL_ENTITY_TRACKING_STATE_PAUSED_EXT, środowisko wykonawcze nie może zmieniać zawartości buforów.
Idiom dwukrotnego wywołania w przypadku danych komponentu
Struktura XrSpatialBufferEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialBufferEXT {
XrSpatialBufferIdEXT bufferId;
XrSpatialBufferTypeEXT bufferType;
} XrSpatialBufferEXT;
Opisy członków
bufferIdXrSpatialBufferIdEXTdanych bufora.bufferTypeto XrSpatialBufferTypeEXT, aby wskazać typ danych wbufferId. Aplikacja może używaćbufferTypedo określania, której funkcji użyć do pobrania rzeczywistych danych z bufora.
Niektóre komponenty przestrzenne mają dane o zmiennej wielkości, dlatego do ich pobrania trzeba użyć idiomu dwukrotnego wywołania. W takich przypadkach struktura danych komponentu przestrzennego udostępnia XrSpatialBufferEXT dla każdego bufora o zmiennej wielkości potrzebnego w danych tego komponentu.
W przypadku tego samego bufferId środowisko wykonawcze musi dostarczać te same dane z jednego zapytania o dane komponentu do drugiego, nawet w przypadku różnych zrzutów. Różne wartości bufferId w wywołaniach zapytań o dane komponentu wskazują aplikacji, że dane tego komponentu mogły ulec zmianie.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialBufferEXT. -
bufferTypemusi być prawidłową wartością XrSpatialBufferTypeEXT.
XR_DEFINE_ATOM(XrSpatialBufferIdEXT)
XrSpatialBufferIdEXT służy do przedstawiania dowolnego rodzaju danych o zmiennej wielkości dla komponentu przestrzennego.
Środowisko wykonawcze musi przechowywać XrSpatialBufferIdEXT i jego dane w pamięci co najmniej przez cały cykl życia obiektu XrSpatialSnapshotEXT, który go zawiera. Środowisko wykonawcze może przechowywać XrSpatialBufferIdEXT i jego dane w pamięci dłużej niż przez cały cykl życia XrSpatialSnapshotEXT, aby zwracać ten sam identyfikator w zrzutach utworzonych później przez aplikację. W przypadku tego samego XrSpatialBufferIdEXT środowisko wykonawcze musi zawsze zwracać te same dane za pomocą odpowiedniej funkcji xrGetSpatialBuffer*.
typedef enum XrSpatialBufferTypeEXT {
XR_SPATIAL_BUFFER_TYPE_UNKNOWN_EXT = 0,
XR_SPATIAL_BUFFER_TYPE_STRING_EXT = 1,
XR_SPATIAL_BUFFER_TYPE_UINT8_EXT = 2,
XR_SPATIAL_BUFFER_TYPE_UINT16_EXT = 3,
XR_SPATIAL_BUFFER_TYPE_UINT32_EXT = 4,
XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT = 5,
XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT = 6,
XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT = 7,
XR_SPATIAL_BUFFER_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialBufferTypeEXT;
Wyliczenie XrSpatialBufferTypeEXT określa różne typy danych bufora reprezentowanego przez XrSpatialBufferIdEXT .
Opisy elementów wyliczenia
XR_SPATIAL_BUFFER_TYPE_STRING_EXT. WartośćXrSpatialBufferIdEXTcan można przekazać do funkcji xrGetSpatialBufferStringEXT, aby pobrać bufor ciągów tekstowych.XR_SPATIAL_BUFFER_TYPE_UINT8_EXT. WartośćXrSpatialBufferIdEXTcan można przekazać do funkcji xrGetSpatialBufferUint8EXT, aby pobrać buforuint8_t.XR_SPATIAL_BUFFER_TYPE_UINT16_EXT. WartośćXrSpatialBufferIdEXTcan można przekazać do funkcji xrGetSpatialBufferUint16EXT, aby pobrać buforuint16_t.XR_SPATIAL_BUFFER_TYPE_UINT32_EXT. WartośćXrSpatialBufferIdEXTcan można przekazać do funkcji xrGetSpatialBufferUint32EXT, aby pobrać buforuint32_t.XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT. WartośćXrSpatialBufferIdEXTcan można przekazać do funkcji xrGetSpatialBufferFloatEXT, aby pobrać buforfloat.XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT. WartośćXrSpatialBufferIdEXTcan można przekazać do funkcji xrGetSpatialBufferVector2fEXT, aby pobrać bufor XrVector2f.XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT. WartośćXrSpatialBufferIdEXTmoże zostać przekazana do funkcji xrGetSpatialBufferVector3fEXT, aby pobrać bufor XrVector3f.
Funkcja xrGetSpatialBufferStringEXT jest zdefiniowana w ten sposób:
XrResult xrGetSpatialBufferStringEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
char* buffer);
Opisy parametrów
snapshotto uchwyt do XrSpatialSnapshotEXT .infozawiera informacje o buforze, do którego można wysyłać zapytania.bufferCapacityInputto pojemność tablicy lub 0, aby wskazać żądanie pobrania wymaganej pojemności.bufferCountOutputto liczba znaków lub wymagana pojemność w przypadku, gdybufferCapacityInputjest niewystarczająca.bufferto tablica elementówchar. Może to byćNULL, jeślibufferCapacityInputwynosi 0.- Szczegółowy opis pobierania wymaganego rozmiaru
bufferznajdziesz w sekcji Parametry rozmiaru bufora.
Aplikacja może pobrać dane z XrSpatialBufferEXT dostarczonego przez komponent, gdzie XrSpatialBufferEXT :: bufferType to XR_SPATIAL_BUFFER_TYPE_STRING_EXT, za pomocą funkcji xrGetSpatialBufferStringEXT .
Środowisko wykonawcze musi zwrócić XR_ERROR_VALIDATION_FAILURE, jeśli wartość XrSpatialBufferTypeEXT dla XrSpatialBufferGetInfoEXT :: bufferId nie jest równa XR_SPATIAL_BUFFER_TYPE_STRING_EXT .
Środowisko wykonawcze musi zwrócić XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT, jeśli XrSpatialBufferGetInfoEXT :: bufferId nie należy do snapshot .
buffer wypełniony przez środowisko wykonawcze musi być ciągiem znaków UTF-8 zakończonym znakiem null.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem funkcji xrGetSpatialBufferStringEXT. -
snapshotmusi być prawidłowym uchwytem XrSpatialSnapshotEXT -
infomusi być wskaźnikiem do prawidłowej struktury XrSpatialBufferGetInfoEXT. -
bufferCountOutputmusi być wskaźnikiem wartościuint32_t. - Jeśli
bufferCapacityInputnie jest równe0,buffermusi być wskaźnikiem do tablicy wartościbufferCapacityInputchar.
Kody zwrotne
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Funkcja xrGetSpatialBufferUint8EXT jest zdefiniowana w ten sposób:
XrResult xrGetSpatialBufferUint8EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint8_t* buffer);
Opisy parametrów
snapshotto uchwyt do XrSpatialSnapshotEXT .infozawiera informacje o buforze, do którego można wysyłać zapytania.bufferCapacityInputto pojemność tablicy lub 0, aby wskazać żądanie pobrania wymaganej pojemności.bufferCountOutputto liczba elementów w tablicybufferlub wymagana pojemność w przypadku, gdybufferCapacityInputjest niewystarczająca.bufferto tablica elementówuint8_t. Może to byćNULL, jeślibufferCapacityInputwynosi 0.- Szczegółowy opis pobierania wymaganego rozmiaru
bufferznajdziesz w sekcji Parametry rozmiaru bufora.
Aplikacja może pobierać dane z obiektu XrSpatialBufferEXT dostarczonego przez komponent, gdzie XrSpatialBufferEXT :: bufferType to XR_SPATIAL_BUFFER_TYPE_UINT8_EXT, za pomocą funkcji xrGetSpatialBufferUint8EXT .
Środowisko wykonawcze musi zwrócić XR_ERROR_VALIDATION_FAILURE, jeśli wartość XrSpatialBufferTypeEXT dla XrSpatialBufferGetInfoEXT :: bufferId nie jest równa XR_SPATIAL_BUFFER_TYPE_UINT8_EXT .
Środowisko wykonawcze musi zwrócić XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT, jeśli XrSpatialBufferGetInfoEXT :: bufferId nie należy do snapshot .
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem funkcji xrGetSpatialBufferUint8EXT. -
snapshotmusi być prawidłowym uchwytem XrSpatialSnapshotEXT -
infomusi być wskaźnikiem do prawidłowej struktury XrSpatialBufferGetInfoEXT. -
bufferCountOutputmusi być wskaźnikiem wartościuint32_t. - Jeśli
bufferCapacityInputnie jest równe0,buffermusi być wskaźnikiem do tablicy wartościbufferCapacityInputuint8_t.
Kody zwrotne
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Funkcja xrGetSpatialBufferUint16EXT jest zdefiniowana w ten sposób:
XrResult xrGetSpatialBufferUint16EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint16_t* buffer);
Opisy parametrów
snapshotto uchwyt do XrSpatialSnapshotEXT .infozawiera informacje o buforze, do którego można wysyłać zapytania.bufferCapacityInputto pojemność tablicy lub 0, aby wskazać żądanie pobrania wymaganej pojemności.bufferCountOutputto liczba elementów w tablicybufferlub wymagana pojemność w przypadku, gdybufferCapacityInputjest niewystarczająca.bufferto tablica elementówuint16_t. Może to byćNULL, jeślibufferCapacityInputwynosi 0.- Szczegółowy opis pobierania wymaganego rozmiaru
bufferznajdziesz w sekcji Parametry rozmiaru bufora.
Aplikacja może pobierać dane z obiektu XrSpatialBufferEXT dostarczonego przez komponent, gdzie XrSpatialBufferEXT :: bufferType to XR_SPATIAL_BUFFER_TYPE_UINT16_EXT, za pomocą funkcji xrGetSpatialBufferUint16EXT .
Środowisko wykonawcze musi zwrócić XR_ERROR_VALIDATION_FAILURE, jeśli wartość XrSpatialBufferTypeEXT dla XrSpatialBufferGetInfoEXT :: bufferId nie jest równa XR_SPATIAL_BUFFER_TYPE_UINT16_EXT .
Środowisko wykonawcze musi zwrócić XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT, jeśli XrSpatialBufferGetInfoEXT :: bufferId nie należy do snapshot .
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem funkcji xrGetSpatialBufferUint16EXT. -
snapshotmusi być prawidłowym uchwytem XrSpatialSnapshotEXT -
infomusi być wskaźnikiem do prawidłowej struktury XrSpatialBufferGetInfoEXT. -
bufferCountOutputmusi być wskaźnikiem wartościuint32_t. - Jeśli
bufferCapacityInputnie jest równe0,buffermusi być wskaźnikiem do tablicy wartościbufferCapacityInputuint16_t.
Kody zwrotne
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Funkcja xrGetSpatialBufferUint32EXT jest zdefiniowana w ten sposób:
XrResult xrGetSpatialBufferUint32EXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
uint32_t* buffer);
Opisy parametrów
snapshotto uchwyt do XrSpatialSnapshotEXT .infozawiera informacje o buforze, do którego można wysyłać zapytania.bufferCapacityInputto pojemność tablicy lub 0, aby wskazać żądanie pobrania wymaganej pojemności.bufferCountOutputto liczba elementów w tablicybufferlub wymagana pojemność w przypadku, gdybufferCapacityInputjest niewystarczająca.bufferto tablica elementówuint32_t. Może to byćNULL, jeślibufferCapacityInputwynosi 0.- Szczegółowy opis pobierania wymaganego rozmiaru
bufferznajdziesz w sekcji Parametry rozmiaru bufora.
Aplikacja może pobierać dane z XrSpatialBufferEXT dostarczonego przez komponent, gdzie XrSpatialBufferEXT :: bufferType to XR_SPATIAL_BUFFER_TYPE_UINT32_EXT, za pomocą funkcji xrGetSpatialBufferUint32EXT .
Środowisko wykonawcze musi zwrócić XR_ERROR_VALIDATION_FAILURE, jeśli wartość XrSpatialBufferTypeEXT dla XrSpatialBufferGetInfoEXT :: bufferId nie jest równa XR_SPATIAL_BUFFER_TYPE_UINT32_EXT .
Środowisko wykonawcze musi zwrócić XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT, jeśli XrSpatialBufferGetInfoEXT :: bufferId nie należy do snapshot .
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem funkcji xrGetSpatialBufferUint32EXT. -
snapshotmusi być prawidłowym uchwytem XrSpatialSnapshotEXT -
infomusi być wskaźnikiem do prawidłowej struktury XrSpatialBufferGetInfoEXT. -
bufferCountOutputmusi być wskaźnikiem wartościuint32_t. - Jeśli
bufferCapacityInputnie jest równe0,buffermusi być wskaźnikiem do tablicy wartościbufferCapacityInputuint32_t.
Kody zwrotne
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Funkcja xrGetSpatialBufferFloatEXT jest zdefiniowana w ten sposób:
XrResult xrGetSpatialBufferFloatEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
float* buffer);
Opisy parametrów
snapshotto uchwyt do XrSpatialSnapshotEXT .infozawiera informacje o buforze, do którego można wysyłać zapytania.bufferCapacityInputto pojemność tablicy lub 0, aby wskazać żądanie pobrania wymaganej pojemności.bufferCountOutputto liczba elementów w tablicybufferlub wymagana pojemność w przypadku, gdybufferCapacityInputjest niewystarczająca.bufferto tablica elementówfloat. Może to byćNULL, jeślibufferCapacityInputwynosi 0.- Szczegółowy opis pobierania wymaganego rozmiaru
bufferznajdziesz w sekcji Parametry rozmiaru bufora.
Aplikacja może pobierać dane z obiektu XrSpatialBufferEXT dostarczonego przez komponent, gdzie XrSpatialBufferEXT :: bufferType to XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT, za pomocą funkcji xrGetSpatialBufferFloatEXT .
Środowisko wykonawcze musi zwrócić XR_ERROR_VALIDATION_FAILURE, jeśli wartość XrSpatialBufferTypeEXT dla XrSpatialBufferGetInfoEXT :: bufferId nie jest równa XR_SPATIAL_BUFFER_TYPE_FLOAT_EXT .
Środowisko wykonawcze musi zwrócić XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT, jeśli XrSpatialBufferGetInfoEXT :: bufferId nie należy do snapshot .
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem funkcji xrGetSpatialBufferFloatEXT. -
snapshotmusi być prawidłowym uchwytem XrSpatialSnapshotEXT -
infomusi być wskaźnikiem do prawidłowej struktury XrSpatialBufferGetInfoEXT. -
bufferCountOutputmusi być wskaźnikiem wartościuint32_t. - Jeśli
bufferCapacityInputnie jest równe0,buffermusi być wskaźnikiem do tablicy wartościbufferCapacityInputfloat.
Kody zwrotne
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Funkcja xrGetSpatialBufferVector2fEXT jest zdefiniowana w ten sposób:
XrResult xrGetSpatialBufferVector2fEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
XrVector2f* buffer);
Opisy parametrów
snapshotto uchwyt do XrSpatialSnapshotEXT .infozawiera informacje o buforze, do którego można wysyłać zapytania.bufferCapacityInputto pojemność tablicy lub 0, aby wskazać żądanie pobrania wymaganej pojemności.bufferCountOutputto liczba elementów w tablicybufferlub wymagana pojemność w przypadku, gdybufferCapacityInputjest niewystarczająca.bufferto tablica typu XrVector2f . Może to byćNULL, jeślibufferCapacityInputwynosi 0.- Szczegółowy opis pobierania wymaganego rozmiaru
bufferznajdziesz w sekcji Parametry rozmiaru bufora.
Aplikacja może pobrać dane z XrSpatialBufferEXT dostarczonego przez komponent, gdzie XrSpatialBufferEXT :: bufferType to XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT, za pomocą funkcji xrGetSpatialBufferVector2fEXT .
Środowisko wykonawcze musi zwrócić XR_ERROR_VALIDATION_FAILURE, jeśli wartość XrSpatialBufferTypeEXT dla XrSpatialBufferGetInfoEXT :: bufferId nie jest równa XR_SPATIAL_BUFFER_TYPE_VECTOR2F_EXT .
Środowisko wykonawcze musi zwrócić XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT, jeśli XrSpatialBufferGetInfoEXT :: bufferId nie należy do snapshot .
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem funkcji xrGetSpatialBufferVector2fEXT. -
snapshotmusi być prawidłowym uchwytem XrSpatialSnapshotEXT -
infomusi być wskaźnikiem do prawidłowej struktury XrSpatialBufferGetInfoEXT. -
bufferCountOutputmusi być wskaźnikiem wartościuint32_t. - Jeśli
bufferCapacityInputnie jest równe0,buffermusi być wskaźnikiem do tablicy strukturbufferCapacityInputXrVector2f.
Kody zwrotne
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Funkcja xrGetSpatialBufferVector3fEXT jest zdefiniowana w ten sposób:
XrResult xrGetSpatialBufferVector3fEXT(
XrSpatialSnapshotEXT snapshot,
const XrSpatialBufferGetInfoEXT* info,
uint32_t bufferCapacityInput,
uint32_t* bufferCountOutput,
XrVector3f* buffer);
Opisy parametrów
snapshotto uchwyt do XrSpatialSnapshotEXT .infozawiera informacje o buforze, do którego można wysyłać zapytania.bufferCapacityInputto pojemność tablicy lub 0, aby wskazać żądanie pobrania wymaganej pojemności.bufferCountOutputto liczba elementów w tablicybufferlub wymagana pojemność w przypadku, gdybufferCapacityInputjest niewystarczająca.bufferto tablica elementów XrVector3f . Może to byćNULL, jeślibufferCapacityInputwynosi 0.- Szczegółowy opis pobierania wymaganego rozmiaru
bufferznajdziesz w sekcji Parametry rozmiaru bufora.
Aplikacja może pobierać dane z obiektu XrSpatialBufferEXT dostarczonego przez komponent, gdzie XrSpatialBufferEXT :: bufferType to XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT, za pomocą funkcji xrGetSpatialBufferVector3fEXT .
Środowisko wykonawcze musi zwrócić XR_ERROR_VALIDATION_FAILURE, jeśli wartość XrSpatialBufferTypeEXT dla XrSpatialBufferGetInfoEXT :: bufferId nie jest równa XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT .
Środowisko wykonawcze musi zwrócić XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXT, jeśli XrSpatialBufferGetInfoEXT :: bufferId nie należy do snapshot .
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem funkcji xrGetSpatialBufferVector3fEXT. -
snapshotmusi być prawidłowym uchwytem XrSpatialSnapshotEXT -
infomusi być wskaźnikiem do prawidłowej struktury XrSpatialBufferGetInfoEXT. -
bufferCountOutputmusi być wskaźnikiem wartościuint32_t. - Jeśli
bufferCapacityInputnie jest równe0,buffermusi być wskaźnikiem do tablicy strukturbufferCapacityInputXrVector3f.
Kody zwrotne
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SIZE_INSUFFICIENTXR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_VALIDATION_FAILURE
Struktura XrSpatialBufferGetInfoEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialBufferGetInfoEXT {
XrStructureType type;
const void* next;
XrSpatialBufferIdEXT bufferId;
} XrSpatialBufferGetInfoEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur.bufferIdXrSpatialBufferIdEXTdla bufora, z którego mają zostać pobrane dane.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem funkcji XrSpatialBufferGetInfoEXT. -
typemusi mieć wartośćXR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur.
#define XR_NULL_SPATIAL_BUFFER_ID_EXT 0
XR_NULL_SPATIAL_BUFFER_ID_EXT to zarezerwowana wartość reprezentująca nieprawidłowy XrSpatialBufferIdEXT . Można go przekazywać do funkcji interfejsu API i z nich zwracać tylko wtedy, gdy jest to wyraźnie dozwolone.
Utwórz zrzut aktualizacji
Funkcja xrCreateSpatialUpdateSnapshotEXT jest zdefiniowana w ten sposób:
XrResult xrCreateSpatialUpdateSnapshotEXT(
XrSpatialContextEXT spatialContext,
const XrSpatialUpdateSnapshotCreateInfoEXT* createInfo,
XrSpatialSnapshotEXT* snapshot);
Opisy parametrów
spatialContextto wcześniej utworzony element XrSpatialContextEXT za pomocą funkcji xrCreateSpatialContextAsyncEXT .createInfoto wskaźnik do struktury XrSpatialUpdateSnapshotCreateInfoEXT .snapshotto wskaźnik wyniku XrSpatialSnapshotEXT .
Aplikacja może używać funkcji xrCreateSpatialUpdateSnapshotEXT do tworzenia zrzutu i pobierania najnowszych danych komponentów dla określonych jednostek znanych środowisku wykonawczemu. Aplikacje mogą podawać uchwyty XrSpatialEntityEXT i typy komponentów, które je interesują, podczas tworzenia zrzutu.
Aplikacja może używać struktury XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes do filtrowania listy komponentów, których dane muszą być uwzględnione w migawce. Jeśli aplikacja udostępnia prawidłową listę typów komponentów przestrzennych w strukturze XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes , środowisko wykonawcze musi uwzględniać w migawce tylko te jednostki przestrzenne, które mają co najmniej jeden z komponentów podanych w strukturze XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes . Poza tym środowisko wykonawcze musi zawierać tylko dane tych komponentów w zrzucie.
Środowisko wykonawcze musi zwrócić XR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXT, jeśli którekolwiek z elementów XrSpatialComponentTypeEXT w strukturze XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes nie są włączone w przypadku funkcji przestrzennych przekazanych do struktury XrSpatialContextCreateInfoEXT :: capabilityConfigs podczas tworzenia struktury spatialContext .
Jeśli aplikacja nie podaje listy typów komponentów przestrzennych w strukturze XrSpatialUpdateSnapshotCreateInfoEXT :: componentTypes , środowisko wykonawcze musi uwzględnić w zrzucie wszystkie jednostki przestrzenne wymienione w strukturze XrSpatialUpdateSnapshotCreateInfoEXT :: entities i musi uwzględnić dane wszystkich włączonych komponentów funkcji skonfigurowanych dla spatialContext .
Środowisko wykonawcze nie może zawierać obiektów przestrzennych, które nie są wymienione w strukturze XrSpatialUpdateSnapshotCreateInfoEXT :: entities w strukturze snapshot .
Aplikacja może tworzyć dowolną liczbę zrzutów, ale musi pamiętać o pamięci przydzielanej do każdego nowego zrzutu i musi usuwać zrzuty, gdy nie są już potrzebne.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem funkcji xrCreateSpatialUpdateSnapshotEXT. -
spatialContextmusi być prawidłowym uchwytem XrSpatialContextEXT. -
createInfomusi być wskaźnikiem do prawidłowej struktury XrSpatialUpdateSnapshotCreateInfoEXT. -
snapshotmusi być wskaźnikiem do uchwytu XrSpatialSnapshotEXT.
Kody zwrotne
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_LIMIT_REACHEDXR_ERROR_OUT_OF_MEMORYXR_ERROR_RUNTIME_FAILUREXR_ERROR_SESSION_LOSTXR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXTXR_ERROR_TIME_INVALIDXR_ERROR_VALIDATION_FAILURE
Struktura XrSpatialUpdateSnapshotCreateInfoEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialUpdateSnapshotCreateInfoEXT {
XrStructureType type;
const void* next;
uint32_t entityCount;
const XrSpatialEntityEXT* entities;
uint32_t componentTypeCount;
const XrSpatialComponentTypeEXT* componentTypes;
XrSpace baseSpace;
XrTime time;
} XrSpatialUpdateSnapshotCreateInfoEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur. W podstawowej specyfikacji OpenXR ani w tym rozszerzeniu nie zdefiniowano takich struktur.entityCounttouint32_topisujący liczbę elementów w tablicyentities.entitiesto tablica obiektów XrSpatialEntityEXT, dla których środowisko wykonawcze musi uwzględnić dane komponentu w zrzucie.componentTypeCounttouint32_topisujący liczbę elementów w tablicycomponentTypes.componentTypesto tablica elementów XrSpatialComponentTypeEXT, dla których środowisko wykonawcze musi uwzględniać dane w zrzucie.baseSpaceto XrSpace, względem którego będą znajdować się wszystkie lokalizacje aktualizacji XrSpatialSnapshotEXT.timetoXrTime, w którym będą znajdować się wszystkie lokalizacje aktualizacji XrSpatialSnapshotEXT.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem struktury XrSpatialUpdateSnapshotCreateInfoEXT. -
typemusi mieć wartośćXR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur. -
entitiesmusi być wskaźnikiem do tablicyentityCountprawidłowych uchwytów XrSpatialEntityEXT. - Jeśli
componentTypeCountnie jest równe0,componentTypesmusi być wskaźnikiem do tablicycomponentTypeCountprawidłowych wartości XrSpatialComponentTypeEXT. -
baseSpacemusi być prawidłowym uchwytem XrSpace. - Parametr
entityCountmusi być większy niż0. - Zarówno
baseSpace, jak i elementyentitiesmuszą zostać utworzone, przydzielone lub pobrane z tej samej XrSession.
Usuwanie zrzutu
Funkcja xrDestroySpatialSnapshotEXT jest zdefiniowana w ten sposób:
XrResult xrDestroySpatialSnapshotEXT(
XrSpatialSnapshotEXT snapshot);
Opisy parametrów
snapshotto XrSpatialSnapshotEXT wcześniej dostarczony przez xrCreateSpatialDiscoverySnapshotCompleteEXT lub xrCreateSpatialUpdateSnapshotEXT .
Aplikacja może wywołać funkcję xrDestroySpatialSnapshotEXT, aby zniszczyć uchwyt XrSpatialSnapshotEXT i powiązane z nim zasoby.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed wywołaniem funkcji xrDestroySpatialSnapshotEXT. -
snapshotmusi być prawidłowym uchwytem XrSpatialSnapshotEXT
Bezpieczeństwo wątków
- Dostęp do
snapshoti wszystkich uchwytów podrzędnych musi być synchronizowany zewnętrznie.
Kody zwrotne
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_RUNTIME_FAILURE
Typowe komponenty
Bounded 2D
Dane komponentu
Struktura XrSpatialBounded2DDataEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialBounded2DDataEXT {
XrPosef center;
XrExtent2Df extents;
} XrSpatialBounded2DDataEXT;
Opisy członków
centerto XrPosef określający geometryczny środek ograniczonego komponentu 2D.extentsto zakresy ograniczonego komponentu 2D wzdłuż osi x (extents.width) i y (extents.height) wyśrodkowane nacenter.
Wartości extents i XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT odnoszą się do rozmiaru jednostki na płaszczyźnie xy układu współrzędnych płaszczyzny. Płaszczyzna o pozycji {0, 0, 0}, obrocie {0, 0, 0, 1} (bez obrotu) i rozmiarze {1, 1} to płaszczyzna o wymiarach 1 m × 1 m wyśrodkowana w punkcie {0, 0, 0}, której wektor normalny przedniej ściany jest skierowany w kierunku +Z w przestrzeni komponentu.
X X Y Y Z Z Height Height Y Y Z Z X X Vertical plane Vertical plane Horizontal Plane Horizontal Plane Width Width Width Width Height Height
Ilustracja 24. Układ współrzędnych komponentu Bounded2D
Uwaga
OpenXR używa płaszczyzny XY, w której wektor normalny to +Z, ale inne interfejsy API mogą używać płaszczyzny XZ, w której wektor normalny to +Y. Płaszczyznę XY można przekształcić w płaszczyznę XZ, obracając ją o –π/2 rad wokół osi +X.
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialBounded2DDataEXT.
Struktura listy komponentów do wysyłania zapytań o dane
Struktura XrSpatialComponentBounded2DListEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialComponentBounded2DListEXT {
XrStructureType type;
void* next;
uint32_t boundCount;
XrSpatialBounded2DDataEXT* bounds;
} XrSpatialComponentBounded2DListEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur. W podstawowej specyfikacji OpenXR ani w tym rozszerzeniu nie zdefiniowano takich struktur.boundCounttouint32_topisujący liczbę elementów w tablicybounds.boundsto tablica elementów XrSpatialBounded2DDataEXT .
Środowisko wykonawcze musi zwracać XR_ERROR_VALIDATION_FAILURE z funkcji xrQuerySpatialComponentDataEXT, jeśli XrSpatialComponentBounded2DListEXT znajduje się w następnym łańcuchu XrSpatialComponentDataQueryResultEXT :: next, ale XrSpatialComponentDataQueryConditionEXT ::componentTypeCount nie jest zerem i XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT nie jest uwzględniony w XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Środowisko wykonawcze musi zwracać XR_ERROR_SIZE_INSUFFICIENT z funkcji xrQuerySpatialComponentDataEXT, jeśli wartość boundCount jest mniejsza niż XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Jeśli xrQuerySpatialComponentDataEXT :: snapshot został utworzony na podstawie xrCreateSpatialDiscoverySnapshotCompleteEXT , środowisko wykonawcze musi udostępnić XrSpatialBounded2DDataEXT :: center w XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace i XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time .
Jeśli xrQuerySpatialComponentDataEXT :: snapshot został utworzony na podstawie xrCreateSpatialUpdateSnapshotEXT , środowisko wykonawcze musi udostępnić XrSpatialBounded2DDataEXT :: center w XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace i XrSpatialUpdateSnapshotCreateInfoEXT :: time .
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialComponentBounded2DListEXT. -
typemusi mieć wartośćXR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur. -
boundsmusi być wskaźnikiem do tablicy strukturboundCountXrSpatialBounded2DDataEXT. - Parametr
boundCountmusi być większy niż0.
Konfiguracja
Jeśli XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT jest wymieniony w XrSpatialCapabilityComponentTypesEXT :: componentTypes dla pewnej funkcji, aplikacja może ją włączyć, dodając wartość wyliczeniową do listy XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Ten komponent nie wymaga żadnej specjalnej konfiguracji, aby można go było uwzględnić w następnym łańcuchu XrSpatialCapabilityConfigurationBaseHeaderEXT .
Ograniczone 3D
Dane komponentu
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT używa do przechowywania danych XrBoxf.
Struktura listy komponentów do wysyłania zapytań o dane
Struktura XrSpatialComponentBounded3DListEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialComponentBounded3DListEXT {
XrStructureType type;
void* next;
uint32_t boundCount;
XrBoxf* bounds;
} XrSpatialComponentBounded3DListEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur. W podstawowej specyfikacji OpenXR ani w tym rozszerzeniu nie zdefiniowano takich struktur.boundCounttouint32_topisujący liczbę elementów w tablicybounds.boundsto tablica typu XrBoxf .
Środowisko wykonawcze musi zwracać XR_ERROR_VALIDATION_FAILURE z funkcji xrQuerySpatialComponentDataEXT, jeśli XrSpatialComponentBounded3DListEXT znajduje się w następnym łańcuchu XrSpatialComponentDataQueryResultEXT :: next, ale XrSpatialComponentDataQueryConditionEXT ::componentTypeCount nie jest zerem i XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT nie jest uwzględniony w XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Środowisko wykonawcze musi zwracać XR_ERROR_SIZE_INSUFFICIENT z funkcji xrQuerySpatialComponentDataEXT, jeśli wartość boundCount jest mniejsza niż XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Jeśli xrQuerySpatialComponentDataEXT :: snapshot został utworzony na podstawie xrCreateSpatialDiscoverySnapshotCompleteEXT , środowisko wykonawcze musi udostępnić XrBoxf :: center w XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: baseSpace w XrCreateSpatialDiscoverySnapshotCompletionInfoEXT :: time .
Jeśli xrQuerySpatialComponentDataEXT :: snapshot został utworzony na podstawie xrCreateSpatialUpdateSnapshotEXT , środowisko wykonawcze musi udostępnić XrBoxf :: center w XrSpatialUpdateSnapshotCreateInfoEXT :: baseSpace w XrSpatialUpdateSnapshotCreateInfoEXT :: time .
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialComponentBounded3DListEXT. -
typemusi mieć wartośćXR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur. -
boundsmusi być wskaźnikiem tablicy strukturboundCountXrBoxf. - Parametr
boundCountmusi być większy niż0.
Konfiguracja
Jeśli w przypadku jakiejś funkcji w wyliczeniu XrSpatialCapabilityComponentTypesEXT :: componentTypes występuje wartość XR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT, aplikacja może ją włączyć, dodając wyliczenie do listy XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Ten komponent nie wymaga żadnej specjalnej konfiguracji, aby można go było uwzględnić w następnym łańcuchu XrSpatialCapabilityConfigurationBaseHeaderEXT .
Rodzic
Dane komponentu
XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT korzysta z XrSpatialEntityIdEXT w przypadku swoich danych.
Struktura listy komponentów do wysyłania zapytań o dane
Struktura XrSpatialComponentParentListEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialComponentParentListEXT {
XrStructureType type;
void* next;
uint32_t parentCount;
XrSpatialEntityIdEXT* parents;
} XrSpatialComponentParentListEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur. W podstawowej specyfikacji OpenXR ani w tym rozszerzeniu nie zdefiniowano takich struktur.parentCounttouint32_topisujący liczbę elementów w tablicyparents.parentsto tablica elementówXrSpatialEntityIdEXT.
Środowisko wykonawcze musi zwracać XR_ERROR_VALIDATION_FAILURE z funkcji xrQuerySpatialComponentDataEXT, jeśli XrSpatialComponentParentListEXT znajduje się w następnym łańcuchu XrSpatialComponentDataQueryResultEXT :: next, ale XrSpatialComponentDataQueryConditionEXT ::componentTypeCount nie jest zerem, a XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT nie jest uwzględniony w XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Środowisko wykonawcze musi zwracać XR_ERROR_SIZE_INSUFFICIENT z funkcji xrQuerySpatialComponentDataEXT, jeśli wartość parentCount jest mniejsza niż XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialComponentParentListEXT. -
typemusi mieć wartośćXR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur. -
parentsmusi być wskaźnikiem tablicy wartościparentCountXrSpatialEntityIdEXT. - Parametr
parentCountmusi być większy niż0.
Konfiguracja
Jeśli w przypadku jakiejś funkcji w wyliczeniu XR_SPATIAL_COMPONENT_TYPE_PARENT_EXT znajduje się element XrSpatialCapabilityComponentTypesEXT :: componentTypes, aplikacja może włączyć tę funkcję, dodając wyliczenie do listy XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents. Ten komponent nie wymaga żadnej specjalnej konfiguracji, aby można go było uwzględnić w następnym łańcuchu XrSpatialCapabilityConfigurationBaseHeaderEXT .
Mesh 3D
Dane komponentu
Struktura XrSpatialMeshDataEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialMeshDataEXT {
XrPosef origin;
XrSpatialBufferEXT vertexBuffer;
XrSpatialBufferEXT indexBuffer;
} XrSpatialMeshDataEXT;
Opisy członków
originto XrPosef określający pochodzenie siatki. Wszystkie wierzchołki siatki muszą być względne w stosunku do tego punktu początkowego.vertexBufferto XrSpatialBufferEXT, który zawiera identyfikator bufora reprezentującego bufor wierzchołków jednostki, do której należy ten komponent. Położenie wierzchołków musi być względne względemorigin.indexBufferto XrSpatialBufferEXT, który zawiera identyfikator bufora reprezentującego tablicę indeksów trójkątów określających indeksy wierzchołków siatki wvertexBuffer. Indeksy trójkątów muszą być zwracane w kolejności przeciwnej do ruchu wskazówek zegara, a 3 indeksy oznaczają 1 trójkąt.
Typ komponentu używający XrSpatialMeshDataEXT musi określać XrSpatialBufferTypeEXT w przypadku vertexBuffer i indexBuffer .
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialMeshDataEXT. -
vertexBuffermusi być prawidłową strukturą XrSpatialBufferEXT -
indexBuffermusi być prawidłową strukturą XrSpatialBufferEXT
Struktura listy komponentów do wysyłania zapytań o dane
Struktura XrSpatialComponentMesh3DListEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialComponentMesh3DListEXT {
XrStructureType type;
void* next;
uint32_t meshCount;
XrSpatialMeshDataEXT* meshes;
} XrSpatialComponentMesh3DListEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur.meshCounttouint32_topisujący liczbę elementów w tablicymeshes.meshesto tablica elementów XrSpatialMeshDataEXT .
Aplikacja może wysyłać zapytania do komponentu siatki 3D jednostek przestrzennych w obiekcie XrSpatialSnapshotEXT, dodając XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT w obiekcie XrSpatialComponentDataQueryConditionEXT :: componentTypes i dodając XrSpatialComponentMesh3DListEXT do następnego łańcucha wskaźników obiektu XrSpatialComponentDataQueryResultEXT .
Środowisko wykonawcze musi zwracać XR_ERROR_VALIDATION_FAILURE z funkcji xrQuerySpatialComponentDataEXT, jeśli XrSpatialComponentMesh3DListEXT znajduje się w następnym łańcuchu XrSpatialComponentDataQueryResultEXT :: next, ale XrSpatialComponentDataQueryConditionEXT ::componentTypeCount nie jest zerem, a XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT nie jest uwzględniony w XrSpatialComponentDataQueryConditionEXT :: componentTypes .
Środowisko wykonawcze musi zwracać XR_ERROR_SIZE_INSUFFICIENT z funkcji xrQuerySpatialComponentDataEXT, jeśli wartość meshCount jest mniejsza niż XrSpatialComponentDataQueryResultEXT :: entityIdCountOutput .
W przypadku struktury XrSpatialMeshDataEXT wypełnionej przez środowisko wykonawcze w tablicy meshes pole XrSpatialBufferEXT :: bufferType dla XrSpatialMeshDataEXT :: vertexBuffer musi mieć wartość XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT, a pole XrSpatialBufferEXT :: bufferType dla XrSpatialMeshDataEXT :: indexBuffer musi mieć wartość XR_SPATIAL_BUFFER_TYPE_UINT32_EXT .
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialComponentMesh3DListEXT. -
typemusi mieć wartośćXR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur. -
meshesmusi być wskaźnikiem do tablicy strukturmeshCountXrSpatialMeshDataEXT. - Parametr
meshCountmusi być większy niż0.
Konfiguracja
Jeśli XR_SPATIAL_COMPONENT_TYPE_MESH_3D_EXT jest wyliczony w XrSpatialCapabilityComponentTypesEXT :: componentTypes dla pewnej funkcji, aplikacja może ją włączyć, dodając wyliczenie do listy XrSpatialCapabilityConfigurationBaseHeaderEXT :: enabledComponents w strukturze pochodnej XrSpatialCapabilityConfigurationBaseHeaderEXT funkcji, która obsługuje ten komponent.
Ten komponent nie wymaga żadnej specjalnej konfiguracji, aby można go było uwzględnić w następnym łańcuchu XrSpatialCapabilityConfigurationBaseHeaderEXT .
Filtry stanu śledzenia
Struktura XrSpatialFilterTrackingStateEXT jest zdefiniowana w ten sposób:
typedef struct XrSpatialFilterTrackingStateEXT {
XrStructureType type;
const void* next;
XrSpatialEntityTrackingStateEXT trackingState;
} XrSpatialFilterTrackingStateEXT;
Opisy członków
typeto XrStructureType tej struktury.nexttoNULLlub wskaźnik do następnej struktury w łańcuchu struktur.trackingStateto XrSpatialEntityTrackingStateEXT, do którego aplikacja chce zastosować filtr.
Aplikacja może użyć XrSpatialFilterTrackingStateEXT w następnym łańcuchu XrSpatialDiscoverySnapshotCreateInfoEXT, aby ograniczyć wykrywanie tylko do tych elementów, których stan śledzenia to trackingState .
Aplikacja może użyć XrSpatialFilterTrackingStateEXT w następnym łańcuchu XrSpatialComponentDataQueryConditionEXT, aby ograniczyć zapytanie o dane komponentu z migawki tylko do podmiotów, których stan śledzenia to trackingState .
Prawidłowe użycie (domyślne)
- Rozszerzenie
XR_EXT_spatial_entitymusi być włączone przed użyciem XrSpatialFilterTrackingStateEXT. -
typemusi mieć wartośćXR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXT -
nextmusi mieć wartośćNULLlub być prawidłowym wskaźnikiem do następnej struktury w łańcuchu struktur. -
trackingStatemusi być prawidłową wartością XrSpatialEntityTrackingStateEXT.
Przykładowy kod
Korzystanie z aplikacji
Aplikacje zwykle używają rozszerzenia obiektu przestrzennego w ten sposób:
- Aplikacja najpierw wylicza możliwości przestrzenne systemu za pomocą funkcji xrEnumerateSpatialCapabilitiesEXT . Następnie sprawdza zwróconą tablicę XrSpatialCapabilityEXT i wylicza komponenty oraz funkcje obsługiwane w przypadku każdej z tych możliwości, używając odpowiednio funkcji xrEnumerateSpatialCapabilityComponentTypesEXT i xrEnumerateSpatialCapabilityFeaturesEXT. Dzięki temu aplikacja ma pełny obraz komponentów, które może włączyć, oraz konfiguracji, które akceptuje.
- Aplikacja tworzy następnie co najmniej jeden uchwyt XrSpatialContextEXT z określonymi konfiguracjami możliwości przestrzennych, w których konfiguracje włączają i konfigurują konkretną możliwość w kontekście przestrzennym oraz włączają i konfigurują komponenty dla tych możliwości.
- W przypadku każdego elementu XrSpatialContextEXT aplikacja czeka na otrzymanie zdarzeń XrEventDataSpatialDiscoveryRecommendedEXT dla tego elementu XrSpatialContextEXT , zanim użyje funkcji xrCreateSpatialDiscoverySnapshotAsyncEXT do wykrywania obiektów przestrzennych. Po zakończeniu tej operacji asynchronicznej aplikacja otrzymuje uchwyt XrSpatialSnapshotEXT.
- Aplikacja wysyła zapytanie o jednostki i dane komponentów zawarte w tym elemencie XrSpatialSnapshotEXT za pomocą funkcji xrQuerySpatialComponentDataEXT . Aplikacja odczytuje najnowsze dane komponentów z elementów zapytania ze struktur dołączonych do następnego łańcucha XrSpatialComponentDataQueryResultEXT, jeśli stan elementu to
XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT. - Jeśli aplikacja zidentyfikuje konkretne obiekty jako interesujące i chce otrzymywać o nich aktualizacje, tworzy dla nich uchwyty XrSpatialEntityEXT za pomocą funkcji xrCreateSpatialEntityFromIdEXT . Aplikacja otrzymuje aktualizacje takich interesujących jednostek za pomocą funkcji xrCreateSpatialUpdateSnapshotEXT i używa tej samej funkcji xrQuerySpatialComponentDataEXT na nowo utworzonym obiekcie XrSpatialSnapshotEXT, aby uzyskać najnowsze dane komponentów dla tych jednostek.
Odkrywanie obiektów przestrzennych i wykonywanie zapytań dotyczących danych komponentów
Poniższy przykładowy kod pokazuje, jak wykrywać encje przestrzenne dla zapytania o możliwość „Foo” i wykonywać zapytania o dane komponentów.
/****************************/
/* Capability definition */
/****************************/
// Foo capability has the following components -
// - XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT
#define XR_SPATIAL_CAPABILITY_FOO ((XrSpatialCapabilityEXT)1000740000U)
#define XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_FOO_EXT ((XrStructureType)1000740000U)
// Derives from XrSpatialCapabilityConfigurationBaseHeaderEXT
typedef struct XrSpatialCapabilityConfigurationFooEXT {
XrStructureType type;
const void* XR_MAY_ALIAS next;
XrSpatialCapabilityEXT capability;
uint32_t enabledComponentCount;
const XrSpatialComponentTypeEXT* enabledComponents;
} XrSpatialCapabilityConfigurationFooEXT;
/******************************/
/* End capability definition */
/******************************/
auto waitUntilReady = [](XrFutureEXT future) {
XrFuturePollInfoEXT pollInfo{XR_TYPE_FUTURE_POLL_INFO_EXT};
XrFuturePollResultEXT pollResult{XR_TYPE_FUTURE_POLL_RESULT_EXT};
pollInfo.future = future;
do {
// sleep(1);
CHK_XR(xrPollFutureEXT(instance, &pollInfo, &pollResult));
} while (pollResult.state != XR_FUTURE_STATE_READY_EXT);
};
// Create a spatial spatial context
XrSpatialContextEXT spatialContext{};
{
const std::array<XrSpatialComponentTypeEXT, 1> enabledComponents = {
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT,
};
// Configure Foo capability for the spatial context
XrSpatialCapabilityConfigurationFooEXT fooConfig{XR_TYPE_SPATIAL_CAPABILITY_CONFIGURATION_FOO_EXT};
fooConfig.capability = XR_SPATIAL_CAPABILITY_FOO;
fooConfig.enabledComponentCount = enabledComponents.size();
fooConfig.enabledComponents = enabledComponents.data();
std::vector<XrSpatialCapabilityConfigurationBaseHeaderEXT*> capabilityConfigs;
capabilityConfigs.push_back(reinterpret_cast<XrSpatialCapabilityConfigurationBaseHeaderEXT*>(&fooConfig));
XrSpatialContextCreateInfoEXT spatialContextCreateInfo{XR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXT};
spatialContextCreateInfo.capabilityConfigCount = capabilityConfigs.size();
spatialContextCreateInfo.capabilityConfigs = capabilityConfigs.data();
XrFutureEXT createContextFuture;
CHK_XR(xrCreateSpatialContextAsyncEXT(session, &spatialContextCreateInfo, &createContextFuture));
waitUntilReady(createContextFuture);
XrCreateSpatialContextCompletionEXT completion{XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXT};
CHK_XR(xrCreateSpatialContextCompleteEXT(session, createContextFuture, &completion));
if (completion.futureResult != XR_SUCCESS) {
return;
}
spatialContext = completion.spatialContext;
}
auto discoverSpatialEntities = [&](XrSpatialContextEXT spatialContext, XrTime time) {
// 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{XR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXT};
snapshotCreateInfo.componentTypeCount = snapshotComponents.size();
snapshotCreateInfo.componentTypes = snapshotComponents.data();
XrFutureEXT future = XR_NULL_FUTURE_EXT;
CHK_XR(xrCreateSpatialDiscoverySnapshotAsyncEXT(spatialContext, &snapshotCreateInfo, &future));
waitUntilReady(future);
XrCreateSpatialDiscoverySnapshotCompletionInfoEXT completionInfo{XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXT};
completionInfo.baseSpace = localSpace;
completionInfo.time = time;
completionInfo.future = future;
XrCreateSpatialDiscoverySnapshotCompletionEXT completion{XR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXT};
CHK_XR(xrCreateSpatialDiscoverySnapshotCompleteEXT(spatialContext, &completionInfo, &completion));
if (completion.futureResult == XR_SUCCESS) {
// Query for the bounded2d component data
XrSpatialComponentTypeEXT componentToQuery = XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT;
XrSpatialComponentDataQueryConditionEXT queryCond{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT};
queryCond.componentTypes = &componentToQuery;
XrSpatialComponentDataQueryResultEXT queryResult{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT};
queryResult.entityIdCapacityInput = 0;
queryResult.entityIds = nullptr;
queryResult.entityStateCapacityInput = 0;
queryResult.entityStates = nullptr;
CHK_XR(xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond, &queryResult));
std::vector<XrSpatialEntityIdEXT> entityIds(queryResult.entityIdCountOutput);
std::vector<XrSpatialEntityTrackingStateEXT> entityStates(queryResult.entityStateCountOutput);
queryResult.entityIdCapacityInput = entityIds.size();
queryResult.entityIds = entityIds.data();
queryResult.entityStateCapacityInput = entityStates.size();
queryResult.entityStates = entityStates.data();
std::vector<XrSpatialBounded2DDataEXT> bounded2d(queryResult.entityIdCountOutput);
XrSpatialComponentBounded2DListEXT boundsList{XR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXT};
boundsList.boundCount = bounded2d.size();
boundsList.bounds = bounded2d.data();
queryResult.next = &boundsList;
CHK_XR(xrQuerySpatialComponentDataEXT(completion.snapshot, &queryCond, &queryResult));
for (int32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
if (entityStates[i] == XR_SPATIAL_ENTITY_TRACKING_STATE_TRACKING_EXT) {
// 2D extents for entity entityIds[i] is bounded2d[i].extents.
}
}
CHK_XR(xrDestroySpatialSnapshotEXT(completion.snapshot));
}
};
while (1) {
// ...
// For every frame in frame loop
// ...
XrFrameState frameState; // previously returned from xrWaitFrame
const XrTime time = frameState.predictedDisplayTime;
// Poll for the XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT event
XrEventDataBuffer event = {XR_TYPE_EVENT_DATA_BUFFER};
XrResult result = xrPollEvent(instance, &event);
if (result == XR_SUCCESS) {
switch (event.type) {
case XR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXT: {
const XrEventDataSpatialDiscoveryRecommendedEXT& eventdata =
*reinterpret_cast<XrEventDataSpatialDiscoveryRecommendedEXT*>(&event);
// Discover spatial entities for the context that we received the "discovery
// recommended" event for.
discoverSpatialEntities(eventdata.spatialContext, time);
break;
}
}
}
// ...
// Finish frame loop
// ...
}
CHK_XR(xrDestroySpatialContextEXT(spatialContext));
Wykonywanie zapytań o dane bufora
Poniższy przykładowy kod pokazuje, jak uzyskać dane komponentu, który udostępnia XrSpatialBufferEXT .
/****************************/
/* Component definition */
/****************************/
// Foo component that provides an XrVector3f buffer
#define XR_SPATIAL_COMPONENT_TYPE_FOO_EXT ((XrSpatialComponentTypeEXT)1000740000U)
#define XR_TYPE_SPATIAL_COMPONENT_FOO_LIST_EXT ((XrStructureType)1000740000U)
// XrSpatialComponentFooListEXT extends XrSpatialComponentDataQueryResultEXT
typedef struct XrSpatialComponentFooListEXT {
XrStructureType type;
void* XR_MAY_ALIAS next;
uint32_t fooCount;
XrSpatialBufferEXT* foo;
} XrSpatialComponentFooListEXT;
/******************************/
/* End Component definition */
/******************************/
// Query for the foo component data
XrSpatialComponentTypeEXT componentToQuery = XR_SPATIAL_COMPONENT_TYPE_FOO_EXT;
XrSpatialComponentDataQueryConditionEXT queryCond{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXT};
queryCond.componentTypeCount = 1;
queryCond.componentTypes = &componentToQuery;
XrSpatialComponentDataQueryResultEXT queryResult{XR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXT};
CHK_XR(xrQuerySpatialComponentDataEXT(snapshot, &queryCond, &queryResult));
std::vector<XrSpatialEntityIdEXT> entityIds(queryResult.entityIdCountOutput);
queryResult.entityIdCapacityInput = entityIds.size();
queryResult.entityIds = entityIds.data();
std::vector<XrSpatialBufferEXT> fooBuffers(queryResult.entityIdCountOutput);
XrSpatialComponentFooListEXT fooList{XR_TYPE_SPATIAL_COMPONENT_FOO_LIST_EXT};
fooList.fooCount = fooBuffers.size();
fooList.foo = fooBuffers.data();
queryResult.next = &fooList;
CHK_XR(xrQuerySpatialComponentDataEXT(snapshot, &queryCond, &queryResult));
for (int32_t i = 0; i < queryResult.entityIdCountOutput; ++i) {
// foo component data for entity entityIds[i]
if (fooBuffers[i].bufferType == XR_SPATIAL_BUFFER_TYPE_VECTOR3F_EXT) {
XrSpatialBufferGetInfoEXT getInfo{XR_TYPE_SPATIAL_BUFFER_GET_INFO_EXT};
getInfo.bufferId = fooBuffers[i].bufferId;
uint32_t bufferCountOutput;
CHK_XR(xrGetSpatialBufferVector3fEXT(snapshot, &getInfo, 0, &bufferCountOutput, nullptr));
std::vector<XrVector3f> vertexBuffer(bufferCountOutput);
CHK_XR(xrGetSpatialBufferVector3fEXT(snapshot, &getInfo, bufferCountOutput, &bufferCountOutput, vertexBuffer.data()));
// XrVertex3f buffer for entity entityIds[i] is now available in vertexBuffer vector.
}
}
Wytyczne dotyczące rozszerzeń
Jeśli rozszerzenie definiuje nowy typ XrSpatialComponentTypeEXT, który dostarcza dodatkowe dane o obiekcie przestrzennym,
- Rozszerzenie musi też zdefiniować strukturę listy dla tego komponentu, która umożliwia aplikacji przekazywanie do środowiska wykonawczego tablicy do wypełnienia danymi dla każdej z encji przestrzennych spełniających warunki xrQuerySpatialComponentDataEXT ::
queryCondition. Przykłady takich struktur list to XrSpatialComponentParentListEXT i XrSpatialComponentBounded2DListEXT . Jeśli rozmiar danych komponentu jest zmienny i wymaga od aplikacji użycia idiomu dwukrotnego wywołania do wysłania zapytania, dane komponentu powinny udostępniać element XrSpatialBufferEXT dla każdego elementu o zmiennym rozmiarze w strukturze listy i muszą określać element XrSpatialBufferTypeEXT dla każdego bufora. Aplikacja może następnie wysyłać zapytania dotyczące danych bufora za pomocą funkcji zdefiniowanych w artykule Dwukrotne wywołanie w przypadku danych komponentu . Przykładem takiej struktury jest XrSpatialMeshDataEXT, która jest częścią XrSpatialComponentMesh3DListEXT . - Rozszerzenie może też udostępniać struktury, które aplikacja może połączyć z XrSpatialComponentDataQueryConditionEXT ::
next, aby zapewnić dodatkowe filtry zapytania dotyczące danych tego komponentu.
- Rozszerzenie musi też zdefiniować strukturę listy dla tego komponentu, która umożliwia aplikacji przekazywanie do środowiska wykonawczego tablicy do wypełnienia danymi dla każdej z encji przestrzennych spełniających warunki xrQuerySpatialComponentDataEXT ::
Rozszerzenia mogą definiować struktury, które rozszerzają XrSpatialDiscoverySnapshotCreateInfoEXT, aby udostępniać dodatkowe filtry wykrywania. Filtry do tworzenia zrzutu nie mogą wpływać na konfigurację kontekstu przestrzennego. Zamiast tego mają służyć do przekazywania środowisku wykonawczemu wskazówek dotyczących tego, które jednostki i dane mają być uwzględnione w zrzucie w ramach bieżącej konfiguracji kontekstu przestrzennego (a tym samym bieżącej konfiguracji usług bazowych).
Jeśli rozszerzenie definiuje nowy element XrSpatialCapabilityEXT ,
- Powinien też zawierać listę XrSpatialComponentTypeEXT, które środowiska wykonawcze muszą udostępniać w przypadku podmiotów w ramach tej funkcji.
- musi też udostępniać struktury pochodne od XrSpatialCapabilityConfigurationBaseHeaderEXT, które umożliwią konfigurację tej funkcji.
Jeśli rozszerzenie definiuje nową funkcję XrSpatialCapabilityFeatureEXT, musi też zdefiniować odpowiednią strukturę konfiguracji, którą można połączyć z następnym wskaźnikiem XrSpatialCapabilityConfigurationBaseHeaderEXT. Aplikacja może użyć tej struktury, aby włączyć funkcję podczas tworzenia elementu XrSpatialContextEXT.
Rozszerzenie definiujące nową funkcję XrSpatialCapabilityEXT powinno być zgodne z tym szablonem specyfikacji:
- Przegląd
- Obsługa środowiska wykonawczego
- Konfiguracja
- Komponenty gwarantowane
- Przykładowy kod
Rozszerzenie definiujące nowy typ XrSpatialComponentTypeEXT powinno być zgodne z tym szablonem specyfikacji:
- Dane komponentu
- Struktura listy komponentów do wysyłania zapytań o dane
- Konfiguracja
Podczas pisania interfejsu API, który udostępnia aplikacji
XrSpatialBufferIdEXT, musi mu towarzyszyć element XrSpatialBufferTypeEXT, aby poinformować aplikację o typie danych w buforze. Aplikacja może użyć odpowiedniej funkcjixrGetSpatialBuffer*, aby pobrać rzeczywistą zawartość bufora.
Wytyczne dotyczące projektowania i rozszerzania etykiet semantycznych
Chociaż to rozszerzenie nie definiuje żadnego komponentu do przekazywania informacji o etykiecie semantycznej podmiotu, określa zasady projektowania i wytyczne dla wszystkich rozszerzeń, które definiują taki komponent. W poniższym tekście słowa „ powinien ” i „ musi ” odnoszą się do autorów takich funkcji, a nie do implementacji w czasie działania ani do aplikacji korzystającej z interfejsu API.
- Jeśli rozszerzenie definiuje etykiety semantyczne dla dowolnego elementu XrSpatialCapabilityEXT, powinno to zrobić, definiując nowy element XrSpatialComponentTypeEXT, a także nowe wyliczenie z zestawem etykiet („zestaw etykiet semantycznych”), które będą danymi dla tego komponentu.
- Wyliczenie reprezentujące zbiór etykiet semantycznych musi mieć wartość wskazującą, że encja nie jest sklasyfikowana w żadnej z etykiet tego zbioru. Nazwa tego elementu wyliczeniowego musi zawierać ciąg „UNCATEGORIZED”, np.
XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT. Ta wartość informuje aplikacje, że środowisko wykonawcze rozpoznaje ten element, ale istnieją inne zestawy etykiet semantycznych, w których ten element jest sklasyfikowany. - Wyliczenie nowo zdefiniowanego typu XrSpatialComponentTypeEXT w funkcji xrEnumerateSpatialCapabilityComponentTypesEXT oznacza, że środowisko wykonawcze obsługuje zestaw etykiet semantycznych (a tym samym etykiety zdefiniowane w tym zestawie) odpowiadający danemu typowi komponentu.
- Aplikacje wyrażają chęć wykrywania obiektów, które mają etykiety należące do tego zbioru etykiet semantycznych, poprzez umieszczenie odpowiedniego elementu XrSpatialComponentTypeEXT w tablicy XrSpatialCapabilityConfigurationBaseHeaderEXT ::
enabledComponentsstruktury konfiguracji funkcji, dla której wyliczany jest typ komponentu. - Możliwe, że pojedynczy obiekt przestrzenny ma wiele komponentów, z których każdy przypisuje mu etykietę z własnego zestawu etykiet semantycznych. Rozważmy ten przykład z hipotetycznymi zbiorami etykiet semantycznych –
XrSpatialObjectSemanticLabel, które mogą mieć wartości takie jak krzesło, sofa, stół itp.XrSpatialSofaBrand, które może mieć wartości takie jak IKEA, Wayfair itp., orazXrSpatialIkeaSofa, które może zawierać konkretne nazwy modeli sof IKEA. W tym scenariuszu ta sama jednostka sofy ma wszystkie 3 komponenty (etykiety ze wszystkich 3 zestawów etykiet semantycznych), z których każdy zawiera informacje o różnym poziomie szczegółowości. - Jeśli rozszerzenie definiuje nowy typ XrSpatialComponentTypeEXT, który udostępnia nowy zestaw etykiet semantycznych zawierający wiele etykiet oprócz etykiety
UNCATEGORIZED, rozszerzenie powinno rozważyć zdefiniowanie typu XrSpatialCapabilityFeatureEXT, który umożliwia aplikacjom aktywowanie tylko podzbioru etykiet zdefiniowanych w zestawie etykiet semantycznych odpowiadającym danemu typowi komponentu. Ten podzbiór, podany w następnym łańcuchu konfiguracji funkcji, służy jako wskazówka dla środowisk wykonawczych, aby zoptymalizować ścieżki śledzenia i śledzić tylko podany podzbiór. Przykład takiej struktury funkcji znajdziesz poniżej . - Rozszerzenia nie mogą dodawać etykiet do istniejącego wyliczenia zbioru etykiet semantycznych. Zamiast tego muszą zdefiniować nowe wyliczenie, które zawiera równoważne elementy wyliczeniowe o identycznej semantyce i wartościach równych wartościom z innego zbioru, a także nowo dodane elementy wyliczeniowe. Specyfikacja nowo zdefiniowanego zestawu etykiet semantycznych musi też określać mapowanie między starym a nowym zestawem etykiet. Zobacz przykład poniżej .
Przykładowa definicja funkcji przestrzennej dla podzbioru etykiet semantycznych
// New example semantic label set.
typedef enum XrSpatialExampleSemanticLabelEXT {
// ... label values
} XrSpatialExampleSemanticLabelEXT;
/*
typedef enum XrSpatialCapabilityFeatureEXT {
// .. existing values
// new spatial feature value
XR_SPATIAL_CAPABILITY_FEATURE_EXAMPLE_SEMANTIC_LABEL_SUBSET_EXT
// .. existing values
} XrSpatialCapabilityFeatureEXT;
*/
// New spatial feaure configuration structure
typedef struct XrSpatialFeatureExampleSemanticLabelSubsetEXT {
XrStructureType type;
const void* XR_MAY_ALIAS next;
uint32_t semanticLabelCount;
const XrSpatialExampleSemanticLabelEXT* semanticLabels;
} XrSpatialFeatureExampleSemanticLabelSubsetEXT;
Przykład rozszerzenia etykiety semantycznej przestrzennej
typedef enum XrSpatialExamplePlaneSemanticLabelExtensionEXT {
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_UNCATEGORIZED_EXT = 1,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_FLOOR_EXT = 2,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_WALL_EXT = 3,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_CEILING_EXT = 4,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_TABLE_EXT = 5,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_DOOR_EXT = 6,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_WINDOW_EXT = 7,
XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_MAX_ENUM_EXT = 0x7FFFFFFF
} XrSpatialExamplePlaneSemanticLabelExtensionEXT;
Rozważmy powyższy przykład, w którym rozszerzenie definiuje wyliczenie XrSpatialExamplePlaneSemanticLabelExtensionEXT, aby rozszerzyć istniejącą strukturę XrSpatialPlaneSemanticLabelEXT o wartości reprezentujące drzwi i okna. Specyfikacja nowego wyliczenia musi zawierać tekst w tej formie:
For all non-UNCATEGORIZED label enumerants in elink:XrSpatialPlaneSemanticLabelEXT,
the runtime must: return that enumerant if and only if it returns the corresponding
label enumerant from elink:XrSpatialExamplePlaneSemanticLabelExtensionEXT with the same value
i.e.
the ename:XR_SPATIAL_COMPONENT_TYPE_PLANE_SEMANTIC_LABEL_EXT value for that entity must:
correspond with the ename:XR_SPATIAL_COMPONENT_TYPE_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_EXT values
according to the following table -
[width="100%",options="header"]
|====
| XrSpatialExamplePlaneSemanticLabelExtensionEXT | XrSpatialPlaneSemanticLabelEXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_FLOOR_EXT | XR_SPATIAL_PLANE_SEMANTIC_LABEL_FLOOR_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_WALL_EXT | XR_SPATIAL_PLANE_SEMANTIC_LABEL_WALL_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_CEILING_EXT | XR_SPATIAL_PLANE_SEMANTIC_LABEL_CEILING_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_TABLE_EXT | XR_SPATIAL_PLANE_SEMANTIC_LABEL_TABLE_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_DOOR_EXT | XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT
| XR_SPATIAL_EXAMPLE_PLANE_SEMANTIC_LABEL_EXTENSION_WINDOW_EXT | XR_SPATIAL_PLANE_SEMANTIC_LABEL_UNCATEGORIZED_EXT
|====
Nowe makra
Nowe typy podstaw
XrSpatialBufferIdEXTXrSpatialEntityIdEXT
Nowe typy obiektów
Nowe polecenia
- xrCreateSpatialContextAsyncEXT
- xrCreateSpatialContextCompleteEXT
- xrCreateSpatialDiscoverySnapshotAsyncEXT
- xrCreateSpatialDiscoverySnapshotCompleteEXT
- xrCreateSpatialEntityFromIdEXT
- xrCreateSpatialUpdateSnapshotEXT
- xrDestroySpatialContextEXT
- xrDestroySpatialEntityEXT
- xrDestroySpatialSnapshotEXT
- xrEnumerateSpatialCapabilitiesEXT
- xrEnumerateSpatialCapabilityComponentTypesEXT
- xrEnumerateSpatialCapabilityFeaturesEXT
- xrGetSpatialBufferFloatEXT
- xrGetSpatialBufferStringEXT
- xrGetSpatialBufferUint16EXT
- xrGetSpatialBufferUint32EXT
- xrGetSpatialBufferUint8EXT
- xrGetSpatialBufferVector2fEXT
- xrGetSpatialBufferVector3fEXT
- xrQuerySpatialComponentDataEXT
Nowe struktury
- XrCreateSpatialContextCompletionEXT
- XrCreateSpatialDiscoverySnapshotCompletionEXT
- XrCreateSpatialDiscoverySnapshotCompletionInfoEXT
- XrEventDataSpatialDiscoveryRecommendedEXT
- XrSpatialBounded2DDataEXT
- XrSpatialBufferEXT
- XrSpatialBufferGetInfoEXT
- XrSpatialCapabilityComponentTypesEXT
- XrSpatialCapabilityConfigurationBaseHeaderEXT
- XrSpatialComponentDataQueryConditionEXT
- XrSpatialComponentDataQueryResultEXT
- XrSpatialContextCreateInfoEXT
- XrSpatialDiscoverySnapshotCreateInfoEXT
- XrSpatialEntityFromIdCreateInfoEXT
- XrSpatialMeshDataEXT
- XrSpatialUpdateSnapshotCreateInfoEXT
Rozszerzanie XrSpatialComponentDataQueryResultEXT :
Rozszerzanie XrSpatialDiscoverySnapshotCreateInfoEXT , XrSpatialComponentDataQueryConditionEXT :
Nowe wartości w polu enum
- XrSpatialBufferTypeEXT
- XrSpatialCapabilityEXT
- XrSpatialCapabilityFeatureEXT
- XrSpatialComponentTypeEXT
- XrSpatialEntityTrackingStateEXT
Nowe stałe wyliczeniowe
XR_EXT_SPATIAL_ENTITY_EXTENSION_NAMEXR_EXT_spatial_entity_SPEC_VERSIONRozszerzanie XrObjectType :
XR_OBJECT_TYPE_SPATIAL_CONTEXT_EXTXR_OBJECT_TYPE_SPATIAL_ENTITY_EXTXR_OBJECT_TYPE_SPATIAL_SNAPSHOT_EXT
Rozszerzanie XrResult :
XR_ERROR_SPATIAL_BUFFER_ID_INVALID_EXTXR_ERROR_SPATIAL_CAPABILITY_CONFIGURATION_INVALID_EXTXR_ERROR_SPATIAL_CAPABILITY_UNSUPPORTED_EXTXR_ERROR_SPATIAL_COMPONENT_NOT_ENABLED_EXTXR_ERROR_SPATIAL_COMPONENT_UNSUPPORTED_FOR_CAPABILITY_EXTXR_ERROR_SPATIAL_ENTITY_ID_INVALID_EXT
Rozszerzanie XrStructureType :
XR_TYPE_CREATE_SPATIAL_CONTEXT_COMPLETION_EXTXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_EXTXR_TYPE_CREATE_SPATIAL_DISCOVERY_SNAPSHOT_COMPLETION_INFO_EXTXR_TYPE_EVENT_DATA_SPATIAL_DISCOVERY_RECOMMENDED_EXTXR_TYPE_SPATIAL_BUFFER_GET_INFO_EXTXR_TYPE_SPATIAL_CAPABILITY_COMPONENT_TYPES_EXTXR_TYPE_SPATIAL_COMPONENT_BOUNDED_2D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_BOUNDED_3D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_CONDITION_EXTXR_TYPE_SPATIAL_COMPONENT_DATA_QUERY_RESULT_EXTXR_TYPE_SPATIAL_COMPONENT_MESH_3D_LIST_EXTXR_TYPE_SPATIAL_COMPONENT_PARENT_LIST_EXTXR_TYPE_SPATIAL_CONTEXT_CREATE_INFO_EXTXR_TYPE_SPATIAL_DISCOVERY_SNAPSHOT_CREATE_INFO_EXTXR_TYPE_SPATIAL_ENTITY_FROM_ID_CREATE_INFO_EXTXR_TYPE_SPATIAL_FILTER_TRACKING_STATE_EXTXR_TYPE_SPATIAL_UPDATE_SNAPSHOT_CREATE_INFO_EXT
Problemy
Czy pojedynczy podmiot zawsze wywodzi się tylko z jednej funkcji?
- Rozwiązane
- Odpowiedź: Nie. Zależy to całkowicie od środowiska wykonawczego, które na podstawie własnych możliwości śledzenia decyduje, jak przedstawić wykryty element. Specyfikacja nie określa żadnej konkretnej reprezentacji obiektu przestrzennego, z wyjątkiem gwarantowanych komponentów danej funkcji, aby ustalić minimalne oczekiwania. Środowisko wykonawcze może łączyć jednostki wykryte przez różne funkcje i przedstawiać je jako jedną jednostkę z gwarantowanymi komponentami wszystkich funkcji, które pomogły ją zidentyfikować. Przykładem może być wykrywanie stołów zarówno przez funkcję śledzenia płaszczyzny, jak i funkcję śledzenia obiektu. W tym przypadku śledzenie płaszczyzny dostarcza komponent
XR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXTw encji, a śledzenie obiektu dostarcza komponentXR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXT. Niektóre środowiska wykonawcze mogą udostępniać tabelę jako 2 oddzielne elementy, z których każdy ma własny zestaw gwarantowanych komponentów, a niektóre środowiska wykonawcze mogą udostępniać tylko 1 element reprezentujący tabelę, w którym zarównoXR_SPATIAL_COMPONENT_TYPE_BOUNDED_2D_EXT, jak iXR_SPATIAL_COMPONENT_TYPE_BOUNDED_3D_EXTznajdują się w tym samym elemencie. Warto zauważyć, że dana jednostka przestrzenna może mieć co najwyżej 1 komponent dowolnego typu komponentu . Dlatego jeśli dane komponentu wygenerowane przez różne funkcje są sprzeczne w przypadku określonego podmiotu, środowisko wykonawcze musi przedstawić je jako 2 osobne podmioty.
Historia zmian
Wersja 1, 12.04.2024 (Nihav Jain, Google)
- Wstępny opis rozszerzenia