Ваше приложение может получать информацию о глубине с помощью 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)
Как получить данные о глубине
Чтобы получить данные о глубине для определенной камеры, используйте DepthMap:
if (hasStereoDepth) { val depthMap = Depth.left(session) }
Рассчитывать значения глубины
Значения глубины и достоверности можно получить из полученной карты глубины:
if (hasStereoDepth) { val depthMap = Depth.left(session) }
В зависимости от используемой конфигурации получите доступ к карте глубины с помощью smoothDepthMap или rawDepthMap. Значения на этих картах указаны в метрах. Значения достоверности также можно получить с помощью smoothConfidenceMap и rawConfidenceMap. Значения находятся в диапазоне от 0 до 255, где 255 соответствует самой высокой достоверности.
Чтобы создать карту глубины для отладки или визуализации, ознакомьтесь с разделом о глубине в тестовом приложении ARCore.