в смысле «вокруг внутренних осей»? имхо, если правильно понимаю чего это за оси, то во всех трех случаях поворачиваются они сами относительно окружающего пространства две из осей относительно третьей (а какой именно - картинки бы увидеть с осями).
Вот есть скажем единичный вектор a, задающий направление полета, единичный вектор b, задающий направление правого крыла, и единичный вектор c, задающий направление киля. Пусть E(alpha,n) - матрица Эйлера, поворачивающая некоторый произвольный вектор вокруг единичного вектора n на угол alpha.
Тогда рысканье на угол alpha приведет к изменению a и b: a'=E(alpha,c)*a, b'=E(alpha,c)*b.
Тангаж на угол alpha приведет к изменению a и с: a'=E(alpha,b)*a, c'=E(alpha,b)*c.
Крен на угол alpha приведет к изменению с и b: с'=E(alpha,a)*c, b'=E(alpha,a)*b.
А вообще это зависит от того, как с-но задается ориентация самолета в программе.
Код разбирать не стал, много букв. Но если полигональная модель задается по координатам вершин, дык все правильно - есть поступательное движение (ко всем вершинами прибавляем чего то), а есть центр (тоже движущийся поступательно) вокруг которого крутим - вычитаем из каждой вершин цент, поворачиваем, прибавляем к результату центр.
В приведенном мной тексте программы реализован такой алгоритм:
Задать ортонормированный базис a (1, 0, 0), b (0, 1, 0), c (0, 0, 1)
Добавить к базису 3 последовательных поворота:
а) повернуть векторы b, c вокруг вектора a на угол крена roll с получением векторов b', c'
б) повернуть векторы a, c' вокруг вектора b' на угол рысканья yaw с получением векторов a', c"
в) повернуть векторы a', b' вокруг вектора c" на угол тангажа pitch с получением векторов a", b"
В результате будет получен ортонормированный базис a", b", c".
Преобразовать координаты вершин модели в соответствии с изменившимся базисом. Данное преобразование обеспечивает переход вершин модели с координатами V[VERT_NUM] в набор вершин с координатами v[VERT_NUM].
В процессе визуализации данной модели обнаружил наличие проблемы шарнирного замка (gimbal lock) с блокированием оси.
Список возникших вопросов:
правильный ли используется алгоритм для поворота 3D модели в пространстве на основе трех углов?
возможно ли избавиться от проблемы шарнирного замка путем изменения порядка следования пунктов а), б), в) ?
если невозможно, поможет ли применение кватернионов вращения в качестве замены матрице направляющих косинусов?
А как Вы преобразуете координаты вершин модели из базиса в базис? Сколько я с матрицей поворота не возякался, ни разу таких проблем не возникало. ИМНО нужно каждую вершину модели крутить аналогичным образом. Т.е. есть исходные координаты вершин (соотвевтсвующие каким то там углам, не важно каким). Есть изменение углов (скажем на шаге). Делаем три матрицы поворота описанным Вами образом, перемножаем их, получаем единую матрицу поворота для всех вершин. Дальше крутим все вершины относительно центра этой матрицей - профит! Все должно работать.