Как реализовать вращение камеры, как UE4, с использованием кватернионов?

#directx #quaternions

Вопрос:

Я пробовал много раз, но не могу получить желаемый результат.

моя логика вращения такова.

  1. если мышь переместится влево или вправо, затем поверните рыскание. если мышь перемещается вверх или вниз, поверните шаг.
  2. Мышь может перемещаться в диагональном направлении. так что в этом случае я получу два четвертьфинала. (тангаж и рыскание)
  3. Я не знаю, как составить эти два кватерниона.

когда я использую только один поворот или рыскание, это работает так, как я хочу. но если я использую два поворота по тангажу и рысканию, то в результате получается что-то неправильное.

Я перепробовал множество способов составления кватернионов.. но я не могу достичь того результата, которого хочу.

Ответ №1:

Внедрение 3D-камер-удивительно сложная проблема. Полное обсуждение выходит за рамки этой темы, но есть несколько основных типов, на которые вы можете обратить внимание:

  1. Простая камера «взгляда» похожа на то, что вы описываете. Взгляните на этот учебник для примера реализации.
  2. Другой распространенной камерой является камера «орбита» для изучения 3D-сцены. На GitHub есть пример реализации: OrbitCamera.h / OrbitCamera.cpp.
  3. Камера «свободного полета»-еще одна распространенная модель камеры для перемещения по 3D-сцене. Это немного сложнее исправить, и, как правило, используются кватернионы, чтобы избежать блокировки карданного подвеса и других проблем.