Сцена и геолокация

Используя 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)
        ...

После долгих исследований я обнаружил, что лучшее решение сейчас здесь.

Но это решение было бы идеальным, если бы вы применили небольшую нормализацию данных датчика, чтобы он не часто прыгал.

Другие вопросы по тегам