2

我正在开发一种太空射击游戏,您可以在其中围绕 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(在一个名为 vector3d 的类中的 x、y、z)。

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

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

4

1 回答 1

2

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

于 2012-09-09T01:02:13.660 回答