Итак, я написал 3D-камеру на основе Quaternion, ориентированную на новых программистов, поэтому им очень легко интегрироваться и начинать использовать.
Пока я его разрабатывал, сначала я принимал пользовательский ввод в качестве углов Эйлера, а затем генерировал кватернион на основе входных данных для этого кадра. Затем я взял бы кватернион камеры и умножил его на тот, который мы сгенерировали для входа, и теоретически это должно просто добавить вращение входа к текущему состоянию вращения камеры, и все будет полным и счастливым. Давайте назовем это: Накопление кватернионов, потому что мы храним и добавляем только кватернионы.
Но я заметил, что с этим методом возникла проблема. Чем больше я его использовал, даже если бы я вращался только на один угол Эйлера, скажем Yaw, он через некоторые итерации начинал бы перетекать в другой, скажем Pitch. Это было незначительно, но довольно неприемлемо.
Итак, я провел еще несколько исследований и обнаружил статью, в которой говорилось, что лучше накапливать углы Эйлера, поэтому камера сохраняет свое текущее вращение в виде углов Эйлера, и ввод в них просто добавляется к каждому кадру. Затем я генерирую кватернион из них каждый кадр, который, в свою очередь, используется для генерации моей матрицы вращения. И это исправило проблему вращения вращения в неправильные оси.
Так есть ли у кого-нибудь из участников Stackoverflow понимание этой проблемы? Это правильный способ делать вещи?