Пространственные возможности могут различаться на разных устройствах и изменяться по мере взаимодействия пользователей с вашим приложением или системой. Они могут даже изменяться самим приложением — например, при переходе в «Домашнее пространство» или «Полное пространство». Во избежание проблем вашему приложению необходимо проверять наличие пространственных возможностей, чтобы определить, какие API поддерживаются в текущей среде.
Проверьте наличие пространственных возможностей с помощью Jetpack Compose for XR.
Jetpack Compose for XR создает Composition Local для проверки пространственных возможностей. Используйте его, чтобы проверить, включены ли пространственный интерфейс, пространственный звук, окружение, сквозная передача или 3D-контент.
Вы можете использовать LocalSpatialCapabilities.current , чтобы проверить, доступны ли в данный момент следующие пространственные возможности:
-
isSpatialUiEnabled: Указывает, может ли приложение создавать пространственные элементы пользовательского интерфейса (например,SpatialPanel). -
isContent3dEnabled: Указывает, может ли приложение создавать 3D-объекты. -
isAppEnvironmentEnabled: Указывает, может ли приложение устанавливать среду. -
isPassthroughControlEnabled: Указывает, может ли приложение управлять состоянием сквозной передачи. -
isSpatialAudioEnabled: Указывает, может ли приложение использовать пространственное аудио.
В следующем примере показано, как проверить, включен ли пространственный пользовательский интерфейс:
if (LocalSpatialCapabilities.current.isSpatialUiEnabled) { Subspace { SpatialPanel( modifier = SubspaceModifier .width(1488.dp) .fillMaxHeight() ) { AppContent() } } } else { AppContent() }
Проверьте наличие пространственных возможностей с помощью SceneCore.
При использовании библиотеки SceneCore вам потребуется создать сессию . После создания сессии используйте spatialCapabilities из scene сессии, чтобы узнать, какие пространственные возможности в данный момент доступны.
-
SPATIAL_3D_CONTENT: Данная функция позволяет создавать трехмерный контент. -
APP_ENVIRONMENT: Действие может устанавливать собственное окружение. -
EMBED_ACTIVITY: Данное действие может пространственно встраиваться в другое действие. -
PASSTHROUGH_CONTROL: Данное действие может включать или отключать сквозную передачу данных. -
SPATIAL_AUDIO: В этом действии можно использовать пространственное аудио. -
SPATIAL_UI: Активность может самостоятельно создавать пространственный интерфейс (например, добавлять пространственную панель).
Вы также можете подписаться на функцию обратного вызова addSpatialCapabilitiesChangedListener , которая будет уведомлять вас об изменении пространственных возможностей.
// Example 1: check if enabling passthrough mode is allowed if (xrSession.scene.spatialCapabilities.contains( SpatialCapability.PASSTHROUGH_CONTROL ) ) { xrSession.scene.spatialEnvironment.preferredPassthroughOpacity = 1f } // Example 2: multiple capability flags can be checked simultaneously: if (xrSession.scene.spatialCapabilities.contains(SpatialCapability.PASSTHROUGH_CONTROL) && xrSession.scene.spatialCapabilities.contains(SpatialCapability.SPATIAL_3D_CONTENT) ) { // ... }
Используйте режим смешивания, чтобы проверить возможности дисплея устройства.
On Android XR, XR headsets and wired XR glasses have varying hardware capabilities, especially concerning their display type. You might need to adapt the colors of your app's UI and rendered objects to maximize visibility, which might be influenced by the display type and the preferred blend mode employed by the device. The DisplayBlendMode API provides the device's blend mode capability for rendering. Use this API to determine how virtual content is added to the real world.
Вот некоторые типы режимов наложения, о которых следует знать:
-
ADDITIVE: Виртуальный контент добавляется к реальному миру путем суммирования значений пикселей для каждого из компонентов: красного, зеленого и синего. Альфа-канал игнорируется, а черные пиксели отображаются прозрачными. -
ALPHA_BLEND: Виртуальный контент добавляется в реальный мир путем альфа-смешивания значений пикселей на основе альфа-компонента. -
NO_DISPLAY: Функция смешивания не поддерживается на устройстве.
Используйте XrDevice.getCurrentDevice(session).getPreferredDisplayBlendMode() из библиотеки Jetpack XR Runtime, чтобы проверить, какой тип режима смешения используется, и внести необходимые корректировки.
См. также
- Создать сессию
- Переход между HSM и FSM
- Добавьте пространственные среды в ваше приложение.
- Добавьте 3D-модели в свое приложение