Представьте себе вращение 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.
Мои вопросы:
- Есть ли еще один лучший способ оценки?
- Как я могу исправить конвертирование с потерями из eulerAngles в Quaternion? (Какие-то дополнительные условия с глобальным вектором вверх?)
- Является ли использование полярных координат действительно хорошей идеей?