Я инициализирую класс камеры с векторов глаз, цели и вверх с помощью функции glm::lookAt
, затем получаю значения Yaw, Pitch и Roll от glm::yaw
и так далее.
Я сделал метод поворота, который требует xoffset
и yoffset
, чтобы повернуть камеру вокруг своей целевой точки.
void ThirdPersonCamera::Rotate(float _yaw, float _pitch) {
view.yaw += _yaw;
view.pitch += _pitch;
float radius = glm::length(view.GetEye() - view.GetTarget());
view.GetEye().x = glm::cos(glm::radians(view.yaw)) * glm::cos(glm::radians(view.pitch)) * radius;
view.GetEye().y = glm::sin(glm::radians(view.pitch)) * radius;
view.GetEye().z = glm::sin(glm::radians(view.yaw)) * glm::cos(glm::radians(view.pitch)) * radius;
view.init();
}
где view.init()
создает матрицу вида из lookAt
.
проблема заключается в том, что для первого поворота значения X и Z глаза меняются, поэтому камера перепрыгивает со своего места на другое, например, если камера инициализируется в (0,10,10), то после первого движения глаз становится в (10 , 10,0) тогда нормально работает.