From 2e4baa3596a6de76598c9b7e74c893a87200cc7f Mon Sep 17 00:00:00 2001 From: Robert Date: Sun, 24 Jan 2021 15:10:22 +0100 Subject: [PATCH] Bound camera tilting --- src/camera.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/camera.cpp b/src/camera.cpp index 9dd411e..fed5cf0 100644 --- a/src/camera.cpp +++ b/src/camera.cpp @@ -1,6 +1,8 @@ #include "camera.hpp" +#include #include +#include #include #include #include @@ -92,14 +94,24 @@ namespace oglu void Camera::Pan(float angle) { - front = glm::rotate(glm::angleAxis(glm::radians(angle), up), front); + front = glm::rotate(glm::angleAxis(glm::radians(angle), glm::vec3(0.0f, 1.0f, 0.0f)), front); right = glm::normalize(glm::cross(front, glm::vec3(0.0f, 1.0f, 0.0f))); } void Camera::Tilt(float angle) { - front = glm::rotate(glm::angleAxis(glm::radians(angle), right), front); - up = glm::normalize(glm::cross(right, front)); + glm::vec3 futureFront = glm::rotate(glm::angleAxis(glm::radians(angle), right), front); + glm::vec3 futureUp = glm::normalize(glm::cross(right, futureFront)); + + if (futureUp.y < 0.01f) + { + futureUp.y = 0.01f; + futureUp = glm::normalize(futureUp); + futureFront = glm::cross(up, right); + } + + front = futureFront; + up = futureUp; } void Camera::Roll(float angle)