Raito 0.1
Loading...
Searching...
No Matches
Camera.h
Go to the documentation of this file.
1/*
2MIT License
3
4Copyright (c) 2023 Víctor Falcón Zaro
5
6Permission is hereby granted, free of charge, to any person obtaining a copy
7of this software and associated documentation files (the "Software"), to deal
8in the Software without restriction, including without limitation the rights
9to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10copies of the Software, and to permit persons to whom the Software is
11furnished to do so, subject to the following conditions:
12
13The above copyright notice and this permission notice shall be included in all
14copies or substantial portions of the Software.
15
16THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22SOFTWARE.
23*/
24
25#pragma once
26
28
29#include <Raito/Math/Frustum.h>
30
31#include <Raito/Math/AABB.h>
32
33namespace Raito::Renderer
34{
36 {
37 float Top;
38 float Bottom;
39 float Left;
40 float Right;
41 };
42
43 class Camera
44 {
45 public:
46 Camera(float verticalFOV, float nearClip, float farClip);
47
48 bool OnUpdate(float ts);
49 void OnResize(u32 width, u32 height);
50
51 NODISCARD const Mat4& GetProjection() const { return m_Projection; }
52 NODISCARD const Mat4& GetInverseProjection() const { return m_InverseProjection; }
53 NODISCARD const Mat4& GetView() const { return m_View; }
54 NODISCARD const Mat4& GetInverseView() const { return m_InverseView; }
55
56 NODISCARD const V3& GetPosition() const { return m_Position; }
57 NODISCARD const V3& GetDirection() const { return m_ForwardDirection; }
58
59 NODISCARD float GetNearPlane() const { return m_NearClip; }
60 NODISCARD float GetFarPlane() const { return m_FarClip; }
61
62 NODISCARD float GetLeft() const { return m_Parameters.Left; }
63 NODISCARD float GetRight() const { return m_Parameters.Right; }
64 NODISCARD float GetTop() const { return m_Parameters.Top; }
65 NODISCARD float GetBottom() const { return m_Parameters.Bottom; }
66
67 NODISCARD float GetFOV() const { return m_VerticalFOV; }
68
70
71 NODISCARD bool IsInsideFrustum(const Math::AABB& boundingBox) const;
72
73 NODISCARD void SetCameraTarget(const V3& target) { m_TargetPos = target; }
74
75 bool FrustumCulling = true;
76
77 private:
78 bool NormalCameraControls(const V2& delta, float ts);
79 bool OrbitCameraControls(const V2& delta, float ts);
80
81 void RecalculateProjection();
82 void RecalculateView();
83
84 Math::Frustum m_Frustum;
85
86 Mat4 m_Projection{ 1.0f };
87 Mat4 m_View{ 1.0f };
88 Mat4 m_InverseProjection{ 1.0f };
89 Mat4 m_InverseView{ 1.0f };
90
91 float m_VerticalFOV = 45.0f;
92 float m_NearClip = 0.1f;
93 float m_FarClip = 100.0f;
94
95 V3 m_TargetPos{ 0.0f, 0.0f, 0.0f };
96 float m_TargetDist{ 0.0f };
97
98 V3 m_Position{ 0.0f, 0.0f, 0.0f };
99 V3 m_ForwardDirection{ 0.0f, 0.0f, 0.0f };
100
101 V2 m_LastMousePosition{ 0.0f, 0.0f };
102
103 u32 m_ViewportWidth = 0, m_ViewportHeight = 0;
104
105 CameraParameters m_Parameters;
106 };
107}
unsigned __int32 u32
Unsigned integer 32 bit type.
Definition BasicTypes.h:55
#define NODISCARD
Definition Common.h:80
Definition AABB.h:7
Definition Frustum.h:7
Definition Camera.h:44
bool FrustumCulling
Definition Camera.h:75
bool OnUpdate(float ts)
Definition Camera.cpp:44
NODISCARD float GetNearPlane() const
Definition Camera.h:59
Camera(float verticalFOV, float nearClip, float farClip)
Definition Camera.cpp:34
NODISCARD float GetRight() const
Definition Camera.h:63
NODISCARD float GetTop() const
Definition Camera.h:64
NODISCARD const Mat4 & GetInverseView() const
Definition Camera.h:54
NODISCARD const V3 & GetDirection() const
Definition Camera.h:57
NODISCARD const Mat4 & GetProjection() const
Definition Camera.h:51
NODISCARD float GetRotationSpeed()
Definition Camera.cpp:115
NODISCARD float GetBottom() const
Definition Camera.h:65
NODISCARD void SetCameraTarget(const V3 &target)
Definition Camera.h:73
NODISCARD float GetFarPlane() const
Definition Camera.h:60
void OnResize(u32 width, u32 height)
Definition Camera.cpp:87
NODISCARD const Mat4 & GetView() const
Definition Camera.h:53
NODISCARD bool IsInsideFrustum(const Math::AABB &boundingBox) const
Definition Camera.cpp:120
NODISCARD const Mat4 & GetInverseProjection() const
Definition Camera.h:52
NODISCARD const V3 & GetPosition() const
Definition Camera.h:56
NODISCARD float GetLeft() const
Definition Camera.h:62
NODISCARD float GetFOV() const
Definition Camera.h:67
Definition Camera.cpp:33
glm::mat4x4 Mat4
Definition MathTypes.h:80
glm::vec2 V2
2D Vector; 32 bit floating point components
Definition MathTypes.h:41
glm::vec3 V3
3D Vector; 32 bit floating point components
Definition MathTypes.h:47
Definition Camera.h:36
float Bottom
Definition Camera.h:38
float Right
Definition Camera.h:40
float Left
Definition Camera.h:39
float Top
Definition Camera.h:37