Камера OpenGL внезапно прыгает при первом вводе мышью? - PullRequest
0 голосов
/ 29 марта 2019

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

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

void player::mouse_input(double &mouse_x_coordinate, double &mouse_y_coordinate, bool &first_mouse)
{
    if (first_mouse)
    {
        last_x = mouse_x_coordinate;
        last_y = mouse_y_coordinate;
        first_mouse = false;
    }

    float xoffset = mouse_x_coordinate - last_x;
    float yoffset = last_y - mouse_y_coordinate;
    last_x = mouse_x_coordinate;
    last_y = mouse_y_coordinate;

    xoffset *= sensitivity;
    yoffset *= sensitivity;

    yaw += xoffset;
    pitch += yoffset;

    if (pitch > 89.0f)
        pitch = 89.0f;
    if (pitch < -89.0f)
        pitch = -89.0f;

    glm::vec3 front;
    front.x = cos(glm::radians(yaw)) * cos(glm::radians(pitch));
    front.y = sin(glm::radians(pitch));
    front.z = sin(glm::radians(yaw)) * cos(glm::radians(pitch));
    a_forward_direction = glm::normalize(front);
}

параметры mouse_x_coordinate и mouse_y_coordinate являются глобальными переменными, содержащими координаты мыши и x, которые я получил с помощью функции glfwSetCursorPosCallback().

first_mouse Boolean также является глобальной переменной, инициализированной как true.

Вот инициализация вектора a_forward_direction:

glm::vec3  a_forward_direction = glm::vec3(0.0, 0.0, -1.0);

после следования через метод mouse_input, я обнаружил, чтозначения для фронта должны совпадать, но это все равно вызывает скачок.

Может кто-нибудь сказать мне, почему мышь все еще прыгает?

...