Сцена и геолокация
Используя ARCore и Sceneform, я пытаюсь добавить портрет на вертикальной поверхности (которая является стеной), в настоящее время я использую ViewRenderer, чтобы сделать это из библиотеки Sceneform... все работает отлично, но сейчас у меня 2 проблемы:
Первая проблема заключалась в том, что ViewRenderer будет отображать представление Android в 3D, поэтому мне пришлось повернуть узел на его правый вектор на 90 градусов, чтобы он выпал на стену... это работает, но теперь моя вторая проблема заключается в том, что мне нужно, чтобы портрет был всегда прямо с гравитацией земли.
Как было бы возможно достичь этого?
2 ответа
Возможно, вы захотите вызвать Pose.extractTranslation () ( https://developers.google.com/ar/reference/java/com/google/ar/core/Pose.html) при создании привязки для вашего объекта., Это удаляет вращающуюся часть из Позы, которая добавляется, когда ARCore обрабатывает событие касания. С помощью https://developers.google.com/ar/reference/java/com/google/ar/core/Session вы можете создать новую привязку из этой позы.
Если у вас есть ArFragment, он будет выглядеть так:
arFragment?.setOnTapArPlaneListener { hitResult, plane, motionEvent ->
val arSession = arFragment.arSceneView.session
val hitPose = hitResult.hitPose
val poseWithoutRotation = hitPose.extractTranslation()
val anchor = arSession.createAnchor(poseWithoutRotation)
val anchorNode = AnchorNode(anchor)
...
После долгих исследований я обнаружил, что лучшее решение сейчас здесь.
Но это решение было бы идеальным, если бы вы применили небольшую нормализацию данных датчика, чтобы он не часто прыгал.