#include "Camera.h" Camera::Camera(float yFOV, float aspectRatio, float nearClip, float farClip) { m_FOV = yFOV; m_AspectRatio = aspectRatio; m_NearClip = nearClip; m_FarClip = farClip; m_Position = glm::vec3(0.0); m_Pitch = 0.f; m_Yaw = 0.f; UpdateProjectionMatrix(); UpdateViewMatrix(); } glm::vec3 Camera::Forward() { return glm::rotate(glm::vec3(0.f, 0.f, -1.f), -m_Yaw, glm::vec3(0.f, 1.f, 0.f)); } glm::vec3 Camera::Right() { return glm::rotate(glm::vec3(1.f, 0.f, 0.f), -m_Yaw, glm::vec3(0.f, 1.f, 0.f)); } glm::mat4 Camera::Orientation() { glm::mat4 orientation(1.f); orientation = glm::rotate(orientation, m_Pitch, glm::vec3(1.f, 0.f, 0.f)); orientation = glm::rotate(orientation, m_Yaw, glm::vec3(0.f, 1.f, 0.f)); return orientation; } void Camera::AspectRatio(float val) { m_AspectRatio = val; UpdateProjectionMatrix(); } void Camera::Position(glm::vec3 val) { m_Position = val; UpdateViewMatrix(); } void Camera::Pitch(float val) { m_Pitch = val; UpdateViewMatrix(); } void Camera::Yaw(float val) { m_Yaw = val; UpdateViewMatrix(); } void Camera::UpdateProjectionMatrix() { m_ProjectionMatrix = glm::perspective( m_FOV, m_AspectRatio, m_NearClip, m_FarClip ); } void Camera::UpdateViewMatrix() { m_ViewMatrix = glm::translate(Orientation(), -m_Position); }