From 48081157a1bdbc79baeb1105e95cd2c8d99ae7c2 Mon Sep 17 00:00:00 2001 From: Tobias Frisch <tfrisch@uni-koblenz.de> Date: Mon, 14 Jun 2021 06:44:58 +0200 Subject: [PATCH] [#42] Fixed glfw include, some warnings and corrected Y axis Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de> --- modules/camera/include/vkcv/camera/Camera.hpp | 2 +- .../include/vkcv/camera/CameraController.hpp | 1 - modules/camera/src/vkcv/camera/Camera.cpp | 43 ++++++++++--------- .../src/vkcv/camera/PilotCameraController.cpp | 9 ++-- .../vkcv/camera/TrackballCameraController.cpp | 7 ++- 5 files changed, 35 insertions(+), 27 deletions(-) diff --git a/modules/camera/include/vkcv/camera/Camera.hpp b/modules/camera/include/vkcv/camera/Camera.hpp index d9eacbee..7d91b4b4 100644 --- a/modules/camera/include/vkcv/camera/Camera.hpp +++ b/modules/camera/include/vkcv/camera/Camera.hpp @@ -92,7 +92,7 @@ namespace vkcv { * @brief Gets the current field of view of the camera in radians * @return[in] The current field of view in radians */ - const float getFov() const; + float getFov() const; /** * @brief Sets the field of view of the camera to @p fov in radians diff --git a/modules/camera/include/vkcv/camera/CameraController.hpp b/modules/camera/include/vkcv/camera/CameraController.hpp index 0bdcf788..0f5cf612 100644 --- a/modules/camera/include/vkcv/camera/CameraController.hpp +++ b/modules/camera/include/vkcv/camera/CameraController.hpp @@ -2,7 +2,6 @@ #include "Camera.hpp" #include "vkcv/Window.hpp" -#include <glfw/glfw3.h> namespace vkcv { diff --git a/modules/camera/src/vkcv/camera/Camera.cpp b/modules/camera/src/vkcv/camera/Camera.cpp index f721b7e2..60bc08a0 100644 --- a/modules/camera/src/vkcv/camera/Camera.cpp +++ b/modules/camera/src/vkcv/camera/Camera.cpp @@ -9,17 +9,17 @@ namespace vkcv { m_center = glm::vec3(0.0f, 0.0f, 0.0f); lookAt(m_position, m_center, m_up); glm::vec3 front = glm::normalize(m_center - m_position); - m_pitch = atan2(front.y, sqrt(front.x * front.x + front.z * front.z)); - m_yaw = atan2(front.x, front.z); + m_pitch = std::atan2(front.y, std::sqrt(front.x * front.x + front.z * front.z)); + m_yaw = std::atan2(front.x, front.z); } Camera::~Camera() = default; void Camera::lookAt(glm::vec3 position, glm::vec3 center, glm::vec3 up){ - m_view = glm::lookAt(position, center, up); - m_position = position; - m_up = up; - m_center = center; + m_position = position; + m_center = center; + m_up = up; + m_view = glm::lookAt(m_position, m_center, m_up); } void Camera::getNearFar( float &near, float &far) const { @@ -43,13 +43,12 @@ namespace vkcv { return m_projection * m_view; } - const float Camera::getFov() const { + float Camera::getFov() const { return m_fov; } void Camera::setFov( float fov){ - m_fov = fov; - setPerspective( m_fov, m_ratio, m_near, m_far); + setPerspective(fov, m_ratio, m_near, m_far); } float Camera::getRatio() const { @@ -57,29 +56,33 @@ namespace vkcv { } void Camera::setRatio(float ratio){ - m_ratio = ratio; - setPerspective( m_fov, m_ratio, m_near, m_far); + setPerspective( m_fov, ratio, m_near, m_far); } - void Camera::setNearFar( float near, float far){ - m_near = near; - m_far = far; - setPerspective(m_fov, m_ratio, m_near, m_far); + void Camera::setNearFar(float near, float far){ + setPerspective(m_fov, m_ratio, near, far); } - void Camera::setPerspective(float fov, float ratio, float near, float far){ + void Camera::setPerspective(float fov, float ratio, float near, float far) { + const glm::mat4 y_correction ( + 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, -1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f + ); + m_fov = fov; m_ratio = ratio; m_near = near; m_far = far; - m_projection = glm::perspective( m_fov, ratio, m_near, m_far); + m_projection = y_correction * glm::perspective(m_fov, m_ratio, m_near, m_far); } glm::vec3 Camera::getFront() const { glm::vec3 direction; - direction.x = sin(glm::radians(m_yaw)) * cos(glm::radians(m_pitch)); - direction.y = sin(glm::radians(m_pitch)); - direction.z = cos(glm::radians(m_yaw)) * cos(glm::radians(m_pitch)); + direction.x = std::sin(glm::radians(m_yaw)) * std::cos(glm::radians(m_pitch)); + direction.y = std::sin(glm::radians(m_pitch)); + direction.z = std::cos(glm::radians(m_yaw)) * std::cos(glm::radians(m_pitch)); return glm::normalize(direction); } diff --git a/modules/camera/src/vkcv/camera/PilotCameraController.cpp b/modules/camera/src/vkcv/camera/PilotCameraController.cpp index 05bb6276..2dbf6c0f 100644 --- a/modules/camera/src/vkcv/camera/PilotCameraController.cpp +++ b/modules/camera/src/vkcv/camera/PilotCameraController.cpp @@ -1,5 +1,7 @@ #include "vkcv/camera/PilotCameraController.hpp" + #include <iostream> +#include <GLFW/glfw3.h> namespace vkcv { @@ -26,7 +28,7 @@ namespace vkcv { void PilotCameraController::changeFov(double offset){ float fov = m_camera->getFov(); float fov_range = m_fov_max - m_fov_min; - float fov_stepsize = glm::radians(fov_range)/m_fov_nsteps; + float fov_stepsize = glm::radians(fov_range) / static_cast<float>(m_fov_nsteps); fov -= (float) offset*fov_stepsize; if (fov < glm::radians(m_fov_min)) { fov = glm::radians(m_fov_min); @@ -121,8 +123,9 @@ namespace vkcv { } void PilotCameraController::mouseMoveCallback(double x, double y) { - float xoffset = x - m_lastX; - float yoffset = m_lastY - y; + auto xoffset = static_cast<float>(x - m_lastX); + auto yoffset = static_cast<float>(y - m_lastY); + m_lastX = x; m_lastY = y; diff --git a/modules/camera/src/vkcv/camera/TrackballCameraController.cpp b/modules/camera/src/vkcv/camera/TrackballCameraController.cpp index 18d75732..0acd1139 100644 --- a/modules/camera/src/vkcv/camera/TrackballCameraController.cpp +++ b/modules/camera/src/vkcv/camera/TrackballCameraController.cpp @@ -1,5 +1,7 @@ #include "vkcv/camera/TrackballCameraController.hpp" +#include <GLFW/glfw3.h> + namespace vkcv { TrackballCameraController::TrackballCameraController() { @@ -82,8 +84,9 @@ namespace vkcv { } void TrackballCameraController::mouseMoveCallback(double x, double y) { - float xoffset = x - m_lastX; - float yoffset = m_lastY - y; + auto xoffset = static_cast<float>(x - m_lastX); + auto yoffset = static_cast<float>(y - m_lastY); + m_lastX = x; m_lastY = y; -- GitLab