Я пытаюсь создать 3D камеру вокруг игрока в игре, созданной с помощью LWJGL3. С помощью колеса прокрутки мыши вы сможете увеличивать изображение на плеере. Какой должна быть моя функция?
Как я запрашиваю каждое событие значение колесика мыши.
glfwSetScrollCallback(window.getWindowHandle(), (windowHandle, xoffset, yoffset) -> {
currentMouseWheel.x = xoffset;
currentMouseWheel.y = yoffset;
});
Моя функция для получения дельты прокрутки на основе предыдущего вызова: (PS: input вызывается для каждого gameLoop)
public void input(Window window) {
dMouseWheel.x = 0;
dMouseWheel.y = 0;
if (inWindow) {
double dx = currentMouseWheel.x - previousMouseWheel.x;
double dy = currentMouseWheel.y - previousMouseWheel.y;
if (dx != 0) {
dMouseWheel.x = (float) dx;
}
if (dy != 0) {
dMouseWheel.y = (float) dy;
}
}
previousMouseWheel.x = currentMouseWheel.x;
previousMouseWheel.y = currentMouseWheel.y;
}
xoffset
и yoffset
никогда не равны 0.
Мне нужно сделать большой импульс на колесе прокрутки, чтобы увидеть изменение дельты.
Что я должен делать ? Можете привести пример?
ОБНОВЛЕНИЕ: Я узнал! Как это сделать:
Сначала установите 2 переменных вектора:
private Vector2d currentMouseWheel;
private Vector2f dMouseWheel;
Затем в обратном вызове Scroll:
glfwSetScrollCallback(window.getWindowHandle(), (windowHandle, xoffset, yoffset) -> {
currentMouseWheel.x = xoffset;
currentMouseWheel.y = yoffset;
});
Затем на каждой итерации игрового цикла вывызовите функцию для ее обновления
public void input() {
dMouseWheel.x = 0;
dMouseWheel.y = 0;
if (inWindow) {
dMouseWheel.x = (float) currentMouseWheel.x;
dMouseWheel.y = (float) currentMouseWheel.y;
}
currentMouseWheel.x = 0;
currentMouseWheel.y = 0;
}
Тогда у вас будет dMouseWheel с правильной дельтой прокрутки!