5#include "hellfire/ecs/CameraComponent.h"
51 return projection_matrix_;
79 camera_data_.pitch = glm::clamp(pitch, -89.0f, 89.0f);
90 if (!transform)
return;
93 const glm::vec3 position = transform->get_position();
94 const glm::vec3 direction = glm::normalize(target - position);
96 camera_data_.pitch = glm::degrees(asin(direction.y));
97 camera_data_.yaw = glm::degrees(atan2(direction.z, direction.x));
117 const float half_width = size * aspect * 0.5f;
118 const float half_height = size * 0.5f;
126 front.x = cos(glm::radians(camera_data_.yaw)) * cos(glm::radians(camera_data_.pitch));
127 front.y = sin(glm::radians(camera_data_.pitch));
128 front.z = sin(glm::radians(camera_data_.yaw)) * cos(glm::radians(camera_data_.pitch));
129 front_ = glm::normalize(front);
132 right_ = glm::normalize(glm::cross(front_, world_up_));
133 up_ = glm::normalize(glm::cross(right_, front_));
139 view_matrix_ = glm::mat4(1.0f);
144 const glm::vec3 position = transform->get_position();
145 view_matrix_ = glm::lookAt(position, position + front_, up_);
151 projection_matrix_ = glm::perspective(glm::radians(fov_), aspect_ratio_, near_plane_, far_plane_);
153 projection_matrix_ = glm::ortho(ortho_left_, ortho_right_, ortho_bottom_, ortho_top_, near_plane_, far_plane_);
void set_camera_type(CameraType type)
void update_view_matrix() const
void update_orthographic_bounds()
void look_at(const glm::vec3 &target)
void set_orthographic(float left, float right, float bottom, float top, float near_plane, float far_plane)
static CameraComponent * create_orthographic(float size=10.0f, float aspect=16.0f/9.0f, float near_plane=0.1f, float far_plane=100.0f)
glm::mat4 get_projection_matrix() const
void set_clip_planes(float near_plane, float far_plane)
static CameraComponent * create_perspective(float fov=45.0f, float aspect=16.0f/9.0f, float near_plane=0.1f, float far_plane=100.0f)
void update_projection_matrix() const
glm::mat4 get_view_matrix() const
void set_pitch(float pitch)
CameraComponent(CameraType type=CameraType::PERSPECTIVE)
void set_mouse_sensitivity(float sensitivity)
void set_aspect_ratio(float aspect)
void set_perspective(float fov, float aspect, float near_plane, float far_plane)
void set_target(const glm::vec3 &target)
void update_camera_vectors()
Entity & get_owner() const