我正在研究一种太空射击游戏,你可以绕着x,y和z轴旋转你的飞船,这样就可以向任何方向射击。为了旋转轮船(我在c++中使用openGL ),im绕x,y或z轴旋转0-360度。相机将始终看起来相同的方向(沿着z轴向下,如“默认”)。你只需看着船在旋转。
示例: glRotatef(-90.0f,1.0f,0.0f,0.0f);上面的示例将使船绕x轴旋转-90度。如果船在旋转前指向正y轴,就像在普通的太空射击中一样,在旋转后,船将指向负z轴。
我正在努力弄清楚的是,如何在任何时候都能够计算出船的“方向”,并将其转换为一个vector3d (在一个名为vector3d的类中的x,y,z)。
我通过将当前位置( x,y,z)与我也存储在vector3d中的速度相加来计算任何移动对象的位置(另一个vector3d,简称x,y和z),并将其乘以增量时间(自上一帧/更新以来的时间)。当我从宇宙飞船上发射一个弹丸时,我想要有飞船的方向矢量作为我发射的弹丸速度的基础,这样我就可以计算出弹丸的位置,就像我计算其他物体的位置一样,只需简单地将当前弹丸位置与速度乘以增量相加即可。
由于我有围绕x,y和z的旋转形式的船的方向,我认为一定可以以某种方式将其转换为以向量格式表示相同方向的vector3d (如果这有意义的话)。
发布于 2012-09-09 09:02:14
取你感兴趣的方向的向量,例如原始未旋转的船的z轴。这是一个类似于(0,0,1)的向量。现在将旋转矩阵应用于它,就像您在glRotate documentation中找到的一样。您可以安全地忽略此矩阵的最后一行和最后一列,因为您只围绕原点旋转。该矩阵×向量乘法的结果将是给定旋转矩阵下的向量的图像。
https://stackoverflow.com/questions/12332235
复制相似问题