Elevate Engine 1
Loading...
Searching...
No Matches
Camera.h
Go to the documentation of this file.
1#pragma once
7
8#include "glm/glm.hpp"
9
10// TODO add ortographic or projection settings (bool value or constructors)
11namespace Elevate
12{
13 class Camera : public Component
14 {
15 public:
17 EECATEGORY("Rendering")
18
19 // All possible constructors
20 Camera(float fov = 60.0f, bool overrideCurrent = true);
21 Camera(float fov, float aspectRatio, bool overrideCurrent = true);
22
23 const void UpdateAspectRatio(float aspectRatio);
24
25 inline const glm::mat4& GetProjectionMatrix() const { return m_projectionMatrix; }
26 glm::mat4 GenViewMatrix() const;
27
28 inline const glm::vec3& GetFrontVec() const { return m_front; }
29 inline const glm::vec3& GetRightVec() const { return m_right; }
30 inline const glm::vec3& GetUpVec() const { return m_up; }
31
32 inline const float GetFOV() const { return m_FOV; }
33 inline void SetFOV(float fov);
34
35 // Near and Far planes
36 inline const float GetNear() const { return m_near; }
37 inline void SetNear(float nearPlane);
38
39 inline const float GetFar() const { return m_far; }
40 inline void SetFar(float farPlane);
41
42 inline const float GetAspectRatio() const { return m_aspectRatio; }
43
45
46 glm::mat4 GenViewProjectionMatrix() const;
47
48 void Init() override;
49 void Destroy() override;
50
51 void OnSetRotation() override;
52
53#ifdef EE_EDITOR_BUILD
54 void RenderWhenSelected() override;
55 void DrawDebugFrustum();
56 std::array<glm::vec3, 8> CalculateFrustumCorners(float visualFarScale = 0.5f);
57#else
58 void RenderWhenSelected() override {}
59#endif
60
61 private:
62 glm::mat4 GenProjectionMatrix();
63 void UpdateProjectionMatrix();
64
65 private:
66 float m_aspectRatio;
67
68 float m_FOV;
69 EXPOSE(m_FOV)
70
71 glm::vec3 m_front;
72 glm::vec3 m_right;
73 glm::vec3 m_up;
74 glm::mat4 m_projectionMatrix;
75
76 bool m_canBeMainCamera = true;
77
78 float m_near = 0.1f;
79 EXPOSE(m_near)
80
81 float m_far = 100.0f;
82 EXPOSE(m_far)
83
85 };
86 using CameraPtr = std::shared_ptr<Camera>;
87}
#define EECATEGORY(name)
#define EXPOSE(param,...)
#define EditorIcon(path)
#define END_COMPONENT()
const float GetNear() const
Definition Camera.h:36
void SetFOV(float fov)
Definition Camera.cpp:74
const float GetAspectRatio() const
Definition Camera.h:42
BEGIN_COMPONENT(Camera, EditorIcon(std::string(Editor::Icons::COMPONENT_ICON_CAMERA))) Camera(float fov
void UpdateCameraVectors()
Definition Camera.cpp:111
void Destroy() override
Definition Camera.cpp:45
void OnSetRotation() override
Definition Camera.cpp:50
void SetNear(float nearPlane)
Definition Camera.cpp:83
bool overrideCurrent
Definition Camera.h:20
const void UpdateAspectRatio(float aspectRatio)
Definition Camera.cpp:55
void Init() override
Definition Camera.cpp:31
void SetFar(float farPlane)
Definition Camera.cpp:92
const glm::mat4 & GetProjectionMatrix() const
Definition Camera.h:25
const glm::vec3 & GetRightVec() const
Definition Camera.h:29
glm::mat4 GenViewMatrix() const
Definition Camera.cpp:69
const glm::vec3 & GetUpVec() const
Definition Camera.h:30
const float GetFOV() const
Definition Camera.h:32
glm::mat4 GenViewProjectionMatrix() const
Definition Camera.cpp:64
const float GetFar() const
Definition Camera.h:39
const glm::vec3 & GetFrontVec() const
Definition Camera.h:28
void RenderWhenSelected() override
Definition Camera.h:58
constexpr std::string_view COMPONENT_ICON_CAMERA
std::shared_ptr< Camera > CameraPtr
Definition Camera.h:86