我目前正在使用 JOGL 设计我的第一个 FPS 游戏。(OpenGL 的 Java 绑定)。
到目前为止,我已经能够生成“世界”(一系列立方体)和玩家模型。我的播放器和立方体之间的碰撞检测效果很好。
现在我正在尝试添加枪支。我正确绘制了枪模型并加载到玩家模型上。我尝试使用的第一把枪是激光枪,它可以向您瞄准的任何目标发射瞬时视距激光。在我着手实现敌人模型之前,我想让激光和墙壁之间的碰撞检测工作。
目前,我的激光是由一系列小立方体一个接一个地绘制的。第一个立方体在玩家枪的末端绘制,然后从那里连续绘制。这个想法是继续绘制激光的立方体,直到检测到与某物发生碰撞,即世界上的立方体。
我知道立方体在世界上的位置。问题是我必须调用 glMatrixPush 来绘制我的角色模型。然后在此模型视图中绘制激光。这意味着我失去了旧的坐标系 - 所以我在一个系统中绘制世界,然后在另一个系统中绘制激光。在这个播放器矩阵中,我多次调用 glRotate 和 glTranslate,以便将所有内容与相机旋转的方式同步。然后通过沿这个新系统的 z 轴平移来构建激光器。
我的问题是,通过所有这些转换,我不再知道我的激光在地图坐标系中的位置,主要是由于涉及相机的旋转。
有谁知道一种方法 - 或有任何想法,如何解决这个问题?我相信我需要一种方法将激光的新坐标转换为地图的旧坐标,但我不确定如何撤消已对其进行的所有转换。OpenGL 可能还提供了一些功能来处理我不知道的这类问题。