Как исправить переворот высоты тона/взгляда при повороте тональности более чем на 90 градусов?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как исправить переворот высоты тона/взгляда при повороте тональности более чем на 90 градусов?

Сообщение Anonymous »

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

Код: Выделить всё

void Camera::matrix(float fov, float nearPlane, float farPlane, Shader &shader, const char* uniform) {

mat4 view = mat4(1.0f);
mat4 proj = mat4(1.0f);

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

view = lookAt(pos, pos + front, up);
proj = perspective(radians(fov), ((float)width / (float)height), nearPlane, farPlane);

glUniformMatrix4fv(glGetUniformLocation(shader.shaderProgram, uniform), 1, GL_FALSE, glm::value_ptr(proj * view));

}

void Camera::look() {

newMouseX = getMouseX();
newMouseY = getMouseY();

float dx = (float) (newMouseX - oldMouseX) * getDeltaTime();
float dy = (float) (newMouseY - oldMouseY) * getDeltaTime();

yaw += dx * sensitivity;
pitch += dy * sensitivity;

oldMouseX = newMouseX;
oldMouseY = newMouseY;

}

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

Подробнее здесь: https://stackoverflow.com/questions/781 ... 90-degrees
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»