2D_Game_Engine
Loading...
Searching...
No Matches
camera.cpp
Go to the documentation of this file.
1#include <pch.hpp>
2#include <camera.hpp>
3#include <window.hpp>
4
6 m_Position=Vec2(0.0f,0.0f);
7 m_Zoom=1.0f;
8 m_Rotation=0.0f;
9}
10
12 PROFILE_FUNCTION();
13
14 m_Proj=glm::ortho(0.0f,Window::MAX_WIDTH,0.0f,Window::MAX_HEIGHT,-1.0f,1.0f);
15 m_View=glm::translate(glm::mat4(1.0f),glm::vec3(-m_Position.x,-m_Position.y,0.0f));
16 m_View=glm::rotate(m_View,glm::radians(m_Rotation),glm::vec3(0.0f,0.0f,1.0f));
17 m_View=glm::scale(m_View,glm::vec3(m_Zoom,m_Zoom,1.0f));
18
19 m_ViewProj=m_Proj*m_View;
20
21 RENDERER->SetProjMat(m_Proj);
22 RENDERER->SetViewMat(m_View);
23 RENDERER->SetViewProjMat(m_ViewProj);
24
25 RENDERER->m_Points.S.Bind();
26 RENDERER->m_Points.S.SetUniformMat4fv("u_PM",glm::value_ptr(m_ViewProj),1);
27 RENDERER->m_Points.S.SetUniform1f("zoom",m_Zoom);
28
29 RENDERER->m_Lines.S.Bind();
30 RENDERER->m_Lines.S.SetUniformMat4fv("u_PM",glm::value_ptr(m_ViewProj),1);
31
32 RENDERER->m_Textures.S.Bind();
33 RENDERER->m_Textures.S.SetUniformMat4fv("u_PM",glm::value_ptr(m_ViewProj),1);
34
35 RENDERER->m_Triangles.S.Bind();
36 RENDERER->m_Triangles.S.SetUniformMat4fv("u_PM",glm::value_ptr(m_ViewProj),1);
37
38 RENDERER->m_Lights.S.Bind();
39 RENDERER->m_Lights.S.SetUniformMat4fv("view_matrix",glm::value_ptr(m_View),1);
40 RENDERER->m_Lights.S.SetUniformMat4fv("u_PM",glm::value_ptr(m_Proj),1);
41 RENDERER->m_Lights.S.SetUniform1f("window_width",Window::Width);
42 RENDERER->m_Lights.S.SetUniform1f("zoom",m_Zoom);
43
44 RENDERER->m_SHdr.Bind();
45 RENDERER->m_SHdr.SetUniformMat4fv("u_PM",glm::value_ptr(m_Proj),1);
46
47 RENDERER->m_SPostProcessing.Bind();
48 RENDERER->m_SPostProcessing.SetUniformMat4fv("u_PM",glm::value_ptr(m_ViewProj),1);
49
50 RENDERER->m_Zoom=m_Zoom;
51
54 else{
55 TEXT_RENDERER->UpdateProjMat(m_ViewProj);
56 }
57
58 std::unordered_map<uint32_t,struct FontInfo> &fonts=FONT_MANAGER->GetFonts();
59 for(auto &[id,font]:fonts){
60 TextRenderer &f=*font.font;
61 if(f.m_Fixed)
62 f.UpdateProjMat(m_Proj);
63 else
64 f.UpdateProjMat(m_ViewProj);
65 }
66}
67
69 PROFILE_FUNCTION();
70
71 RENDERER->m_Textures.S.Bind();
72 RENDERER->m_Textures.S.SetUniformMat4fv("u_PM",glm::value_ptr(m_Proj),1);
73}
74
76 PROFILE_FUNCTION();
77
78 RENDERER->m_Textures.S.Bind();
79 RENDERER->m_Textures.S.SetUniformMat4fv("u_PM",glm::value_ptr(m_ViewProj),1);
80}
81
83 PROFILE_FUNCTION();
84
85 m_Position=pos;
87}
88
89void Camera::Move(float x_offset,float y_offset){
90 PROFILE_FUNCTION();
91
92 m_Position.x+=x_offset;
93 m_Position.y+=y_offset;
95}
96
97void Camera::SetZoom(float zoom){
98 PROFILE_FUNCTION();
99
100 m_Zoom=zoom;
101 m_Zoom=glm::clamp(m_Zoom,0.1f,3.0f);
102 RENDERER->m_Zoom=m_Zoom;
104
106}
107
108void Camera::Zoom(float zoom_offset){
109 PROFILE_FUNCTION();
110
111 m_Zoom+=zoom_offset;
112 m_Zoom=glm::clamp(m_Zoom,0.1f,3.0f);
113 RENDERER->m_Zoom=m_Zoom;
115
117}
118
119void Camera::SetRotation(float rotation){
120 PROFILE_FUNCTION();
121
122 m_Rotation=rotation;
124}
125
126void Camera::Rotate(float rotation_offset){
127 PROFILE_FUNCTION();
128
129 m_Rotation+=rotation_offset;
131}
Camera()
Definition camera.cpp:5
void SetZoom(float zoom)
Definition camera.cpp:97
void Zoom(float zoom_offset)
Definition camera.cpp:108
void DrawSceneProj()
Definition camera.cpp:68
void Move(float x_offset, float y_offset)
Definition camera.cpp:89
void SetRotation(float rotation)
Definition camera.cpp:119
void InitializeProj()
Definition camera.cpp:11
void Rotate(float rotation_offset)
Definition camera.cpp:126
void ResetSceneProj()
Definition camera.cpp:75
void SetPosition(Vec2 pos)
Definition camera.cpp:82
std::unordered_map< uint32_t, struct FontInfo > & GetFonts()
void SetViewProjMat(glm::mat4 view_proj)
Definition renderer.hpp:255
void UpdateLineWidth()
Definition renderer.cpp:416
void SetProjMat(glm::mat4 proj)
Definition renderer.hpp:249
void SetViewMat(glm::mat4 view)
Definition renderer.hpp:252
void Bind() const
Definition shader.cpp:68
void SetUniform1f(const std::string &name, float v0)
Definition shader.cpp:132
void SetUniformMat4fv(const std::string &name, float *proj, unsigned int num_elem)
Definition shader.cpp:136
void UpdateProjMat(glm::mat4 &proj)
const float MAX_WIDTH
Definition window.cpp:251
float Width
Definition window.cpp:227
float MAX_HEIGHT
Definition window.cpp:252
float y
Definition structs.hpp:9
float x
Definition structs.hpp:5
FontManager * FONT_MANAGER
The font manager.
Definition window.cpp:16
Renderer * RENDERER
The main renderer.
Definition window.cpp:12
TextRenderer * TEXT_RENDERER
The text renderers.
Definition window.cpp:13