【问题标题】:LWJGL First Person Camera RotationLWJGL 第一人称相机旋转
【发布时间】:2016-02-16 19:46:17
【问题描述】:

我在 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 旋转分别可以正常工作,但是当它们一起使用时,它们根本不起作用。

我知道这只是我代码的一小部分,但它是唯一处理旋转的部分,所以问题一定出在某个地方。

【问题讨论】:

  • 如果你有一个定义你的人的位置的矩阵,你可以使用它的逆矩阵作为视图矩阵。

标签: java camera rotation lwjgl


【解决方案1】:

对我来说突出的缺陷是您旋转的值。

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

现在您还有 glRotatef,它以弧度旋转,与度数相比,它很小。(360 度 -> 6.28 弧度)

现在取 30000 像素,用它作为旋转的弧度数,得到 17188.7 度的旋转。 这就是你螺旋式上升的原因(47 转/几毫秒)

如果将 dy 和 dx 除以几百,您需要做什么。 而且你仍然可以通过在 glRotatef 方法中使用 Math.toRadians 来使用度数

【讨论】:

    猜你喜欢
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多