我正在尝试制造一辆汽车而我正从一个多边形开始。汽车的物理特性已基本完成,但是在转向时汽车没有朝向正确的位置。
所以我尝试使用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();
}
感谢。
答案 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,就像几乎每个图形库一样,组成矩阵,以便最后做最本地的事情,无论你如何描述摘要中的总变换。