Как ускорить обнаружение самолета в форме сцены ARCore
Пример проекта ARCore sceneform "hellosceneform" - это круто и работает очень хорошо.
Проблема заключается в том, что необходимо перемещать телефон, чтобы получить поверхность, на которую можно ставить якоря. Это слишком медленно.
Мое приложение не требует, чтобы что-либо отображалось в вертикальной плоскости (стене), а только когда-либо на полу. Можно ли вообще пропустить шаг "переместить телефон" или хотя бы ускорить его?
Я пробовал:
session.getConfig().setPlaneFindingMode(Config.PlaneFindingMode.HORIZONTAL);
Думая, что если я откажусь от необходимости искать вертикальные плоскости, то все будет работать быстрее... кажется, не достаточно быстро.
Спасибо!
2 ответа
К сожалению, структура ограничена (читай: включена) моделями компьютерного зрения, которые она использует для обнаружения самолетов. Контроллер обнаружения плоскости (т. Е. Шаг "переместить телефон вокруг") - это побуждение пользователя предоставить модели информацию о глубине через камеру, необходимую им для обнаружения этих плоскостей. Удаление этого шага не ускорит процесс, он просто оставит пользователя без каких-либо инструкций.
Без улучшений моделей обнаружения базовой плоскости я бы не ожидал, что есть способ сделать это быстрее. Лучшее, что мы можем сделать, - это использовать толчки UX, которые побуждают пользователя более эффективно перемещать телефон в боковом направлении.
Чтобы скрыть анимацию, которая показывает пользователям, как они должны перемещать свой телефон, используйте
arFragment.planeDiscoveryController.hide()
arFragment.planeDiscoveryController.setInstructionView(null)
Ускорить обнаружение самолета в ARCore довольно просто. Вот фрагмент кода:
class MainActivity : AppCompatActivity() {
lateinit var arFrag: ArFragment
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_ux)
arFrag = supportFragmentManager.findFragmentById(R.id.ux_fragment) as ArFragment
arFrag.planeDiscoveryController.hide()
arFrag.planeDiscoveryController.setInstructionView(null)
arFrag.arSceneView.planeRenderer.isEnabled = false
arFrag.arSceneView.scene.setOnUpdateListener(::onFrame)
}
// ........................................................
}
Надеюсь это поможет.