从xyz周围的旋转中找到xyz方向

时间:2012-09-08 15:57:48

标签: c++ math opengl

我正在开发一种太空射击游戏,你可以在x,y和z轴上旋转你的船,从而向任何方向射击。为了旋转船(我在c ++中使用openGL),我在x,y或z轴周围旋转0-360度。相机始终看起来方向相同(沿z轴向下,如“默认”)。你只需看看旋转的船。

示例:glRotatef(-90.0f,1.0f,0.0f,0.0f); 上面的例子将使船绕x轴旋转-90度。如果船在正常的y轴上向上指向,就像在旋转之前的普通太空射击者一样,船在旋转后将沿着负z轴指向inn。

我想知道的是,如何在任何时候能够计算船舶的“方向”,并将其转换为vector3d(x,y,z在一个名为vector3d的类中)

我通过将当前位置(xyz)添加到我也存储在vector3d中的速度来计算任何移动对象的位置(另一个vector3d,简单地说是x,y和z),并将其乘以delta时间(自上次以来的时间)帧/更新)。当我从宇宙飞船射击弹丸时,我想让船的方向向量用它作为我射击的射弹速度的基础,这样我就可以用我计算的方式计算射弹的位置通过简单地将当前射弹位置添加到速度乘以deltatime来确定其他物体的位置。

由于我有旋转形式的船的方向,围绕x,y和z,我认为它必须是可能的,以某种方式将其转换为vector3d,以矢量格式表示相同的方向(如果这样做的话) )。

1 个答案:

答案 0 :(得分:2)

采取您感兴趣的方向的矢量,例如原始未旋转船舶的 z 轴。这是一个像(0,0,1)这样的向量。现在将旋转矩阵应用于它,就像在glRotate documentation中找到它一样。您可以安全地忽略此矩阵的最后一行和一列,因为您只是围绕原点旋转。该矩阵×向量乘法的结果将是给定旋转矩阵下的向量图像。