旋转自己的轴

时间:2011-03-27 17:30:36

标签: c++ opengl

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

所以我尝试使用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();
}

感谢。

1 个答案:

答案 0 :(得分: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,就像几乎每个图形库一样,组成矩阵,以便最后做最本地的事情,无论你如何描述摘要中的总变换。