C++ 绕自己的轴旋转
我想造一辆车,我从一个多边形开始。汽车的物理性能基本上已经完成了,但是当汽车转向时,它没有朝向正确的位置 所以我尝试使用GLRotated和GLRotated(_angle,0,0,1);式中_angle是汽车的角度,单位为度,但它不绕自己的轴旋转 我怎样才能解决这个问题 代码如下:C++ 绕自己的轴旋转,c++,opengl,C++,Opengl,我想造一辆车,我从一个多边形开始。汽车的物理性能基本上已经完成了,但是当汽车转向时,它没有朝向正确的位置 所以我尝试使用GLRotated和GLRotated(_angle,0,0,1);式中_angle是汽车的角度,单位为度,但它不绕自己的轴旋转 我怎样才能解决这个问题 代码如下: void Car::draw(){ Vector2d min = _position - _size/2.0; Vector2d max = _position + _size/2.0; g
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();
}
谢谢。glRotate*围绕原点旋转。您可以将其平移回原点,旋转并再次平移,但最好不要为自己添加位置:
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,就像几乎所有的图形库一样,会合成矩阵,这样你就可以最后做最局部的事情,不管你如何抽象地描述整个变换