Движение камеры от третьего лица в LWJGL3 - PullRequest
0 голосов
/ 18 октября 2018

Недавно я следовал учебному пособию ThinMatrix по OpenGL по созданию игры на Java.Однако, поскольку он использует LWJGL2, а я использую LWJGL3, есть несколько отличий, которые требуют некоторого обходного решения.Я застрял в одном месте, в частности, касающемся создания персонажа от третьего лица на «игроке».

Я сделал достаточно, чтобы при нажатии и перетаскивании экрана камера вращалась вокруг игрока, какдолжно.Однако, когда я отпускаю и двигаю мышь, чтобы сделать еще один поворот, вместо продолжения от того места, где находится позиция, он сбрасывает его относительно того, где находится мой второй щелчок.

Поскольку LWJGL3 не имеет mouse.getDY() или mouse.getDX (), я сделал один в своем классе DisplayManager следующим образом:

public float getDY() {
    newMouseY = (float) getMouseY();
    float dy = newMouseY - oldMouseY;
    oldMouseY = newMouseY;
    return dy;
}

public float getDX() {
    newMouseX = (float) getMouseX();
    float dx = newMouseX - oldMouseX;
    oldMouseX = newMouseX;
    return dx;
}

И я называю его в своем классе камеры следующим образом:

private void calculatePitch(DisplayManager window) {
    if (window.isMouseDown(GLFW.GLFW_MOUSE_BUTTON_LEFT)) {
        float pitchChange = window.getDY() * 0.2f;
        pitch -= pitchChange;
    }
}

private void calculateAngleAroundPlayer(DisplayManager window) {
    if (window.isMouseDown(GLFW.GLFW_MOUSE_BUTTON_LEFT)) {
        float angleChange = window.getDX() * 0.3f;
        angleAroundPlayer -= angleChange;
    }
}

I 'Я просто не уверен, должно ли это работать, и я упускаю что-то действительно очевидное, или это невозможно сделать таким образом.Я довольно новичок в разработке игр.

1 Ответ

0 голосов
/ 19 октября 2018

Мне удалось выяснить проблему, все, что мне нужно было сделать, это снова вызвать мои функции getDX () и getDY () после нажатия мыши в моих вычислениях:

private void calculatePitch(DisplayManager window) {
    if (window.isMouseDown(GLFW.GLFW_MOUSE_BUTTON_LEFT)) {
        float pitchChange = window.getDY(window) * 0.2f;
        pitch += pitchChange;
    }
    window.getDY(window);
}

private void calculateAngleAroundPlayer(DisplayManager window) {
    if (window.isMouseDown(GLFW.GLFW_MOUSE_BUTTON_LEFT)) {
        float angleChange = window.getDX(window) * 0.3f;
        angleAroundPlayer -= angleChange;
    }
    window.getDX(window);
}
...