Простая задача преобразования вращения - PullRequest
0 голосов
/ 24 января 2011

Я пытаюсь сделать очень простую вещь, но она не работает хорошо ... Я нарисовал оси (XYZ) Затем я сделал следующее:

glMatrixMode(GL_MODELVIEW);

glPushMatrix();

glRotated( 45 , 1 , 0 , 0 );//around X
glRotated(-45 , 0 , 1 , 0); //around Y 

glBegin(GL_LINES);
  glVertex3d(0,0,0);
  glVertex3d( 1,1,1);
glEnd();

glPopMatrix();

Но как-то линияЯ рисую (1,1,1) не рисуется точно по оси Z ... Может кто-нибудь сказать мне, почему?

Обновление:

Так что я понимаю, что OpenGL вращаетсясцена с glRotated (45, 1, 0, 0), следовательно, ось Y больше не равна 0, 1, 0, следовательно, следующая операция glRotated (-45, 0, 1, 0) не будет вращаться вокруг "оригинала"Ось Y.я прав?

Позвольте мне сказать вам, что мне нужно сделать: я получаю плоскость по уравнению Ax + By + Cz + D = 0 от пользователя, и мне нужно нарисовать эту плоскость на экране.Итак, я хотел нарисовать бесконечную плоскость на XY, а затем повернуть + перевести его в нужное место.я хотел переместить самолет на его место, объединив ось Z с его нормалью.Может ли кто-нибудь дать мне 3 правильные операции: повернуть + повернуть + перевести?

Ответы [ 2 ]

1 голос
/ 25 января 2011

Ваши повернутые оси не находятся под тем же углом, что и исходная (опорная) плоскость, поэтому вектор (1,1,1) не будет указывать прямо "вверх".Ваша исходная ось Y находится под углом 45 градусов после первого (и второго) вращения, но ваши исходные оси Z и X - нет.Они действительно лежат в плоскости, которая составляет 45 градусов к оригиналу, но в этой плоскости только два конечных направления составляют угол 45 градусов, что не относится к вашим Z и X после второго поворота.
Вы должны попытаться использовать 60 градусовв первом повороте, 45 градусов в секунду.Таким образом, все оси будут находиться под углом 30 градусов к плоскости отсчета, а вектор (1,1,1) будет направлен прямо вверх.

0 голосов
/ 25 января 2011

Результат правильный. Вы можете увидеть это следующим образом:

Ваша линия начинается как диагональ в кубе с ребрами, параллельными осям координат. Если вы берете плоскость через одну ось и под углом 45 градусов к остальным, ее пересечение с кубом является прямоугольником, а не квадратом - одна сторона прямоугольника (параллельная оси координат) является ребром куб, но другой - это диагональ грани, длина которой равна квадратному корню из двух. Ваша линия является диагональю этого прямоугольника, поэтому ее угол со сторонами не равен 45 градусам, что должно быть для вашей конструкции, чтобы выровнять ее точно по оси Z.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...