Я использую FPS-подобную камеру, и она использует кватернионы. Но всякий раз, когда я пытаюсь смотреть вверх, а затем в сторону, он наклоняется, а иногда он может перевернуться с ног на голову. Как я могу это исправить?
17
Я использую FPS-подобную камеру, и она использует кватернионы. Но всякий раз, когда я пытаюсь смотреть вверх, а затем в сторону, он наклоняется, а иногда он может перевернуться с ног на голову. Как я могу это исправить?
Ответы:
Вы можете разложить кватернион на набор углов отклонения / рыскания / крена, но обычно это излишне.
Вместо того, чтобы составлять свои кватернионы, как это:
Попробуй это:
Тогда он никогда не будет генерировать наклон / крен и эквивалентен хранению рыскания и тангажа отдельно
источник
framePitch
иframeYaw
float
типы? Кроме того, я был бы признателен за разъяснения по поводу вашего первого предложения.cameraOrientation
,framePitch
иframeYaw
все кватернионы (каждый кватернион равен 4 числам с плавающей запятой или двойным числам ).Это проблема, которая у меня возникла некоторое время, и я не мог найти ответы на нее, поэтому я решил опубликовать ее здесь.
Это на самом деле довольно просто. То, как вы, скорее всего, делаете повороты, выглядит так:
Но делать это так же не получается.
То, что вам нужно сделать, это сделать это в первом порядке для вращений вверх и вниз и во втором порядке для боковых вращений.
Для меня это было так:
По какой-то причине первый способ имеет вращение относительно текущего бокового направления, которое требуется для перемещения вверх и вниз, но вы не хотите этого для боковых вращений, поэтому необходим второй порядок.
источник
Для камеры FPS вы обычно не хотите вращаться и ограничены с шагом +/- 90 градусов, поэтому я бы просто отслеживал текущее состояние, используя углы поворота и рыскания. Полная сила кватернионов не очень полезна для этого.
Вы все еще можете конвертировать углы рыскания / тангажа в кватернионы и из них в случае, если вы хотите переключиться между камерой FPS и анимированными камерами, используя кватернионную интерполяцию ключевых кадров или что-то в этом роде.
источник
Другой простой трюк - поместить камеру в объект GameObject и заставить вращение Yaw управлять игровым объектом, в то время как дочерняя камера настроена с помощью координат высоты тона:
источник