Пространственные возможности могут различаться на разных устройствах и меняться по мере того, как пользователи взаимодействуют с вашим приложением или системой. Они могут меняться даже самим приложением, например при переходе в главное или полное пространство. Чтобы избежать проблем, ваше приложение должно проверять пространственные возможности, чтобы определить, какие API поддерживаются в текущей среде.
Как проверить поддержку пространственных возможностей с помощью Jetpack Compose для XR
Jetpack Compose для 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: в рамках занятия можно создавать 3D-контент.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) ) { // ... }
Используйте режим смешивания, чтобы проверить возможности дисплея устройства
Аппаратные возможности XR-шлемов и проводных XR-очков на базе Android XR различаются, особенно в отношении типа дисплея. Возможно, вам потребуется адаптировать цвета пользовательского интерфейса приложения и визуализируемых объектов, чтобы обеспечить максимальную видимость, на которую может влиять тип дисплея и предпочтительный режим смешивания, используемый устройством. API DisplayBlendMode предоставляет информацию о режиме смешивания, который устройство использует для рендеринга. Используйте этот API, чтобы определить, как виртуальный контент добавляется в реальный мир.
Вот некоторые из типов режимов смешивания, о которых следует знать:
ADDITIVEВиртуальный контент добавляется в реальный мир путем добавления значений пикселей для каждого из красного, зеленого и синего компонентов. Альфа-канал игнорируется, а черные пиксели становятся прозрачными.ALPHA_BLEND. Виртуальный контент добавляется в реальный мир путем альфа-смешивания значений пикселей на основе альфа-компонента.NO_DISPLAY: смешивание не поддерживается на устройстве.
Используйте XrDevice.getCurrentDevice(session).getPreferredDisplayBlendMode() из библиотеки среды выполнения Jetpack XR, чтобы проверить, какой тип режима смешивания используется, и при необходимости внести корректировки.
Дополнительная информация
- Как создать сеанс
- Переход между HSM и FSM
- Как добавить пространственные среды в приложение
- Как добавить 3D-модели в приложение