Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 绕自己的轴旋转_C++_Opengl - Fatal编程技术网

C++ 绕自己的轴旋转

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

我想造一辆车,我从一个多边形开始。汽车的物理性能基本上已经完成了,但是当汽车转向时,它没有朝向正确的位置

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

谢谢。

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,就像几乎所有的图形库一样,会合成矩阵,这样你就可以最后做最局部的事情,不管你如何抽象地描述整个变换