Opengl 获取绕任意点旋转后对象的三维坐标(汽车转向模拟)

Opengl 获取绕任意点旋转后对象的三维坐标(汽车转向模拟),opengl,rotation,Opengl,Rotation,我设法在OpenGL中开发了一个基本的汽车模拟,使用键盘事件来模拟汽车的运动。我遇到的问题是,在我将车转向左侧或右侧后,如何确定它的位置。我使用GLTRANSTEF()glRotatef()GLTRANSTEF()模型围绕Y轴上的一个点旋转我的汽车,使汽车仅在XZ平面上移动 renderScene功能概述如下: void renderScene( void ) { glMatrixMode(GL_MODELVIEW); glClear(GL_COLOR_BUFFER_BIT

我设法在OpenGL中开发了一个基本的汽车模拟,使用键盘事件来模拟汽车的运动。我遇到的问题是,在我将车转向左侧或右侧后,如何确定它的位置。我使用GLTRANSTEF()glRotatef()GLTRANSTEF()模型围绕Y轴上的一个点旋转我的汽车,使汽车仅在XZ平面上移动

renderScene功能概述如下:

 void renderScene( void ) {

    glMatrixMode(GL_MODELVIEW); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    gluLookAt(cameraX,cameraY,cameraZ,lookAtX,0,lookAtZ,upX, upY, upZ);


  glPushMatrix();

    if (steerLeft){
        glTranslatef(xTemp,0,zTemp+R); 
        glRotatef(angle,0,1,0);
        glTranslatef(-xTemp,0,-zTemp-R);    
    }
    else 
          if (steerRight){  
            glTranslatef(-xTemp,0,-zTemp-R);
            glRotatef(angle,0,1,0);
            glTranslatef(xTemp,0,zTemp+R);
          }
          else{ 
            glRotatef(angle,0,1,0); 
            glTranslatef(x1,0,z1);
        }
    glutWireCube(1,1,1);  

  glPopMatrix();

    glutSwapBuffers();
}
其中,x1在按下W、S键后相应地递增/递减,例如,当我按下W+A或W+D时,角度会相应地改变,以使旋转行为符合预期(值得一提的是,我处理的是一系列变换,而不仅仅是单个平移->旋转->平移)

就R而言,它将是物体在围绕该点的一个方向上旋转360度时形成的圆的半径。xTemp和zTemp变量在转向前保持对象的正确位置

我搜索了这个问题的答案,并找到了一些我应该使用的建议:
glGetDoublev(GL\u MODELVIEW\u MATRIX,m)
函数来存储当前矩阵,并在使用m[12],m[14]进行转换后获得对象的x,z坐标,但我无法使其工作


我很确定我错过了一些简单的东西,因为OpenGL已经在为我进行这些计算,要在屏幕上设置对象的位置,我所需要的只是“最后一次计算”,表示对象以增量方式旋转多次后的最终位置。

尝试读取
模型矩阵
&&投影矩阵。还可以尝试
矩阵堆栈
(现在折旧)操作。我不知道这将如何帮助我,我正在寻找一些方法来检索对象在绕特定点旋转后的坐标。