Ваше приложение может получать информацию о глубине через ARCore для Jetpack XR, чтобы определять, насколько близко физические объекты находятся к устройству.
Как создать сеанс ARCore для Jetpack XR
Получите информацию о глубине с помощью ARCore для Jetpack XR
Session. Если вы улучшаете пространственный интерфейс с помощью Jetpack Compose для XR, получите доступ к сеансу из Jetpack Compose для XR. Если вы работаете с пространственными объектами из библиотеки Jetpack SceneCore, получите доступ к сеансу из Jetpack XR Runtime.
Настройте сеанс
Получение карты глубины по умолчанию отключено в сеансах XR. Чтобы включить получение карты глубины, настройте сеанс и задайте DepthEstimationMode:
val newConfig = Config.Builder(session.config) .setDepthEstimation(DepthEstimationMode.SMOOTH_ONLY) .build() when (val result = session.configure(newConfig)) { is SessionConfigureSuccess -> TODO(/* Success! */) else -> TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */) }
Доступны следующие значения DepthEstimationMode:
DISABLED: информация о глубине сцены не предоставлена.RAW_ONLY– оценка глубины включена с необработанными значениями глубины и достоверности.SMOOTH_ONLY– оценка глубины включена, используются сглаженная глубина и уровень достоверности.SMOOTH_AND_RAW– оценка глубины включена с необработанными и сглаженными значениями глубины и уровня достоверности.
Необработанные карты глубины обеспечивают более высокую точность, но могут не содержать оценки глубины для всех пикселей изображения с камеры. В то же время сглаженные карты глубины предоставляют расчетную глубину для каждого пикселя, но данные о глубине каждого пикселя могут быть менее точными из-за сглаживания и интерполяции оценок глубины.
Как проверить поддержку карт глубины
У разных устройств разные возможности. Устройства со стереокамерой могут предоставлять карты глубины для левой и правой камер. Аналогично, устройства с одной камерой могут предоставлять карты оценки глубины только для монокамеры.
Чтобы проверить, какие карты глубины поддерживаются устройством, используйте XrDevice.isRenderingModeSupported:
val xrDevice = XrDevice.getCurrentDevice(context) val hasMonoDepth = xrDevice.isRenderingModeSupported(RenderingMode.MONO) val hasStereoDepth = xrDevice.isRenderingModeSupported(RenderingMode.STEREO)
Получение данных о глубине
Чтобы получить данные о глубине для определенной камеры, используйте Depth:
if (hasStereoDepth) { val depthMap = Depth.left(session) }
Рассчитать значения глубины
Из полученной карты глубины можно получить значения глубины и уровня достоверности:
if (hasStereoDepth) { val depthMap = Depth.left(session) }
В зависимости от используемой конфигурации, доступ к соответствующей карте глубины можно получить с помощью smoothDepthMap или rawDepthMap. Измерения на этих картах выражены в метрах. Уровни достоверности также можно получить с помощью smoothConfidenceMap и rawConfidenceMap. Значения находятся в диапазоне от 0 до 255, где 255 – это максимальная достоверность.
Чтобы отрисовать карту глубины для отладки или визуализации, ознакомьтесь с разделом Depth тестового приложения ARCore.