LWJGL неограниченное движение мыши - PullRequest
1 голос
/ 05 марта 2020

Мне интересно, что является хорошим подходом к "неограниченному движению мыши"? (Как и в играх от первого лица, где можно бесконечно оглядываться)

Я использую OpenGL и LWJGL (которые предоставляют привязки для Java). У меня есть следующие возможные привязки: 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]

}

Теперь я могу использовать вычисленный вектор дисплея где-нибудь еще, чтобы вращать камеру.

Нужно ли использовать что-то отличное от GLFW? Я пытался установить позицию курсора обратно в центр после каждого ввода (), но это было очень затруднительно.

Я не ищу исправления в моем коде, но для хорошего подхода, который является лучшим практика.

1 Ответ

2 голосов
/ 05 марта 2020

glfwSetInputMode():

  • GLFW_CURSOR_DISABLED скрывает и захватывает курсор, обеспечивая виртуальное и неограниченное перемещение курсора. Это полезно для реализации, например, элементов управления 3D-камерой.
...