Поверните объект, используя ARCore Frame.Pose в единстве - PullRequest
1 голос
/ 04 апреля 2019

Я создаю приложение для навигации внутри помещений для упражнений с использованием ARCore и Unity.

Приложение очень похоже на приложение по этому адресу Приложение для навигации с использованием ARCore

Основное отличие состоит в том, что камера следует за указателем сверху, а указатель является стрелкой.Есть также еще один объект (красный куб), который показывает ориентацию телефона.

Я успешно получил поворот позы с телефона и использовал его на красном кубе с:

myRedCube.transform.rotation = Frame.Pose.rotation;

Теперь мне нужно поворачивать стрелку только на плоскости xz в соответствии с движением телефона, чтобы пользователь мог видеть, куда он идет (когда камера смотрит на указатель сверху).Если я установил фиксированный угол, он будет работать отлично, но если я использую угол от ARCore, вращение будет не таким, как я ожидал.

Я попытался извлечь угол y из угла Frame.Pose.Вращение и используется с:

arrow.transform.rotation = Quaternion.Euler(0,myYAngle,0);

, но вращение не правильное.

Другой тест, который я сделал, использует ориентированный вектор, переданный LookRotation:

Vector3 tempVector = Quaternion.AngleAxis(myYAngle, Vector3.up) * Vector3.forward;
arrow.transform.rotation = Quaternion.LookRotation(tempVector);

И в этом случае стрелка не учитывает вращение на плоскости xz.В этих двух примерах myYAngle получено из свойства Frame.Pose.rotation.eulerAngles.

Возможно, мне не хватает чего-то между извлечением кватерниона и применением нового вращения.

Возможнокто-нибудь объяснит мне, как манипулировать кватернионом вращения из Frame.Pose, чтобы получить желаемый эффект?Другие предлагаемые методы приветствуются.Я использую Samsung Galaxy S9 для тестирования приложения.

enter image description here

...