2011-01-24 5 views
0

Я пытаюсь сделать очень простую вещь, но она не работает хорошо .... я обратил оси (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 .... Может ли кто-нибудь сказать мне, почему?

Update:

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

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

ответ

1

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

+0

Привет, ребята, спасибо! – talel

0

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

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

Смежные вопросы