diff --git a/modules/camera/include/vkcv/camera/Camera.hpp b/modules/camera/include/vkcv/camera/Camera.hpp index d9eacbee4df2080549a671e863682835d1bba538..7d91b4b45247cd171c174a4dd02651a0b8e63436 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 0bdcf7885175a551cf71d25babf851adfc5017fd..0f5cf61249689c00bc207bca69dc08d6cb9263b2 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 f721b7e2a38a47533a0775f50b9de294099a2107..60bc08a081616e6c973e44302364a3fabe61219e 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 05bb6276503567a82c468c432f85ff44583aef3e..2dbf6c0fa69b4a485a1110da14ccd0d2caac362e 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 18d7573253f0cc70a24fb5b82aaf79e8975e3619..0acd113905ed01147eb64d5a1f82870f3f306f2f 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;