【问题标题】:Simple rotation transformation problem简单的旋转变换问题
【发布时间】:2011-01-24 20:37:33
【问题描述】:

我正在尝试做一件非常简单的事情,但效果不佳.... 我画了轴(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 轴与他的法线统一来将飞机移动到他的位置。 谁能给我三个正确的操作:旋转+旋转+翻译?

【问题讨论】:

    标签: opengl graphics


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      您的线以立方体中的对角线开始,边平行于坐标轴。如果你用一个平面穿过一个轴,并与其他轴成 45 度角,它与立方体的交点是一个矩形,而不是一个正方形——矩形的一侧(平行于坐标轴)是立方体,但另一个是面对角线,其长度是两个的平方根。你的线是这个矩形的对角线,所以它与边的角度不是 45 度——它必须是你的结构才能将它与 Z 轴完全对齐。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-06
        • 1970-01-01
        相关资源
        最近更新 更多