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