Небольшая помощь здесь. Я получаю 1 вращение на ось от аппаратного гироскопа, так что всего 3 поворота по 3 осям (x, y, z). Когда я использую вращение на основе матрицы, я получаю странные вращения, возможно, из-за порядка умножения (RotX * RotY * RotZ <> RotY * RotX * RotZ), я также пробовал MatrixYawPitchRoll, но появляются те же эффекты. Таким образом, я пришел к выводу, что я должен использовать кватернионы, но как можно быстрее я должен создать 3 кватерниона, по одному на оборот, но когда я объединяю их с умножением, я получаю те же эффекты, что и поворот на основе матрицы … Так что кто-то может сказать, пожалуйста Как правильно использовать 3 поворота, чтобы создавать и комбинировать кватернионы без появления предыдущих эффектов умножения?
Постскриптум D3DXQuaternionRotationYawPitchRoll по-прежнему испытывает те же эффекты, что и вращение на основе матрицы.
Кватернионы — не волшебная мазь, которая смывает проблемы вращения. Все кватернионы — это дешевый способ представления определенной ориентации и преобразования ориентации.
Ваша проблема в том, что вы не представляете свою ориентацию как кватерион; Вы представляете это как 3 угла. И это то, что представление это вызывает проблемы с вращением.
Вы должны прекратить использовать углы. Представьте ориентацию объекта как кватернион. Если вы хотите отрегулировать свою ориентацию, создайте кватернион из угла / оси регулировки, а затем умножьте его на ориентацию объекта. Повторно нормализуйте кватернион, и все готово.
Я вижу 2 основных источника проблем.
Просто схема Эйлера Угол — это порядок вращений вокруг оси XYZ, ZYX, ZXZ …
Все преобразования в / из матрицы / кватерниона можно найти в исходном коде отличной статьи Кена Шумейка, 1993.
http://tog.acm.org/resources/GraphicsGems/gemsiv/euler_angle/