【问题标题】:Rotate Over Own Axis在自己的轴上旋转
【发布时间】:2011-03-28 02:24:07
【问题描述】:

我正在尝试制造汽车,并且从多边形开始。汽车的物理特性已经基本完成,但是汽车在转向时没有面向正确的位置。

所以我尝试使用 GLRotated 和 glRotated(_angle, 0, 0, 1);其中 _angle 是汽车的角度,以度为单位,但它没有绕着自己的轴旋转。

我该如何解决这个问题?

代码在这里:

void Car::draw(){
    Vector2d min = _position - _size/2.0;
    Vector2d max = _position + _size/2.0;
    glColor3d(0.8, 0, 0);
    glLoadIdentity();
    glRotated(_angle, 0, 0, 1);
    glLineWidth(1.5);
    glBegin(GL_POLYGON);
        glVertex3d(min[0], min[1], 0);
        glVertex3d(max[0], min[1], 0);
        glVertex3d(max[0], max[1], 0);
        glVertex3d(min[0], max[1], 0);
    glEnd();
    glPopMatrix();
}

谢谢。

【问题讨论】:

    标签: c++ opengl


    【解决方案1】:

    glRotate* 围绕原点旋转。您可以翻译回原点,旋转并再次翻译出来,但最好不要为自己添加 _position:

    void Car::draw(){
        Vector2d min = - _size/2.0;
        Vector2d max = + _size/2.0;
        glColor3d(0.8, 0, 0);
        glLoadIdentity();
        glTranslated(_position[0], _position[1], 0);
        glRotated(_angle, 0, 0, 1);
        glLineWidth(1.5);
        glBegin(GL_POLYGON);
            glVertex3d(min[0], min[1], 0);
            glVertex3d(max[0], min[1], 0);
            glVertex3d(max[0], max[1], 0);
            glVertex3d(min[0], max[1], 0);
        glEnd();
        glPopMatrix();
    }
    

    这与平移到原点、旋转、向外平移相同,只是从原点上的对象开始。另外不要忘记,OpenGL 与几乎所有图形库一样,会组合矩阵,以便您最后做最局部的事情,而不管您如何抽象地描述整个变换。

    【讨论】:

      猜你喜欢
      • 2014-12-05
      • 2016-02-20
      • 1970-01-01
      • 2017-10-13
      • 2023-03-07
      • 2013-03-19
      • 2012-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多