XR_ANDROID_scene_meshing
Name String
XR_ANDROID_scene_meshing
Тип расширения
Instance extension
Registered Extension Number
719
Пересмотр
3
Ratification Status
Not ratified
Extension and Version Dependencies
Дата последнего изменения
2025-05-15
IP Status
No known IP claims.
Авторы
Spencer Quin, Google
Jared Finder, Google
Antonio Fontan, Google
Cairn Overturf, Google
Нихав Джайн, Google
Салар Хан, Google
Sebastian Klose, Google
Jürgen Sturm, Google
Vinny DaSilva, Google
Ricardo Campbell, Google
Обзор
Данное расширение предназначено для предоставления моделей, которые приблизительно представляют физические объекты в окружении пользователя.
Приложения могут использовать это расширение для визуализации сцены и для взаимодействия виртуальных объектов с физическими объектами, например, для предотвращения столкновений.
Данные сетки сцены генерируются средой выполнения и передаются приложению с помощью XrSceneMeshingTrackerANDROID и XrSceneMeshSnapshotANDROID . Приложения могут получить доступ к значениям информации о подсетках сцены через XrSceneSubmeshStateANDROID , возвращаемый функцией xrGetAllSubmeshStatesANDROID . Приложения также могут получить доступ к значениям данных подсеток сцены через XrSceneSubmeshDataANDROID , возвращаемый функцией xrGetSubmeshDataANDROID .
Данные о структуре сцены представляют собой конфиденциальную личную информацию и тесно связаны с неприкосновенностью частной жизни и целостностью персональных данных. Настоятельно рекомендуется, чтобы приложения, которые хранят или передают данные о структуре сцены, всегда запрашивали у пользователя явное и явное согласие на это.
Разрешения
В манифесте Android-приложений должно быть указано разрешение android.permission.SCENE_UNDERSTANDING_FINE. Разрешение android.permission.SCENE_UNDERSTANDING_FINE считается конфиденциальным, поскольку позволяет среде выполнения изучать окружение пользователя.
Для использования этих функций приложение должно запросить разрешение во время выполнения:
- xrCreateSceneMeshingTrackerANDROID
- xrDestroySceneMeshingTrackerANDROID
- xrCreateSceneMeshSnapshotANDROID
- xrDestroySceneMeshSnapshotANDROID
- xrGetAllSubmeshStatesANDROID
- xrGetSubmeshDataANDROID
(protection level: dangerous)
Inspect system capability
Структура XrSystemSceneMeshingPropertiesANDROID определяется следующим образом:
typedef struct XrSystemSceneMeshingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsSceneMeshing;
} XrSystemSceneMeshingPropertiesANDROID;
Описание участников
-
typeis the XrStructureType of this structure. -
nextравноNULLили указателю на следующую структуру в цепочке структур. В ядре OpenXR и в этом расширении такие структуры не определены. -
supportsSceneMeshing— это тип данныхXrBool32, указывающий, поддерживает ли система создание сетки сцены.
Приложение может проверить, способна ли система к построению сетки сцены, связав структуру XrSystemSceneMeshingPropertiesANDROID со структурой XrSystemProperties при вызове функции xrGetSystemProperties .
Если среда выполнения возвращает XR_FALSE для supportsSceneMeshing , система не поддерживает создание сетки сцены и, следовательно, должна вернуть XR_ERROR_FEATURE_UNSUPPORTED из xrCreateSceneMeshingTrackerANDROID . Приложение должно избегать использования функциональности создания сетки сцены, когда supportsSceneMeshing имеет значение XR_FALSE .
Если среда выполнения возвращает XR_TRUE для supportsSceneMeshing , это означает, что система поддерживает создание сетки сцены.
Valid Usage (Implicit)
- Расширение
XR_ANDROID_scene_meshingнеобходимо включить перед использованием XrSystemSceneMeshingPropertiesANDROID. -
typeдолжен бытьXR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID -
nextдолжно бытьNULLили допустимым указателем на следующую структуру в цепочке структур.
Перечисление XrSceneMeshSemanticLabelSetANDROID описывает наборы семантических меток для построения сетки сцены. Каждое значение в этом перечислении представляет собой другое перечисление, содержащее семантические метки. Например, значение XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID представляет собой набор XrSceneMeshSemanticLabelANDROID .
typedef enum XrSceneMeshSemanticLabelSetANDROID {
XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID = 0,
XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID = 1,
XR_SCENE_MESH_SEMANTIC_LABEL_SET_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSceneMeshSemanticLabelSetANDROID;
Значения перечисления имеют следующие значения:
Enum Description
XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID
Этот набор семантических меток представляет собой отсутствие семантических меток.
XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID
Этот набор семантических меток представляет собой XrSceneMeshSemanticLabelANDROID.
Функция xrEnumerateSupportedSemanticLabelSetsANDROID определена следующим образом:
XrResult xrEnumerateSupportedSemanticLabelSetsANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t supportedSemanticLabelSetsInputCapacity,
uint32_t* supportedSemanticLabelSetsOutputCount,
XrSceneMeshSemanticLabelSetANDROID* supportedSemanticLabelSets);
Parameter Descriptions
-
instance— это объект XrInstance, созданный приложением. -
systemId— этоXrSystemId, повторно полученный из xrGetSystem . -
supportedSemanticLabelSetsInputCapacity— это вместимостьsupportedSemanticLabelSets, или 0 для получения требуемой вместимости. -
supportedSemanticLabelSetsOutputCount— это указатель на количество записанныхsupportedSemanticLabelSetsили указатель на требуемую емкость в случае, еслиsupportedSemanticLabelSetsInputCapacityнедостаточно. -
supportedSemanticLabelSets— это указатель на массив XrSceneMeshSemanticLabelSetANDROID . Он может бытьNULLеслиsupportedSemanticLabelSetsInputCapacityравен 0. - Подробное описание получения необходимого размера
supportedSemanticLabelSetsприведено в главе « Параметры размера буфера» .
Приложение может перечислять наборы семантических меток, поддерживаемые системой, используя функцию xrEnumerateSupportedSemanticLabelSetsANDROID .
Каждая система должна как минимум поддерживать XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID , поскольку значение этого перечисления не указывает на наличие набора семантических меток и может использоваться в случае, если приложению не требуется вершинная семантика.
Valid Usage (Implicit)
- Расширение
XR_ANDROID_scene_meshingнеобходимо включить перед вызовом функции xrEnumerateSupportedSemanticLabelSetsANDROID. -
instancemust be a valid XrInstance handle -
supportedSemanticLabelSetsOutputCountдолжен быть указателем на значениеuint32_t - Если
supportedSemanticLabelSetsInputCapacityне равно0,supportedSemanticLabelSetsдолжен быть указателем на массив значенийsupportedSemanticLabelSetsInputCapacityXrSceneMeshSemanticLabelSetANDROID.
Return Codes
-
XR_SUCCESS
-
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_SIZE_INSUFFICIENT -
XR_ERROR_SYSTEM_INVALID -
XR_ERROR_VALIDATION_FAILURE
Create a scene meshing tracker handle
XR_DEFINE_HANDLE(XrSceneMeshingTrackerANDROID)
Дескриптор XrSceneMeshingTrackerANDROID представляет собой трекер сетки сцены, предназначенный для создания сетки сцены и управления связанными ресурсами.
Этот дескриптор можно использовать для создания снимка сетки сцены с помощью функции xrCreateSceneMeshSnapshotANDROID в данном расширении.
Функция xrCreateSceneMeshingTrackerANDROID определена следующим образом:
XrResult xrCreateSceneMeshingTrackerANDROID(
XrSession session,
const XrSceneMeshingTrackerCreateInfoANDROID* createInfo,
XrSceneMeshingTrackerANDROID* tracker);
Parameter Descriptions
-
session— это объект XrSession , в котором будет активен трекер сетки сцены. -
createInfo— это указатель на структуру XrSceneMeshingTrackerCreateInfoANDROID , используемую для описания создаваемого трекера сетки сцены. -
tracker— это возвращаемый дескриптор XrSceneMeshingTrackerANDROID .
Приложение может создать дескриптор XrSceneMeshingTrackerANDROID, используя функцию xrCreateSceneMeshingTrackerANDROID .
Если система не поддерживает создание сетки сцены, среда выполнения должна вернуть XR_ERROR_FEATURE_UNSUPPORTED из функции xrCreateSceneMeshingTrackerANDROID . В этом случае среда выполнения должна вернуть XR_FALSE для XrSystemSceneMeshingPropertiesANDROID :: supportsSceneMeshing при вызове функции xrGetSystemProperties , чтобы приложение могло избежать создания трекера сетки сцены.
Приложение должно использовать только те наборы семантических меток, которые поддерживаются системой в XrSceneMeshingTrackerCreateInfoANDROID :: semanticLabelSet при создании трекера сетки сцены. Если приложение использует неподдерживаемый набор семантических меток вершин сетки сцены, среда выполнения должна вернуть XR_ERROR_FEATURE_UNSUPPORTED из xrCreateSceneMeshingTrackerANDROID .
Приложение может перечислить список поддерживаемых наборов семантических меток с помощью функции xrEnumerateSupportedSemanticLabelSetsANDROID .
Дескриптор xrCreateSceneMeshingTrackerANDROID владеет всеми ресурсами для построения сетки сцены. После завершения построения сетки сцены приложение должно уничтожить дескриптор с помощью функции xrDestroySceneMeshingTrackerANDROID .
Valid Usage (Implicit)
- Расширение
XR_ANDROID_scene_meshingнеобходимо включить перед вызовом функции xrCreateSceneMeshingTrackerANDROID. -
sessionmust be a valid XrSession handle -
createInfoдолжна быть указателем на допустимую структуру XrSceneMeshingTrackerCreateInfoANDROID. -
trackerдолжен быть указателем на дескриптор XrSceneMeshingTrackerANDROID.
Return Codes
-
XR_SUCCESS -
XR_SESSION_LOSS_PENDING
-
XR_ERROR_FEATURE_UNSUPPORTED -
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_LIMIT_REACHED -
XR_ERROR_OUT_OF_MEMORY -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_SESSION_LOST -
XR_ERROR_VALIDATION_FAILURE
Структура XrSceneMeshingTrackerCreateInfoANDROID определяется следующим образом:
typedef struct XrSceneMeshingTrackerCreateInfoANDROID {
XrStructureType type;
const void* next;
XrSceneMeshSemanticLabelSetANDROID semanticLabelSet;
XrBool32 enableNormals;
} XrSceneMeshingTrackerCreateInfoANDROID;
Member Descriptions
-
typeis the XrStructureType of this structure. -
nextравноNULLили указателю на следующую структуру в цепочке структур. В ядре OpenXR и в этом расширении такие структуры не определены. -
semanticLabelSet— это объект XrSceneMeshSemanticLabelSetANDROID , используемый для указания набора семантических меток, применяемых для построения сетки сцены. Если для него установлено значениеXR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID, среда выполнения будет игнорировать поле буфера XrSceneSubmeshDataANDROID ::vertexSemantics. -
enableNormals— это тип данныхXrBool32, используемый для указания того, следует ли включать нормали вершин сетки в буфер сетки сцены при получении данных сетки сцены.
Структура XrSceneMeshingTrackerCreateInfoANDROID описывает информацию, необходимую для создания дескриптора XrSceneMeshingTrackerANDROID .
Valid Usage (Implicit)
- Расширение
XR_ANDROID_scene_meshingнеобходимо включить перед использованием XrSceneMeshingTrackerCreateInfoANDROID. -
typeдолжен бытьXR_TYPE_SCENE_MESHING_TRACKER_CREATE_INFO_ANDROID -
nextдолжно бытьNULLили допустимым указателем на следующую структуру в цепочке структур. -
semanticLabelSetдолжно быть допустимым значением XrSceneMeshSemanticLabelSetANDROID.
Функция xrDestroySceneMeshingTrackerANDROID определена следующим образом:
XrResult xrDestroySceneMeshingTrackerANDROID(
XrSceneMeshingTrackerANDROID tracker);
Parameter Descriptions
-
tracker— это объект XrSceneMeshingTrackerANDROID, ранее созданный с помощью xrCreateSceneMeshingTrackerANDROID .
Функция xrDestroySceneMeshingTrackerANDROID освобождает tracker и базовые ресурсы после завершения работы с сеткой сцены.
Valid Usage (Implicit)
- Расширение
XR_ANDROID_scene_meshingнеобходимо включить перед вызовом функции xrDestroySceneMeshingTrackerANDROID. -
trackerдолжен быть действительным дескриптором XrSceneMeshingTrackerANDROID.
Безопасность резьбы
- Доступ к
trackerи любым дочерним элементам должен осуществляться посредством внешней синхронизации.
Return Codes
-
XR_SUCCESS
-
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_RUNTIME_FAILURE
Create a scene mesh snapshot handle
XR_DEFINE_HANDLE(XrSceneMeshSnapshotANDROID)
Дескриптор XrSceneMeshSnapshotANDROID представляет собой снимок сетки сцены. Этот снимок создается с помощью функции xrCreateSceneMeshSnapshotANDROID , которая делает снимок данных сетки сцены в момент вызова функции.
Этот дескриптор можно использовать для получения информации и данных о подсетках с помощью функций xrGetAllSubmeshStatesANDROID и xrGetSubmeshDataANDROID .
Функция xrCreateSceneMeshSnapshotANDROID определена следующим образом:
XrResult xrCreateSceneMeshSnapshotANDROID(
XrSceneMeshingTrackerANDROID tracker,
const XrSceneMeshSnapshotCreateInfoANDROID* createInfo,
XrSceneMeshSnapshotCreationResultANDROID* outSnapshotCreationResult);
Parameter Descriptions
-
tracker— это дескриптор объекта XrSceneMeshingTrackerANDROID , созданный ранее с помощью функции xrCreateSceneMeshingTrackerANDROID . -
createInfoуказывает на структуру XrSceneMeshSnapshotCreateInfoANDROID , содержащую необходимую информацию для создания снимка сетки сцены. - Объект
outSnapshotCreationResult— это указатель на объект XrSceneMeshSnapshotCreationResultANDROID , который заполняется средой выполнения результатом создания снимка.
Приложение может использовать функцию xrCreateSceneMeshSnapshotANDROID для создания снимка сетки сцены на основе данных трекера сетки сцены. Эта функция возвращает дескриптор XrSceneMeshSnapshotANDROID вместе с XrSceneMeshTrackingStateANDROID, заключенный в структуру XrSceneMeshSnapshotCreationResultANDROID . Дескриптор технически представляет собой снимок данных сетки сцены на момент создания. Этот дескриптор можно использовать для запроса информации и данных сетки сцены с помощью функций xrGetAllSubmeshStatesANDROID и xrGetSubmeshDataANDROID соответственно.
Valid Usage (Implicit)
- Расширение
XR_ANDROID_scene_meshingнеобходимо включить перед вызовом функции xrCreateSceneMeshSnapshotANDROID. -
trackerдолжен быть действительным дескриптором XrSceneMeshingTrackerANDROID. -
createInfoдолжна быть указателем на допустимую структуру XrSceneMeshSnapshotCreateInfoANDROID. -
outSnapshotCreationResultдолжен быть указателем на структуру XrSceneMeshSnapshotCreationResultANDROID.
Return Codes
-
XR_SUCCESS -
XR_SESSION_LOSS_PENDING
-
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_LIMIT_REACHED -
XR_ERROR_OUT_OF_MEMORY -
XR_ERROR_POSE_INVALID -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_SESSION_LOST -
XR_ERROR_TIME_INVALID
Структура XrSceneMeshSnapshotCreateInfoANDROID определяется следующим образом:
typedef struct XrSceneMeshSnapshotCreateInfoANDROID {
XrStructureType type;
const void* next;
XrSpace baseSpace;
XrTime time;
XrBoxf boundingBox;
} XrSceneMeshSnapshotCreateInfoANDROID;
Описание участников
-
typeis the XrStructureType of this structure. -
nextравноNULLили указателю на следующую структуру в цепочке структур. В ядре OpenXR и в этом расширении такие структуры не определены. -
baseSpace— это XrSpace , внутри которого представлена информация о положении подсетки сцены. -
time— это объектXrTime, описывающий время обработки или отображения сетки сцены, обычно это XrFrameState ::predictedDisplayTime. -
boundingBox— это объект XrBoxf , описывающий ограничивающий прямоугольник, внутри которого будет получена сетка сцены.
Структура XrSceneMeshSnapshotCreateInfoANDROID описывает информацию, необходимую для создания дескриптора XrSceneMeshSnapshotANDROID.
Valid Usage (Implicit)
- Расширение
XR_ANDROID_scene_meshingнеобходимо включить перед использованием XrSceneMeshSnapshotCreateInfoANDROID. -
typeдолжен бытьXR_TYPE_SCENE_MESH_SNAPSHOT_CREATE_INFO_ANDROID -
nextдолжно бытьNULLили допустимым указателем на следующую структуру в цепочке структур. -
baseSpacemust be a valid XrSpace handle
Структура XrSceneMeshSnapshotCreationResultANDROID определяется следующим образом:
typedef struct XrSceneMeshSnapshotCreationResultANDROID {
XrStructureType type;
const void* next;
XrSceneMeshSnapshotANDROID snapshot;
XrSceneMeshTrackingStateANDROID trackingState;
} XrSceneMeshSnapshotCreationResultANDROID;
Member Descriptions
-
typeis the XrStructureType of this structure. -
nextравноNULLили указателю на следующую структуру в цепочке структур. В ядре OpenXR и в этом расширении такие структуры не определены. -
snapshot— это дескриптор XrSceneMeshSnapshotANDROID, созданный средой выполнения. -
trackingState— это объект XrSceneMeshTrackingStateANDROID , описывающий состояние трекера сетки сцены на момент создания снимка.
Структура XrSceneMeshSnapshotCreationResultANDROID хранит результат создания снимка сетки сцены, возвращаемый функцией xrCreateSceneMeshSnapshotANDROID .
Valid Usage (Implicit)
- Расширение
XR_ANDROID_scene_meshingнеобходимо включить перед использованием XrSceneMeshSnapshotCreationResultANDROID. -
typeдолжен бытьXR_TYPE_SCENE_MESH_SNAPSHOT_CREATION_RESULT_ANDROID -
nextдолжно бытьNULLили допустимым указателем на следующую структуру в цепочке структур. -
snapshotдолжен быть допустимым дескриптором XrSceneMeshSnapshotANDROID. -
trackingStateдолжен быть допустимым значением XrSceneMeshTrackingStateANDROID.
Перечисление XrSceneMeshTrackingStateANDROID описывает состояние отслеживания для трекера сетки сцены. Каждое значение в этом перечислении представляет собой состояние трекера сетки сцены.
typedef enum XrSceneMeshTrackingStateANDROID {
XR_SCENE_MESH_TRACKING_STATE_INITIALIZING_ANDROID = 0,
XR_SCENE_MESH_TRACKING_STATE_TRACKING_ANDROID = 1,
XR_SCENE_MESH_TRACKING_STATE_WAITING_ANDROID = 2,
XR_SCENE_MESH_TRACKING_STATE_ERROR_ANDROID = 3,
XR_SCENE_MESH_TRACKING_STATE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSceneMeshTrackingStateANDROID;
Значения перечисления имеют следующие значения:
Enum Description
XR_SCENE_MESH_TRACKING_STATE_INITIALIZING_ANDROID
Система отслеживания пока не готова предоставлять данные о сетке.
XR_SCENE_MESH_TRACKING_STATE_TRACKING_ANDROID
The tracker is actively tracking.
XR_SCENE_MESH_TRACKING_STATE_WAITING_ANDROID
После последнего обновления сетки трекер ожидает корректных измерений для интеграции.
XR_SCENE_MESH_TRACKING_STATE_ERROR_ANDROID
Трекер не получил достоверных измерений за несколько циклов и находится в состоянии ошибки.
Это состояние служит лишь дополнительной информацией для приложения. При отсутствии других источников ошибок среда выполнения должна продолжать позволять приложению создавать снимки и получать из них данные независимо от текущего состояния XrSceneMeshTrackingStateANDROID трекера. Если состояние не равно XR_SCENE_MESH_TRACKING_STATE_TRACKING_ANDROID , снимки могут быть устаревшими или пустыми.
Получение данных сетки сцены из снимка сетки сцены.
Функция xrGetAllSubmeshStatesANDROID определена следующим образом:
XrResult xrGetAllSubmeshStatesANDROID(
XrSceneMeshSnapshotANDROID snapshot,
uint32_t submeshStateCapacityInput,
uint32_t* submeshStateCountOutput,
XrSceneSubmeshStateANDROID* submeshStates);
Parameter Descriptions
-
snapshot— это дескриптор XrSceneMeshSnapshotANDROID , созданный ранее с помощью xrCreateSceneMeshSnapshotANDROID . -
submeshStateCapacityInput— это вместимостьsubmeshStates, или 0 для получения требуемой вместимости. -
submeshStateCountOutput— это указатель на количество записанныхsubmeshStates) или указатель на требуемую емкость в случае, еслиsubmeshStateCapacityInputнедостаточен. -
submeshStates— это указатель на массив структур XrSceneSubmeshStateANDROID , в который среда выполнения будет выводить состояние всех подсеток в сетке сцены. Он может бытьNULLеслиsubmeshStateCapacityInputравен 0. - Подробное описание получения необходимого размера
submeshStatesсм. в главе « Параметры размера буфера» .
Приложение может использовать функцию xrGetAllSubmeshStatesANDROID для получения состояния всех подсеток в сетке сцены. Эта функция содержит основную информацию, позволяющую приложению выбирать подсетки, для которых ему нужны данные.
Valid Usage (Implicit)
- Расширение
XR_ANDROID_scene_meshingнеобходимо включить перед вызовом функции xrGetAllSubmeshStatesANDROID. -
snapshotдолжен быть допустимым дескриптором XrSceneMeshSnapshotANDROID. -
submeshStateCountOutputдолжен быть указателем на значениеuint32_t - Если
submeshStateCapacityInputне равно0,submeshStatesдолжен быть указателем на массив структур XrSceneSubmeshStateANDROID, содержащихsubmeshStateCapacityInput.
Return Codes
-
XR_SUCCESS -
XR_SESSION_LOSS_PENDING
-
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_SESSION_LOST -
XR_ERROR_SIZE_INSUFFICIENT -
XR_ERROR_VALIDATION_FAILURE
Структура XrSceneSubmeshStateANDROID определяется следующим образом:
typedef struct XrSceneSubmeshStateANDROID {
XrStructureType type;
void* next;
XrUuid submeshId;
XrTime lastUpdatedTime;
XrPosef submeshPoseInBaseSpace;
XrExtent3Df bounds;
} XrSceneSubmeshStateANDROID;
Описание участников
-
typeis the XrStructureType of this structure. -
nextравноNULLили указателю на следующую структуру в цепочке структур. В ядре OpenXR и в этом расширении такие структуры не определены. -
submeshIdis an XrUuid identifying the submesh. -
lastUpdatedTime— это объектXrTime, представляющий время последнего обновления подсетки. -
submeshPoseInBaseSpace— это объект XrPosef , представляющий позу подсетки в базовом пространстве, используемом для создания снимка сетки сцены. Поза также является центром ограничивающего параллелепипеда подсетки. -
bounds— это объект XrExtent3Df , описывающий размеры ограничивающего параллелепипеда, который охватывает подсетку. Эти границы определены в базовом пространстве, которое использовалось для создания дескриптора сетки сцены.
Среда выполнения прилагает все усилия для сопоставления submeshId с областью физического пространства, занимаемой подсеткой. Среда выполнения может в любой момент потерять это сопоставление и присвоить новый UUID любому подмножеству обнаруженных подсеток. В частности, среда выполнения не обязана повторно использовать одни и те же UUID для одних и тех же сеток в последующих экземплярах приложения.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_scene_meshingнеобходимо включить перед использованием XrSceneSubmeshStateANDROID. -
typeдолжен бытьXR_TYPE_SCENE_SUBMESH_STATE_ANDROID -
nextдолжно бытьNULLили допустимым указателем на следующую структуру в цепочке структур.
Функция xrGetSubmeshDataANDROID определена следующим образом:
XrResult xrGetSubmeshDataANDROID(
XrSceneMeshSnapshotANDROID snapshot,
uint32_t submeshDataCount,
XrSceneSubmeshDataANDROID* inoutSubmeshData);
Parameter Descriptions
-
snapshot— это дескриптор XrSceneMeshSnapshotANDROID , созданный ранее с помощью xrCreateSceneMeshSnapshotANDROID . -
submeshDataCount— это длинаinoutSubmeshData. -
inoutSubmeshData— это выделенный приложением массив XrSceneSubmeshDataANDROID , в котором среда выполнения заполняет каждый элемент данными сетки, связанными с идентификатором подсетки, переданным в XrSceneSubmeshDataANDROID ::submeshId.
Приложение может использовать функцию xrGetSubmeshDataANDROID для получения пакетов подсеток или всех подсеток одновременно, передав список XrSceneSubmeshDataANDROID, в каждом из которых XrSceneSubmeshDataANDROID :: submeshId установлен на соответствующий идентификатор подсетки, которую необходимо получить.
Идентификатор подсетки XrSceneSubmeshDataANDROID :: submeshId должен быть уникальным для каждого элемента в inoutSubmeshData и доступным для получения с помощью xrGetAllSubmeshStatesANDROID для одного и того же snapshot . Если идентификатор подсетки недействителен или несколько элементов в inoutSubmeshData имеют одинаковый идентификатор подсетки, среда выполнения должна вернуть XR_ERROR_VALIDATION_FAILURE .
submeshDataCount должно быть равно или меньше значения, возвращаемого функцией xrGetAllSubmeshStatesANDROID :: submeshStateCountOutput , в противном случае среда выполнения должна вернуть XR_ERROR_VALIDATION_FAILURE .
Это можно использовать в двухвызововой схеме для запроса количества вершин и индексов для всех выбранных подсеток.
Valid Usage (Implicit)
- Расширение
XR_ANDROID_scene_meshingнеобходимо включить перед вызовом функции xrGetSubmeshDataANDROID. snapshotдолжен быть допустимым дескриптором XrSceneMeshSnapshotANDROID.-
inoutSubmeshDataдолжен быть указателем на массив структурsubmeshDataCountXrSceneSubmeshDataANDROID. - Параметр
submeshDataCountдолжен быть больше0
Return Codes
-
XR_SUCCESS -
XR_SESSION_LOSS_PENDING
-
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_INSTANCE_LOST -
XR_ERROR_RUNTIME_FAILURE -
XR_ERROR_SESSION_LOST -
XR_ERROR_SIZE_INSUFFICIENT -
XR_ERROR_VALIDATION_FAILURE
Структура XrSceneSubmeshDataANDROID определяется следующим образом:
typedef struct XrSceneSubmeshDataANDROID {
XrStructureType type;
const void* next;
XrUuid submeshId;
uint32_t vertexCapacityInput;
uint32_t vertexCountOutput;
XrVector3f* vertexPositions;
XrVector3f* vertexNormals;
uint8_t* vertexSemantics;
uint32_t indexCapacityInput;
uint32_t indexCountOutput;
uint32_t* indices;
} XrSceneSubmeshDataANDROID;
Member Descriptions
-
typeis the XrStructureType of this structure. -
nextравноNULLили указателю на следующую структуру в цепочке структур. В ядре OpenXR и в этом расширении такие структуры не определены. -
submeshIdis an XrUuid identifying the submesh. -
vertexCapacityInput— это значение, равное емкостиvertexPositions,vertexNormalsиvertexSemantics, или 0 для получения требуемой емкости. -
vertexCountOutput— это указатель на количество записанных значенийvertexPositions,vertexNormalsиvertexSemantics, или указатель на требуемую емкость в случае, еслиvertexCapacityInputнедостаточен. -
vertexPositions— это массив XrVector3f , в который среда выполнения будет выводить координаты вершин подсетки. -
vertexNormals— это массив XrVector3f , в который среда выполнения будет выводить нормали вершин подсетки. Это поле может быть оставленоNULLесли приложение создало трекер с отключенными нормалями. -
vertexSemantics— это массив типовuint8_t, в который среда выполнения будет выводить семантику вершин подсетки. Это поле может быть оставленоNULLесли приложение создало трекер с установленной меткой семантикиXR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID. -
indexCapacityInput— это емкостьindices, или 0 для получения требуемой емкости. -
indexCountOutput— это указатель на количество записанныхindicesили указатель на требуемую емкость в случае, еслиvertexCapacityInputнедостаточен. -
indices— это массив типовuint32_t, в который среда выполнения будет выводить индексы подсетки. - Подробное описание получения необходимых
vertexPositions,vertexNormals,vertexSemanticsиindicesсм. в главе « Параметры размера буфера» .
Valid Usage (Implicit)
- Расширение
XR_ANDROID_scene_meshingнеобходимо включить перед использованием XrSceneSubmeshDataANDROID. -
typemust beXR_TYPE_SCENE_SUBMESH_DATA_ANDROID -
nextдолжно бытьNULLили допустимым указателем на следующую структуру в цепочке структур. - Если
vertexCapacityInputне равно0,vertexPositionsдолжен быть указателем на массив структур XrVector3f,vertexCapacityInput. - Если
vertexCapacityInputне равно0,vertexNormalsдолжен быть указателем на массив структур XrVector3f,vertexCapacityInput. - Если
vertexCapacityInputне равно0,vertexSemanticsдолжен быть указателем на массив значенийuint8_t, содержащихvertexCapacityInput. - Если
indexCapacityInputне равен0,indicesдолжен быть указателем на массив значений типаuint32_t, содержащихindexCapacityInput.
Перечисление XrSceneMeshSemanticLabelANDROID представляет собой набор семантических меток по умолчанию, которые можно использовать для маркировки вершин сетки, описывающих, на какой физической поверхности среды находится вершина сетки. Этот набор перечислений представлен значением XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID в XrSceneMeshSemanticLabelSetANDROID .
typedef enum XrSceneMeshSemanticLabelANDROID {
XR_SCENE_MESH_SEMANTIC_LABEL_OTHER_ANDROID = 0,
XR_SCENE_MESH_SEMANTIC_LABEL_FLOOR_ANDROID = 1,
XR_SCENE_MESH_SEMANTIC_LABEL_CEILING_ANDROID = 2,
XR_SCENE_MESH_SEMANTIC_LABEL_WALL_ANDROID = 3,
XR_SCENE_MESH_SEMANTIC_LABEL_TABLE_ANDROID = 4,
XR_SCENE_MESH_SEMANTIC_LABEL_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrSceneMeshSemanticLabelANDROID;
Перечисления имеют следующие значения:
Enum Description
XR_SCENE_MESH_SEMANTIC_LABEL_OTHER_ANDROID
Эта семантическая метка указывает на то, что соответствующий элемент сетки представляет собой неизвестный объект.
XR_SCENE_MESH_SEMANTIC_LABEL_FLOOR_ANDROID
Эта семантическая метка указывает на то, что соответствующий элемент сетки представляет собой пол.
XR_SCENE_MESH_SEMANTIC_LABEL_CEILING_ANDROID
Эта семантическая метка указывает на то, что соответствующий элемент сетки представляет собой потолок.
XR_SCENE_MESH_SEMANTIC_LABEL_WALL_ANDROID
Эта семантическая метка указывает на то, что соответствующий элемент сетки представляет собой стену.
XR_SCENE_MESH_SEMANTIC_LABEL_TABLE_ANDROID
Эта семантическая метка указывает на то, что соответствующий элемент сетки представляет собой стол.
Destroy a scene mesh snapshot
Функция xrDestroySceneMeshSnapshotANDROID определена следующим образом:
XrResult xrDestroySceneMeshSnapshotANDROID(
XrSceneMeshSnapshotANDROID snapshot);
Parameter Descriptions
-
snapshot— это дескриптор XrSceneMeshSnapshotANDROID , созданный ранее с помощью xrCreateSceneMeshSnapshotANDROID , который будет уничтожен этой функцией.
Приложение может использовать функцию xrDestroySceneMeshSnapshotANDROID для уничтожения снимка сетки сцены. После уничтожения дескриптора приложение больше не сможет использовать его для получения информации или данных о подсетке. Дескриптор автоматически уничтожается при уничтожении трекера, поскольку дескриптор трекера является родительским для дескриптора снимка сетки сцены.
Valid Usage (Implicit)
- Расширение
XR_ANDROID_scene_meshingнеобходимо включить перед вызовом функции xrDestroySceneMeshSnapshotANDROID. -
snapshotдолжен быть допустимым дескриптором XrSceneMeshSnapshotANDROID.
Безопасность резьбы
- Доступ к
snapshotи любым дочерним элементам должен осуществляться посредством внешней синхронизации.
Return Codes
-
XR_SUCCESS
-
XR_ERROR_FUNCTION_UNSUPPORTED -
XR_ERROR_HANDLE_INVALID -
XR_ERROR_RUNTIME_FAILURE
Example code for scene meshing
Приведенный ниже пример кода демонстрирует, как получить доступ к данным сетки сцены для рендеринга.
XrInstance instance; // Created at app startup
XrSystemId systemId; // Received from xrGetSystem() at app startup
XrSession session; // Created at app startup
XrSpace appPlaySpace; // Created at app startup
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateSceneMeshingTrackerANDROID xrCreateSceneMeshingTrackerANDROID;
PFN_xrDestroySceneMeshingTrackerANDROID xrDestroySceneMeshingTrackerANDROID;
PFN_xrEnumerateSupportedSemanticLabelSetsANDROID xrEnumerateSupportedSemanticLabelSetsANDROID;
PFN_xrCreateSceneMeshSnapshotANDROID xrCreateSceneMeshSnapshotANDROID;
PFN_xrDestroySceneMeshSnapshotANDROID xrDestroySceneMeshSnapshotANDROID;
PFN_xrGetAllSubmeshStatesANDROID xrGetAllSubmeshStatesANDROID;
PFN_xrGetSubmeshDataANDROID xrGetSubmeshDataANDROID;
// Inspect system capability
XrSystemSceneMeshingPropertiesANDROID sceneMeshingProps = {
.type = XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID,
};
XrSystemProperties sysProps = {
.type = XR_TYPE_SYSTEM_PROPERTIES,
.next = &sceneMeshingProps
};
CHK_XR(xrGetSystemProperties(instance, systemId, &sysProps));
if (!sceneMeshingProps.supportsSceneMeshing) {
// scene meshing is not supported.
return;
}
uint32_t supportedsemanticLabelSetsCount = 0;
xrEnumerateSupportedSemanticLabelSetsANDROID(
instance, systemId, 0, &supportedsemanticLabelSetsCount, nullptr);
std::vector<XrSceneMeshSemanticLabelSetANDROID> supportedSemanticLabelSets(
supportedsemanticLabelSetsCount);
xrEnumerateSupportedSemanticLabelSetsANDROID(
instance, systemId, supportedsemanticLabelSetsCount,
&supportedsemanticLabelSetsCount, supportedSemanticLabelSets.data());
XrSceneMeshSemanticLabelSetANDROID semanticLabelSet = XR_SCENE_MESH_SEMANTIC_LABEL_SET_NONE_ANDROID;
// Check if system supports XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID
if (std::find(supportedSemanticLabelSets.begin(), supportedSemanticLabelSets.end(),
XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID) !=
supportedSemanticLabelSets.end()) {
semanticLabelSet = XR_SCENE_MESH_SEMANTIC_LABEL_SET_DEFAULT_ANDROID;
}
XrSceneMeshingTrackerCreateInfoANDROID trackerCreateInfo = {
.type = XR_TYPE_SCENE_MESHING_TRACKER_CREATE_INFO_ANDROID,
.semanticLabelSet = semanticLabelSet,
.enableNormals = XR_TRUE
};
XrSceneMeshingTrackerANDROID tracker = XR_NULL_HANDLE;
CHK_XR(xrCreateSceneMeshingTrackerANDROID(session, &trackerCreateInfo, &tracker));
XrSceneMeshSnapshotCreationResultANDROID snapshotResult {
.type = XR_TYPE_SCENE_MESH_SNAPSHOT_CREATION_RESULT_ANDROID,
.snapshot = XR_NULL_HANDLE
};
XrSceneMeshSnapshotANDROID& snapshot = snapshotResult.snapshot;
XrSceneMeshSnapshotCreateInfoANDROID createInfo {
.type = XR_TYPE_SCENE_MESH_SNAPSHOT_CREATE_INFO_ANDROID
};
// app update loop
while (true) {
// ...
// For every frame in frame loop
// ...
XrFrameState frameState; // previously returned from xrWaitFrame
const XrTime time = frameState.predictedDisplayTime;
XrBoxf box; // populated with the bounding box of the camera frustum
// ...
createInfo.baseSpace = appPlaySpace;
createInfo.time = time;
createInfo.boundingBox = box;
// Grab the scene mesh snapshot. This way the app can: know all of the submesh infos,
// choose the appropriate submeshes for which to get data, allocate the necessary
// buffer for those submeshes, and then get the data.
CHK_XR(xrCreateSceneMeshSnapshotANDROID(tracker, &createInfo, &snapshotResult));
// check the tracking state
if (snapshotResult.trackingState == XR_SCENE_MESH_TRACKING_STATE_ERROR_ANDROID) {
// unrecoverable error. Exit the app.
if (snapshot != XR_NULL_HANDLE) {
CHK_XR(xrDestroySceneMeshSnapshotANDROID(snapshot));
snapshot = XR_NULL_HANDLE;
}
break;
} else if (snapshotResult.trackingState != XR_SCENE_MESH_TRACKING_STATE_TRACKING_ANDROID) {
// The tracker is not tracking. Try again later.
if (snapshot != XR_NULL_HANDLE) {
CHK_XR(xrDestroySceneMeshSnapshotANDROID(snapshot));
snapshot = XR_NULL_HANDLE;
}
continue;
}
// 2-call idiom for getting submesh states
uint32_t submeshCount = 0;
CHK_XR(xrGetAllSubmeshStatesANDROID(snapshot, 0, &submeshCount, nullptr));
std::vector<XrSceneSubmeshStateANDROID> states(submeshCount, {
.type = XR_TYPE_SCENE_SUBMESH_STATE_ANDROID,
});
CHK_XR(xrGetAllSubmeshStatesANDROID(snapshot, submeshCount, &submeshCount, states.data()));
// To store the poses for the selected submeshes
std::vector<XrPosef> submeshesPoses;
submeshesPoses.reserve(submeshCount);
std::vector<XrSceneSubmeshDataANDROID> submeshes;
submeshes.reserve(submeshCount);
// Iterate the states and determine which submeshes the app wants data for
for (XrSceneSubmeshStateANDROID& state : states) {
// Modify this bool as necessary by looking at states. Maybe state.lastUpdatedTime
// is below a threshold or maybe the bounding box does not intersect with camera view
// frustum (The submesh will be culled).
bool needed;
if (needed) {
// Add the selected submesh to the submeshes list. Set the capacity
// zero for now since the size of the buffer will be determined later.
XrSceneSubmeshDataANDROID submesh {
.type = XR_TYPE_SCENE_SUBMESH_DATA_ANDROID,
.submeshId = state.submeshId,
.vertexCapacityInput = 0,
.vertexCountOutput = 0,
.vertexPositions = nullptr,
.vertexNormals = nullptr,
.vertexSemantics = nullptr,
.indexCapacityInput = 0,
.indexCountOutput = 0,
.indices = nullptr,
};
submeshes.push_back(submesh);
submeshesPoses.push_back(state.submeshPoseInBaseSpace);
}
}
// Grab the data for the selected submeshes using the 2-call idiom.
CHK_XR(xrGetSubmeshDataANDROID(snapshot, submeshes.size(), submeshes.data()));
for (XrSceneSubmeshDataANDROID& submesh : submeshes) {
submesh.vertexCapacityInput = submesh.vertexCountOutput;
submesh.vertexCountOutput = 0;
submesh.vertexPositions = new XrVector3f[submesh.vertexCapacityInput];
submesh.vertexNormals = new XrVector3f[submesh.vertexCapacityInput];
submesh.vertexSemantics = new uint8_t[submesh.vertexCapacityInput];
submesh.indexCapacityInput = submesh.indexCountOutput;
submesh.indexCountOutput = 0;
submesh.indices = new uint32_t[submesh.indexCapacityInput];
}
CHK_XR(xrGetSubmeshDataANDROID(snapshot, submeshes.size(), submeshes.data()));
// Destroy the scene mesh snapshot since we have finally grabbed the submeshes data. In
// next iteration app can: create a new one to get latest mesh data
CHK_XR(xrDestroySceneMeshSnapshotANDROID(snapshot));
snapshot = XR_NULL_HANDLE;
// Iterate the submeshes and get the vertex positions, vertex normals and
// vertex semantics data for the selected submeshes
for (uint32_t i = 0; i < submeshes.size(); i++) {
XrSceneSubmeshDataANDROID& data = submeshes[i];
XrVector3f* vertexPositions = data.vertexPositions;
XrVector3f* vertexNormals = data.vertexNormals;
XrSceneMeshSemanticLabelANDROID* vertexSemantics =
new XrSceneMeshSemanticLabelANDROID[data.vertexCountOutput];
for (uint32_t j = 0; j < data.vertexCountOutput; j++) {
vertexSemantics[j] =
static_cast<XrSceneMeshSemanticLabelANDROID>(data.vertexSemantics[j]);
}
XrPosef pose = submeshesPoses[i];
// *** Use the data as per needs ***
// Release the allocated memory for the data buffers when done using
delete [] vertexSemantics;
delete [] data.vertexPositions;
delete [] data.vertexNormals;
delete [] data.vertexSemantics;
delete [] data.indices;
}
// ...
// Finish frame loop
// ...
}
CHK_XR(xrDestroySceneMeshingTrackerANDROID(tracker));
New Object Types
Новые команды
- xrCreateSceneMeshSnapshotANDROID
- xrCreateSceneMeshingTrackerANDROID
- xrDestroySceneMeshSnapshotANDROID
- xrDestroySceneMeshingTrackerANDROID
- xrEnumerateSupportedSemanticLabelSetsANDROID
- xrGetAllSubmeshStatesANDROID
- xrGetSubmeshDataANDROID
New Structures
- XrSceneMeshSnapshotCreateInfoANDROID
- XrSceneMeshSnapshotCreationResultANDROID
- XrSceneMeshingTrackerCreateInfoANDROID
- XrSceneSubmeshDataANDROID
- XrSceneSubmeshStateANDROID
Extending XrSystemProperties :
New Enums
New Enum Constants
-
XR_ANDROID_SCENE_MESHING_EXTENSION_NAME -
XR_ANDROID_scene_meshing_SPEC_VERSION Extending XrObjectType :
-
XR_OBJECT_TYPE_SCENE_MESHING_TRACKER_ANDROID -
XR_OBJECT_TYPE_SCENE_MESH_SNAPSHOT_ANDROID
-
Extending XrStructureType :
-
XR_TYPE_SCENE_MESHING_TRACKER_CREATE_INFO_ANDROID -
XR_TYPE_SCENE_MESH_SNAPSHOT_CREATE_INFO_ANDROID -
XR_TYPE_SCENE_MESH_SNAPSHOT_CREATION_RESULT_ANDROID -
XR_TYPE_SCENE_SUBMESH_DATA_ANDROID -
XR_TYPE_SCENE_SUBMESH_STATE_ANDROID -
XR_TYPE_SYSTEM_SCENE_MESHING_PROPERTIES_ANDROID
-
Проблемы
История версий
Revision 3, 2025-05-15 (Salar Khan)
- Initial extension description