LWJGL第一人称相机旋转

时间:2016-02-16 19:46:17

标签: java camera rotation lwjgl

我在LWJGL 2上制作第一人称相机时遇到了问题。我使用以下代码根据鼠标的移动方式旋转相机(向上和向下)。这基本上是每个其他教程所具有的,但是,它的运动是有缺陷的,最终会失控。

    float mouseDX = Mouse.getDX();
    float mouseDY = Mouse.getDY();

    rotation.x = mouseDX;
    rotation.y = mouseDY;

    glRotatef(rotation.y, 1, 0, 0);
    glRotatef(rotation.x, 0, 1, 0);

旋转是Vector3f

我知道rotation.y正在旋转x访问,而x正在旋转y。我不完全确定为什么,但除非这样,否则它对我不起作用。问题可能与此有关。

这是我制作的视频,展示了我的意思: https://www.youtube.com/watch?v=V6Iu5oQuWo4&feature=youtu.be

在视频中我尝试显示x和y旋转分别正常工作,但是当它们一起使用时它们根本不起作用。

我知道这只是我代码的一小部分,但它是处理轮换的唯一部分,所以问题必定存在于某处。

1 个答案:

答案 0 :(得分:0)

对我来说突出的缺陷就是你旋转的价值。

Mouse.getDY返回y像素的变化,因此如果将鼠标移动到屏幕的一半,通常会移动 300像素(800x600)。

现在你也有了旋转弧度的glRotatef,它与度数相比很小。(360度 - > 6.28弧度)

现在需要300个像素,将其用作旋转的弧度数,并获得17188.7度的旋转。 这就是螺旋式上升的原因(47转/几毫秒)

如果将dy和dx分成几百个,你需要做什么。 您还可以在glRotatef方法中使用Math.toRadians来使用度数