c - 在 OpenGL 中沿对象后面的方向旋转相机

标签 c opengl graphics glut

我正在使用 freeglut 在 OpenGL 中制作游戏。

我有一辆车,我可以使用按键来前后移动,并且摄像头会跟随它。现在,当我转动汽车(在 xz 平面中进行 glRotate)时,我希望相机更改相机位置(使用 gluLookAt),以便它始终指向汽车的后部。

有什么建议我该怎么做吗?

最佳答案

对于相机跟随,我使用对象变换矩阵

  1. 获取对象变换矩阵

    camera=object
    

    使用glGetMatrix或其他任何东西

  2. shift 旋转位置 Z轴指向你想要看的地方

    我使用对齐的对象来转发 Z轴,但并非所有网格模型都是这样,因此旋转 (+/-)90 deg左右x,yz匹配这个:

    • Z -axis 向前(或向后取决于您的投影矩阵和深度函数)
    • X -轴为右
    • Y -轴向上

    相对于您的相机/屏幕坐标系(投影矩阵)。然后平移到后面位置

  3. 申请POV旋转(可选)

    如果您可以从向前方向稍微旋转相机 View (鼠标注视),则执行此步骤

    camera*=rotation_POV
    
  4. 将矩阵转换为相机

    相机矩阵通常是它所表示的坐标系矩阵的逆矩阵:

    camera=Inverse(camera)
    

有关更多信息,请查看此处 understanding transform matrices其中包含C++中的OpenGL逆矩阵计算。

关于c - 在 OpenGL 中沿对象后面的方向旋转相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20184298/

相关文章:

c - 如何处理子函数中的 const 传播

c - 在程序的生命周期中使用 malloc

performance - 当点具有相同的深度时,opengl 深度缓冲区变慢

qt - 如何在 QOpenGLWidget 中使用 QPainter 进行叠加

opengl - 我使用多少个 VBO?

android - 模拟车速表

C++ 反向运动学算法/库,其中包括当链中多个节点的位置已知时的 IK 方法

graphics - 带孔的多边形三角剖分

c - 获取字符串文字参数的大小

C语言 : How is swapping pointers different from swapping the value pointed to?