LibGDX限制了PerspectiveCamera的FPS视图

我正在使用LibGDX,我试图在我的游戏中实现一个FPS相机。 由于多种原因,我没有使用FirstPersonCameraController:

  • 我不想触摸滚动(只有偏航和俯仰),用相机在侧面看地平线像波浪一样上下(意思是滚动正在改变)
  • 我不想拖,我想让相机总是随着鼠标移动。
  • 无论玩家在看什么,我都希望动作保持一致。 即使他看着地面,我也不希望它变慢。

所以我想出了这个几乎我想要的东西:

@Override public boolean mouseMoved(int screenX, int screenY) { float deltaX = (mousePos.x - screenX) * sensitivity; float deltaY = (mousePos.y - screenY) * -sensitivity; Vector3 tmpAxis = game.getGame().getPool().obtain(Vector3.class); game.getCamera().rotate(Vector3.Y, deltaX); tmpAxis.set(game.getCamera().direction.z, 0, -game.getCamera().direction.x); game.getCamera().rotate(tmpAxis, deltaY); //if(game.getCamera().up.y < 0) // game.getCamera().up.y = 0; mousePos.set(screenX, screenY, 0); game.getGame().getPool().free(tmpAxis); return true; } 

但是,我有一个注释行描述的问题。 当摄像机变为低或太高时(向上vector的y值变为负值),旋转反转,旋转开始使其返回。 在实践中,它只是闪烁很多,当我尝试返回时,我有一半正常返回的机会,并有1/2的机会向后看我的相机颠倒(如果向上的负向)。

所以自然而然,我想要locking的运动,所以它永远不能通过他的脚或通过天空。 locking向上是容易的,我只需要防止它消极,但我需要更换方向vector也。 但是,我不知道如何“replace”方向vector。 我search谷歌如何设置相机旋转或只是如何得到它,没有发现任何令人信服的。

我刚刚尝试添加game.getCamera().direction.y = -1f; 对我的评论if让它看起来低下时,我不想让它过去的点。 但是,我发现方向vector不规范,这真是令人困惑。