LWJGL無制限のマウスの動き

bluefireoly:

私は、「無制限のマウスの動き」に良い方法は何か疑問に思って?(あなたが無限に見て回ることができます最初の人のゲームのように)

私は(Java用のバインディングを提供します)OpenGLとLWJGLを使用しています。:私は、次の可能バインディング持っhttps://www.lwjgl.org/customize現在、私は唯一のマウス入力を処理するためにGLFWを使用しています(内容の下にリストされているが)。

私の現在のアプローチは以下の通りであるが、明らかに、カーソルは、最終的に画面の端に到達します。

public class MouseInput {

    private final Vector2d previousPosition;
    private final Vector2d currentPosition;

    private final Vector2f displayVector;

    private boolean inWindow = false;

    // [some code here]

    public void init() {

        glfwSetCursorPosCallback(window.getHandle(), (windowHandle, xpos, ypos) -> {
            currentPosition.x = xpos;
            currentPosition.y = ypos;
        });

        glfwSetCursorEnterCallback(window.getHandle(), (windowHandle, entered) -> {
            inWindow = entered;
        });

        // [some code here]

    }

    public void input() {

        displayVector.x = 0;
        displayVector.y = 0;

        if (previousPosition.x > 0 && previousPosition.y > 0 && inWindow) {

            double deltaX = currentPosition.x - previousPosition.x;
            double deltaY = currentPosition.y - previousPosition.y;

            if (deltaX != 0) {
                displayVector.y = (float) deltaX;
            }
            if (deltaY != 0) {
                displayVector.x = (float) deltaY;
            }

        }

        previousPosition.x = currentPosition.x;
        previousPosition.y = currentPosition.y;

    }

    // [some code here]

}

今、私はカメラを回転させるようにどこか計算displayVectorを使用することができます。

私はGLFWとは異なるものを使用する必要がありますか?I)は、(すべての入力後に中央にカーソルバックの位置を設定しようとしたが、それは非常にグリッチました。

私は私のコードの修正を探しているが、良いアプローチのためのベストプラクティスであるわけではありません。

genpfault:

glfwSetInputMode()

  • GLFW_CURSOR_DISABLED皮および仮想および提供、カーソルをつかむ無制限のカーソルの動きを。これは、例えば3Dカメラのコントロールを実装するために有用です。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=25414&siteId=1