Snap / Clamp Rotation - вращение в «непрерывных шагах» - PullRequest
0 голосов
/ 01 апреля 2020

Представьте себе вращение VR-контроллера и объекта x. При нажатии на курок вращение будет сохранено как Quaternion rStart. При вращении контроллера изменение вращения между rStart и текущим вращением rCurrent добавляется к объекту x. Простыми словами, объект x вращается так, как это делает контроллер.

Мне нужно, чтобы вращение объекта было «непрерывным шагом». Например, я установил размер шага в 10 градусов. Затем вращение контроллера будет вращать объект, но только позволять ему находиться в этих «защелкивающихся» «поворотах сетки вращения». Вращение объекта должно быть привязано к ближайшему «шагу вращения» по углу.

Я придумал два применения:

1) Используйте EulerAngles

Quaternion> EulerAngles> Привязать угол x, y, z к модулю> EulerAngles> Quaternion

Кажется, у меня проблемы со странной проблемой блокировки gimble, поскольку перенос в eulerAngles и обратно в Quaternions с некоторой потерей.

2) Используйте полярные координаты

Кватернион> Вектор вперед, вверх> полярные координаты. привязка по модулю> Vector f, u> Quaternion

Мне кажется, что работа только с двумя углами, зенитом и азимутом, делает процесс более понятным, что важно, так как я не профессионал в топи c.

Мои вопросы:

  1. Есть ли еще один лучший способ оценки?
  2. Как я могу исправить конвертирование с потерями из eulerAngles в Quaternion? (Какие-то дополнительные условия с глобальным вектором вверх?)
  3. Является ли использование полярных координат действительно хорошей идеей?
...