Мне интересно, что является хорошим подходом к "неограниченному движению мыши"? (Как и в играх от первого лица, где можно бесконечно оглядываться)
Я использую 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? Я пытался установить позицию курсора обратно в центр после каждого ввода (), но это было очень затруднительно.
Я не ищу исправления в моем коде, но для хорошего подхода, который является лучшим практика.