简单的旋转变换问题

时间:2011-01-24 20:37:33

标签: opengl graphics

我正在尝试做一件非常简单的事,但它不能很好地工作.... 我画了轴(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 个答案:

答案 0 :(得分:1)

您的旋转轴与原始(参考)平面的角度不同,因此矢量(1,1,1)不会直接指向“向上”。第一次(和第二次)旋转后,原始Y轴处于45度角,但原始Z轴和X轴不是。它们确实位于与原件成45度的平面上,但在该平面上只有两个终端方向成45度角,而第二次旋转后Z和X不是这种情况。 你应该尝试在第一次旋转时使用60度,在第二次旋转时使用45度。这样,所有轴都与参考平面成30度角,向量(1,1,1)将直接指向上方。

答案 1 :(得分:0)

结果是正确的。你可以看到如下:

您的线条以立方体中的对角线开始,边缘与坐标轴平行。如果您通过一个轴并且与其他轴成45度角,则它与立方体的交点是矩形,但不是正方形 - 矩形的一边(与坐标轴平行)是边缘立方体,但另一个是面对角线,其长度是两个的平方根。你的直线是这个矩形的对角线,所以它与边的角度不是45度 - 你的结构必须与Z轴完全对齐。