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