cae  0.0.0
Cross-API graphics engine
Loading...
Searching...
No Matches
Camera.hpp
Go to the documentation of this file.
1///
2/// @file Camera.hpp
3/// @brief This file contains the camera class declaration
4/// @namespace cae
5///
6
7#pragma once
8
9#include "Engine/Common.hpp"
10
11#include <glm/gtc/matrix_transform.hpp>
12
13#include <string>
14
15namespace cae
16{
17
18 ///
19 /// @class Camera
20 /// @brief Class for camera
21 /// @namespace cae
22 ///
23 class Camera
24 {
25 public:
26 Camera(const glm::vec3 position, const glm::vec3 rotation, const glm::vec3 direction,
27 const float moveSpeed = CAMERA::MOVE_SPEED, const float lookSpeed = CAMERA::LOOK_SPEED,
28 const float fov = CAMERA::FOV, const float nearPlane = CAMERA::NEAR_PLANE,
29 const float farPlane = CAMERA::FAR_PLANE)
30 : m_position(position), m_rotation(rotation), m_direction(direction), m_moveSpeed(moveSpeed),
31 m_lookSpeed(lookSpeed), m_fov(fov), m_near(nearPlane), m_far(farPlane)
32 {
33 }
34 ~Camera() = default;
35
36 Camera(const Camera &) = delete;
37 Camera &operator=(const Camera &) = delete;
38 Camera(Camera &&) = delete;
39 Camera &operator=(Camera &&) = delete;
40
41 void setName(const std::string &name) { m_name = name; }
42 void setPosition(const glm::vec3 &position) { m_position = position; }
43 void setRotation(const glm::vec3 &rotation) { m_rotation = rotation; }
44 void setDirection(const glm::vec3 &direction) { m_direction = direction; }
45 void setMoveSpeed(const float speed) { m_moveSpeed = speed; }
46 void setLookSpeed(const float speed) { m_lookSpeed = speed; }
47 void setFov(const float fov) { m_fov = fov; }
48 void setNear(const float nearPlane) { m_near = nearPlane; }
49 void setFar(const float farPlane) { m_far = farPlane; }
50
51 [[nodiscard]] const std::string &getName() const { return m_name; }
52 [[nodiscard]] const glm::vec3 &getPosition() const { return m_position; }
53 [[nodiscard]] const glm::vec3 &getRotation() const { return m_rotation; }
54 [[nodiscard]] const glm::vec3 &getDirection() const { return m_direction; }
55 [[nodiscard]] const float &getMoveSpeed() const { return m_moveSpeed; }
56 [[nodiscard]] const float &getLookSpeed() const { return m_lookSpeed; }
57 [[nodiscard]] const float &getFov() const { return m_fov; }
58 [[nodiscard]] const float &getNear() const { return m_near; }
59 [[nodiscard]] const float &getFar() const { return m_far; }
60
61 [[nodiscard]] glm::mat4 getViewMatrix() const
62 {
63 return glm::lookAt(m_position, m_position + m_direction, glm::vec3(0.0F, 1.0F, 0.0F));
64 }
65 [[nodiscard]] glm::mat4 getProjectionMatrix(const float aspectRatio) const
66 {
67 return glm::perspective(glm::radians(m_fov), aspectRatio, m_near, m_far);
68 }
69 [[nodiscard]] glm::mat4 getViewProjection(const float aspectRatio) const
70 {
71 return getProjectionMatrix(aspectRatio) * getViewMatrix();
72 }
73
74 ///
75 /// @param direction Direction to move the camera
76 /// @param deltaTime Time delta for movement
77 /// @brief Move the camera in a given direction
78 ///
79 void move(const glm::vec3 &direction, const float deltaTime)
80 {
81 m_position += direction * m_moveSpeed * deltaTime;
82 }
83
84 ///
85 /// @param yawOffset Yaw offset to rotate the camera
86 /// @param pitchOffset Pitch offset to rotate the camera
87 /// @param deltaTime Time delta for rotation
88 /// @brief Rotate the camera by given yaw and pitch offsets
89 ///
90 void rotate(const float yawOffset, const float pitchOffset, const float deltaTime)
91 {
92 m_rotation.y += yawOffset * m_lookSpeed * deltaTime;
93 m_rotation.x += pitchOffset * m_lookSpeed * deltaTime;
94
95 m_rotation.x = std::min(m_rotation.x, 89.0F);
96 m_rotation.x = std::max(m_rotation.x, -89.0F);
97
99 }
100
101 private:
102 std::string m_name = CAMERA::NAME;
103
104 glm::vec3 m_position = glm::vec3(0.0F, 0.0F, 0.0F);
105 glm::vec3 m_rotation = glm::vec3(0.0F, 0.0F, 0.0F);
106 glm::vec3 m_direction = glm::vec3(0.0F, 0.0F, -1.0F);
107
110
114
116 {
117 const float yaw = glm::radians(m_rotation.y);
118 const float pitch = glm::radians(m_rotation.x);
119
120 m_direction.x = cos(pitch) * sin(yaw);
121 m_direction.y = std::sin(pitch);
122 m_direction.z = -cos(pitch) * cos(yaw);
123 m_direction = glm::normalize(m_direction);
124 }
125
126 }; // class Camera
127
128} // namespace cae
Class for camera.
Definition Camera.hpp:24
const glm::vec3 & getDirection() const
Definition Camera.hpp:54
const float & getLookSpeed() const
Definition Camera.hpp:56
float m_fov
Definition Camera.hpp:111
const glm::vec3 & getRotation() const
Definition Camera.hpp:53
Camera & operator=(const Camera &)=delete
Camera(const glm::vec3 position, const glm::vec3 rotation, const glm::vec3 direction, const float moveSpeed=CAMERA::MOVE_SPEED, const float lookSpeed=CAMERA::LOOK_SPEED, const float fov=CAMERA::FOV, const float nearPlane=CAMERA::NEAR_PLANE, const float farPlane=CAMERA::FAR_PLANE)
Definition Camera.hpp:26
const float & getFov() const
Definition Camera.hpp:57
void setMoveSpeed(const float speed)
Definition Camera.hpp:45
float m_lookSpeed
Definition Camera.hpp:109
void rotate(const float yawOffset, const float pitchOffset, const float deltaTime)
Rotate the camera by given yaw and pitch offsets.
Definition Camera.hpp:90
float m_near
Definition Camera.hpp:112
std::string m_name
Definition Camera.hpp:102
glm::vec3 m_rotation
Definition Camera.hpp:105
glm::mat4 getViewMatrix() const
Definition Camera.hpp:61
void setFar(const float farPlane)
Definition Camera.hpp:49
const std::string & getName() const
Definition Camera.hpp:51
const float & getFar() const
Definition Camera.hpp:59
void setPosition(const glm::vec3 &position)
Definition Camera.hpp:42
void setNear(const float nearPlane)
Definition Camera.hpp:48
~Camera()=default
const float & getMoveSpeed() const
Definition Camera.hpp:55
void move(const glm::vec3 &direction, const float deltaTime)
Move the camera in a given direction.
Definition Camera.hpp:79
glm::mat4 getProjectionMatrix(const float aspectRatio) const
Definition Camera.hpp:65
glm::mat4 getViewProjection(const float aspectRatio) const
Definition Camera.hpp:69
void setRotation(const glm::vec3 &rotation)
Definition Camera.hpp:43
glm::vec3 m_position
Definition Camera.hpp:104
Camera(Camera &&)=delete
void setName(const std::string &name)
Definition Camera.hpp:41
void setFov(const float fov)
Definition Camera.hpp:47
glm::vec3 m_direction
Definition Camera.hpp:106
float m_moveSpeed
Definition Camera.hpp:108
const float & getNear() const
Definition Camera.hpp:58
void setDirection(const glm::vec3 &direction)
Definition Camera.hpp:44
void updateDirectionFromRotation()
Definition Camera.hpp:115
float m_far
Definition Camera.hpp:113
Camera(const Camera &)=delete
void setLookSpeed(const float speed)
Definition Camera.hpp:46
Camera & operator=(Camera &&)=delete
const glm::vec3 & getPosition() const
Definition Camera.hpp:52
This file contains common constants used across the engine.
constexpr auto NEAR_PLANE
Definition Common.hpp:31
constexpr auto NAME
Definition Common.hpp:27
constexpr auto FOV
Definition Common.hpp:30
constexpr auto MOVE_SPEED
Definition Common.hpp:28
constexpr auto FAR_PLANE
Definition Common.hpp:32
constexpr auto LOOK_SPEED
Definition Common.hpp:29