Ваше приложение может получать информацию о глубине через ARCore для Jetpack XR, чтобы определить, насколько близко физические объекты находятся к устройству.
Создайте сессию ARCore для Jetpack XR.
Получайте информацию о глубине через Session ARCore для Jetpack XR. Если вы улучшаете пространственный пользовательский интерфейс с помощью Jetpack Compose for XR, получите доступ к сессии из Jetpack Compose for XR . Если вы работаете с пространственно-ориентированными объектами из библиотеки Jetpack SceneCore, получите доступ к сессии из Jetpack XR Runtime .
Настройте сессию
В XR-сессиях по умолчанию отключена функция получения карты глубины. Чтобы включить получение карты глубины, настройте сессию и установите параметр DepthEstimationMode :
val newConfig = session.config.copy( depthEstimation = DepthEstimationMode.SMOOTH_ONLY, ) 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 .