ARCore для Jetpack XR может обнаруживать плоские поверхности в среде пользователя и предоставлять о них такую информацию, как их поза, размер и ориентация. Это может помочь вашему приложению находить поверхности, такие как столы, для размещения объектов.
Создайте сеанс ARCore для Jetpack XR.
Доступ к информации о плоскости через сеанс ARCore для Jetpack XR. Чтобы получить информацию о Session
, см. раздел «Понимание жизненного цикла сеанса» .
Настройте сеанс
Обнаружение самолетов по умолчанию не включено в сеансах XR. Чтобы включить отслеживание самолетов, настройте сеанс:
val newConfig = session.config.copy( planeTracking = Config.PlaneTrackingMode.HorizontalAndVertical, ) when (val result = session.configure(newConfig)) { is SessionConfigureConfigurationNotSupported -> TODO(/* Some combinations of configurations are not valid. Handle this failure case. */) is SessionConfigurePermissionsNotGranted -> TODO(/* The required permissions in result.permissions have not been granted. */) is SessionConfigureSuccess -> TODO(/* Success! */) }
Получить состояние воспринимаемых плоскостей
ARCore для Jetpack XR предоставляет состояние самолетов через StateFlow
, который генерирует состояние самолетов. Подписка на самолеты в сеансе уведомляет ваше приложение о добавлении, обновлении или удалении самолетов.
Plane.subscribe(session).collect { planes -> // Planes have changed; update plane rendering }
Плоскость обладает следующими свойствами:
-
label
: семантическое описание данногоPlane
. Это может бытьWall
,Floor
,Ceiling
илиTable
. -
centerPose
: Поза центра обнаруженной плоскости. -
extents
: Размеры обнаруженной плоскости в метрах. -
vertices
: список вершин выпуклого многоугольника, аппроксимирующего плоскость.
Проведите тест на попадание в самолеты
Хит-тест — метод расчета пересечения луча с объектами, отслеживаемыми сеансом. Обычное применение проверки нажатия — указать на стол и разместить в этом месте объект. Результатом проверки попадания является список объектов попадания. Другими словами, проверка попадания не останавливается при первом попадании в объект. Однако часто вас может интересовать только первое попадание объекта данного типа.
Чтобы выполнить проверку попадания, используйте Interaction.hitTest()
с Ray
:
val results = androidx.xr.arcore.hitTest(session, ray) // When interested in the first Table hit: val tableHit = results.firstOrNull { val trackable = it.trackable trackable is Plane && trackable.state.value.label == Plane.Label.Table }