- создать единицу матрицы
glLoadIdentity();
- повернуть матрицу на
glRotatef(-119.718,-0.58064,-0.575698,-0.575699);
- получить код матрицы на стороне процессора по
glGetDoublev
- вычислите углы Эйлера из него, используя тригонометрию, чтобы вам нужно
Итак, первые 3 пули просты ...
double m[16];
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glRotatef(-119.718,-0.58064,-0.575698,-0.575699);
glGetDoublev(GL_MODELVIEW_MATRIX,m);
glPopMatrix();
последняя пуля зависит от вашего порядка углов Эйлера и обозначений системы координат, и это чистая математика ... Так что либо выведите уравнения для себя (atan2
и acos
ваши друзья), либо для Google:
extracting euler angles from rotation matrix
И найдите совпадение, соответствующее вашему заказу ... Чтобы реализовать его, вам также нужно понять материал, так что смотрите мой:
Также из ОП мне показалось, что вы не понимаете, как работает glRotate
. В двух словах, он вращается вокруг точки (0,0,0)
и произвольного трехмерного вектора в качестве оси. См. Rodrigues_rotation_formula в предыдущей ссылке, но ее можно также использовать, используя произведение крестика и точки и используя вращение по оси.
Теперь вернемся к вашему вопросу после получения углов Эйлера (в предположении порядка ax,ay,az
), тогда само вращение будет выглядеть так:
glRotatef(ax,1.0,0.0,0.0);
glRotatef(ay,0.0,1.0,0.0);
glRotatef(az,0.0,0.0,1.0);
И должно быть сделано в том же порядке, что и ваши углы Эйлера ...