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 }