PCG-FPS  v2 m0.22.4
Simple First Person Shooter with Procedurally Generated Level
Camera.h
Go to the documentation of this file.
1 #ifndef SKR_FPS2_RENDERER_OPENGL_CAMERA_H
2 #define SKR_FPS2_RENDERER_OPENGL_CAMERA_H
3 
4 #include "..\..\pch.h"
5 #include "Settings.h"
6 
7 namespace skr
8 {
9 namespace fps2
10 {
11 namespace Renderer
12 {
13 namespace OpenGL
14 {
16  enum struct CameraMovement
17  {
18  FORWARD,
19  BACKWARD,
20  LEFT,
21  RIGHT
22  };
23 
24  constexpr float YAW(-90.0);
25  constexpr float PITCH(0.0f);
26  constexpr float SPEED(17.5f);
27  constexpr float SENSITIVITY(0.075f);
28  constexpr float FOV(60.0f);
29 
32  class Camera
33  {
34  public:
35  glm::vec3 _position;
36  glm::vec3 _front;
37  glm::vec3 _up;
38  glm::vec3 _right;
39  glm::vec3 _worldUp;
40 
41  float _yaw;
42  float _pitch;
43 
46  float _fov;
47 
50  bool _firstMouse = true;
51 
53  Camera() :
54  _position(glm::vec3(0.0f, 0.0f, 0.0f)),
55  _front(glm::vec3(0.0f, 0.0f, -1.0f)),
56  //_up is calculated and set through UpdateCameraVectors
57  _up(glm::vec3(0.0f, 1.0f, 0.0f)),
58  //_right is calculated and set through UpdateCameraVectors
59  _worldUp(glm::vec3(0.0f, 1.0f, 0.0f)),
60  _yaw(YAW),
63  _pitch(PITCH),
64  _fov(FOV)
65  {
67  }
68 
76  glm::vec3 position,
77  glm::vec3 up,
78  float yaw,
79  float pitch,
80  float fov
81  ) :
82  _position(position),
83  _front(glm::vec3(0.0f, 0.0f, -1.0f)),
84  //_up is calculated and set through UpdateCameraVectors
85  _up(up),
86  //_right is calculated and set through UpdateCameraVectors
87  _worldUp(up),
88  _yaw(yaw),
89  _pitch(pitch),
92  _fov(fov)
93  {
95  }
96 
99  glm::mat4 GetViewMatrix();
100 
106  void ProcessKeyboard(CameraMovement direction, float deltaTime, glm::vec3 collisionNormal = glm::vec3(0.0f), bool fly = false);
107 
112  void ProcessMouseMovement(float xoffset, float yoffset, GLboolean constrainPitch = true);
113 
114  //void ProcessMouseScroll(float yoffset);
115 
118  std::string GetCurrentPositionReadable();
119 
122  std::string GetCurrentParametersReadable();
123 
126  void SetPosition(glm::vec3 pos);
127 
134  void SetParameters(glm::vec3 pos, glm::vec3 up, float yaw, float pitch, float fov);
135 
136  private:
138  void UpdateCameraVectors();
139 
141  void PrintCameraVectors();
142  };
143 }
144 }
145 }
146 }
147 
148 #endif
skr::fps2::Renderer::OpenGL::Camera::GetCurrentPositionReadable
std::string GetCurrentPositionReadable()
get current camera position in human readable form
Definition: Camera.cpp:76
skr::fps2::Renderer::OpenGL::YAW
constexpr float YAW(-90.0)
default yaw value
skr::fps2::Renderer::OpenGL::Camera::_lastY
float _lastY
last position of mouse on y-axis
Definition: Camera.h:49
skr::fps2::Renderer::OpenGL::Camera::Camera
Camera(glm::vec3 position, glm::vec3 up, float yaw, float pitch, float fov)
constructor
Definition: Camera.h:75
skr::fps2::Renderer::OpenGL::CameraMovement::FORWARD
@ FORWARD
move camera forward
skr::fps2::Renderer::OpenGL::Camera::_firstMouse
bool _firstMouse
flag indicating if mouse is used for the first tome
Definition: Camera.h:50
skr::fps2::Renderer::OpenGL::Camera::SetPosition
void SetPosition(glm::vec3 pos)
set camera position
Definition: Camera.cpp:92
skr::fps2::Renderer::OpenGL::Camera::SetParameters
void SetParameters(glm::vec3 pos, glm::vec3 up, float yaw, float pitch, float fov)
set camera parameters
Definition: Camera.cpp:98
skr::fps2::Renderer::OpenGL::Camera::_worldUp
glm::vec3 _worldUp
world up vector
Definition: Camera.h:39
skr::fps2::Renderer::OpenGL::Camera::_mouseSensitivity
float _mouseSensitivity
camera/mouse sensitivity
Definition: Camera.h:45
skr::fps2::Renderer::OpenGL::Camera::Camera
Camera()
default constructor
Definition: Camera.h:53
skr::fps2::Settings::_settings_uint32t
std::unordered_map< SettingUInt32t, uint32_t > _settings_uint32t
map keeping settings of type unsigned integer and their values
Definition: Settings.h:53
skr::fps2::Renderer::OpenGL::Camera::_yaw
float _yaw
current yaw
Definition: Camera.h:41
skr::fps2::Renderer::OpenGL::Camera::_right
glm::vec3 _right
right vector
Definition: Camera.h:38
skr::fps2::Renderer::OpenGL::Camera::UpdateCameraVectors
void UpdateCameraVectors()
recalculates camera vectors
Definition: Camera.cpp:109
skr::fps2::Renderer::OpenGL::Camera::GetCurrentParametersReadable
std::string GetCurrentParametersReadable()
get current camera parameters (up, yaw, fov) in human readable form
Definition: Camera.cpp:81
skr::fps2::Settings::SettingUInt32t::SCR_WIDTH
@ SCR_WIDTH
viewport width
skr::fps2::Renderer::OpenGL::Camera::_up
glm::vec3 _up
up vector
Definition: Camera.h:37
skr::fps2::Renderer::OpenGL::SPEED
constexpr float SPEED(17.5f)
default movement speed
skr::fps2::Renderer::OpenGL::CameraMovement::LEFT
@ LEFT
move camera left
skr::fps2::Renderer::OpenGL::Camera::GetViewMatrix
glm::mat4 GetViewMatrix()
gets current view matrix
Definition: Camera.cpp:16
skr::fps2::Renderer::OpenGL::CameraMovement::RIGHT
@ RIGHT
move camera right
skr::fps2::Renderer::OpenGL::Camera::_front
glm::vec3 _front
front vector
Definition: Camera.h:36
skr::fps2::Renderer::OpenGL::CameraMovement::BACKWARD
@ BACKWARD
move camera backwards
skr::fps2::Renderer::OpenGL::Camera::_lastX
float _lastX
last position of mouse on x-axis
Definition: Camera.h:48
skr::fps2::Renderer::OpenGL::PITCH
constexpr float PITCH(0.0f)
default pitch value
skr::fps2::Renderer::OpenGL::CameraMovement
CameraMovement
camera movement identifiers
Definition: Camera.h:17
skr::fps2::Renderer::OpenGL::Camera::_fov
float _fov
field of view
Definition: Camera.h:46
Settings.h
skr::fps2::Settings::SettingUInt32t::SCR_HEIGHT
@ SCR_HEIGHT
viewport height
skr::fps2::Renderer::OpenGL::Camera::_movementSpeed
float _movementSpeed
camera movement peed
Definition: Camera.h:44
skr::fps2::Renderer::OpenGL::Camera::PrintCameraVectors
void PrintCameraVectors()
print camera vectors to cmd
Definition: Camera.cpp:120
skr::fps2::Renderer::OpenGL::Camera::_position
glm::vec3 _position
position
Definition: Camera.h:35
skr::fps2::Renderer::OpenGL::Camera::ProcessMouseMovement
void ProcessMouseMovement(float xoffset, float yoffset, GLboolean constrainPitch=true)
process mouse movement
Definition: Camera.cpp:57
skr
Definition: AssetPath.h:10
skr::fps2::Renderer::OpenGL::Camera::_pitch
float _pitch
current pitch
Definition: Camera.h:42
skr::fps2::Renderer::OpenGL::SENSITIVITY
constexpr float SENSITIVITY(0.075f)
default camera/mouse sensitivity value
skr::fps2::Renderer::OpenGL::Camera
manages camera
Definition: Camera.h:33
skr::fps2::Settings::GetInstance
static Settings & GetInstance()
Get only instance of this class Implements Scott Meyers' singleton pattern.
Definition: Settings.cpp:60
skr::fps2::Renderer::OpenGL::Camera::ProcessKeyboard
void ProcessKeyboard(CameraMovement direction, float deltaTime, glm::vec3 collisionNormal=glm::vec3(0.0f), bool fly=false)
process keyboard input
Definition: Camera.cpp:21
skr::fps2::Renderer::OpenGL::FOV
constexpr float FOV(60.0f)
default field of view