OpenGL摄像头在第一次输入鼠标时突然跳转?

时间:2019-03-29 19:52:12

标签: c++ opengl mouselistener glm-math

我一直在使用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_coordinatemouse_y_coordinate参数是包含我通过glfwSetCursorPosCallback()函数获得的鼠标x和y坐标的全局变量。

first_mouse布尔值也是一个初始化为true的全局变量。

这是a_forward_direction向量的初始化:

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

在使用mouse_input方法之后,我发现front的值应该匹配,但仍然会导致跳转。

谁能告诉我为什么鼠标仍然跳动?

0 个答案:

没有答案