CG_Labs  2020.0
FPSCamera.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "TRSTransform.h"
4 #include "InputHandler.h"
5 
6 #include <glm/glm.hpp>
7 #define GLM_ENABLE_EXPERIMENTAL
8 #include <glm/gtx/io.hpp>
9 
10 #include <chrono>
11 #include <iostream>
12 
13 template<typename T, glm::precision P>
14 class FPSCamera
15 {
16 public:
17  FPSCamera(T fovy, T aspect, T nnear, T nfar);
18  ~FPSCamera();
19 
20 public:
21  void Update(std::chrono::microseconds deltaTime, InputHandler &ih, bool ignoreKeyEvents = false, bool ignoreMouseEvents = false);
22  void SetProjection(T fovy, T aspect, T nnear, T nfar);
23  void SetFov(T fovy);
24  T GetFov();
25  void SetAspect(T a);
26  T GetAspect();
27 
28  glm::tmat4x4<T, P> GetViewToWorldMatrix();
29  glm::tmat4x4<T, P> GetWorldToViewMatrix();
30  glm::tmat4x4<T, P> GetClipToWorldMatrix();
31  glm::tmat4x4<T, P> GetWorldToClipMatrix();
32  glm::tmat4x4<T, P> GetClipToViewMatrix();
33  glm::tmat4x4<T, P> GetViewToClipMatrix();
34 
35  glm::tvec3<T, P> GetClipToWorld(glm::tvec3<T, P> xyw);
36  glm::tvec3<T, P> GetClipToView(glm::tvec3<T, P> xyw);
37 
38 public:
42 
43 public:
45  glm::tmat4x4<T, P> mProjection;
46  glm::tmat4x4<T, P> mProjectionInverse;
47  glm::tvec2<T, P> mRotation;
48  glm::tvec2<T, P> mMousePosition;
49 
50 public:
51  friend std::ostream &operator<<(std::ostream &os, FPSCamera<T, P> &v) {
52  os << v.mFov << " " << v.mAspect << " " << v.mNear << " " << v.mFar << std::endl;
53  os << v.mMovementSpeed << " " << v.mMouseSensitivity << std::endl;
54  os << v.mRotation << std::endl;
55  os << v.mWorld;
56  return os;
57  }
58  friend std::istream &operator>>(std::istream &is, FPSCamera<T, P> &v) {
59  T fov, aspect, nnear, far;
60  is >> fov >> aspect >> nnear >> far;
61  v.SetProjection(fov, aspect, nnear, far);
62  is >> v.mMovementSpeed >> v.mMouseSensitivity;
63  is >> v.mRotation;
64  is >> v.mWorld;
65  return is;
66  }
67 };
68 
69 #include "FPSCamera.inl"
70 
FPSCamera::GetWorldToClipMatrix
glm::tmat4x4< T, P > GetWorldToClipMatrix()
Definition: FPSCamera.inl:102
FPSCamera::mMousePosition
glm::tvec2< T, P > mMousePosition
Definition: FPSCamera.h:48
FPSCamera::mNear
T mNear
Definition: FPSCamera.h:44
TRSTransform.h
FPSCamera::GetClipToWorld
glm::tvec3< T, P > GetClipToWorld(glm::tvec3< T, P > xyw)
Definition: FPSCamera.inl:120
FPSCamera.inl
FPSCamera::GetClipToWorldMatrix
glm::tmat4x4< T, P > GetClipToWorldMatrix()
Definition: FPSCamera.inl:96
FPSCamera::GetClipToViewMatrix
glm::tmat4x4< T, P > GetClipToViewMatrix()
Definition: FPSCamera.inl:108
FPSCamera::mMouseSensitivity
T mMouseSensitivity
Definition: FPSCamera.h:41
FPSCamera::mProjection
glm::tmat4x4< T, P > mProjection
Definition: FPSCamera.h:45
FPSCamera::operator>>
friend std::istream & operator>>(std::istream &is, FPSCamera< T, P > &v)
Definition: FPSCamera.h:58
FPSCamera::mMovementSpeed
T mMovementSpeed
Definition: FPSCamera.h:40
FPSCamera::mFov
T mFov
Definition: FPSCamera.h:44
FPSCamera::FPSCamera
FPSCamera(T fovy, T aspect, T nnear, T nfar)
Definition: FPSCamera.inl:2
FPSCamera::SetAspect
void SetAspect(T a)
Definition: FPSCamera.inl:36
FPSCamera::operator<<
friend std::ostream & operator<<(std::ostream &os, FPSCamera< T, P > &v)
Definition: FPSCamera.h:51
FPSCamera::GetWorldToViewMatrix
glm::tmat4x4< T, P > GetWorldToViewMatrix()
Definition: FPSCamera.inl:90
FPSCamera::Update
void Update(std::chrono::microseconds deltaTime, InputHandler &ih, bool ignoreKeyEvents=false, bool ignoreMouseEvents=false)
Definition: FPSCamera.inl:49
FPSCamera::mFar
T mFar
Definition: FPSCamera.h:44
FPSCamera::mProjectionInverse
glm::tmat4x4< T, P > mProjectionInverse
Definition: FPSCamera.h:46
FPSCamera::mAspect
T mAspect
Definition: FPSCamera.h:44
FPSCamera::mWorld
TRSTransform< T, P > mWorld
Definition: FPSCamera.h:39
InputHandler.h
FPSCamera::GetFov
T GetFov()
Definition: FPSCamera.inl:30
FPSCamera::GetViewToWorldMatrix
glm::tmat4x4< T, P > GetViewToWorldMatrix()
Definition: FPSCamera.inl:84
TRSTransform
Definition: TRSTransform.h:34
FPSCamera::SetProjection
void SetProjection(T fovy, T aspect, T nnear, T nfar)
Definition: FPSCamera.inl:13
FPSCamera::SetFov
void SetFov(T fovy)
Definition: FPSCamera.inl:24
InputHandler
Definition: InputHandler.h:20
FPSCamerad
FPSCamera< double, glm::defaultp > FPSCamerad
Definition: FPSCamera.h:72
FPSCamera::mRotation
glm::tvec2< T, P > mRotation
Definition: FPSCamera.h:47
FPSCameraf
FPSCamera< float, glm::defaultp > FPSCameraf
Definition: FPSCamera.h:71
FPSCamera
Definition: FPSCamera.h:15
FPSCamera::~FPSCamera
~FPSCamera()
Definition: FPSCamera.inl:8
FPSCamera::GetClipToView
glm::tvec3< T, P > GetClipToView(glm::tvec3< T, P > xyw)
Definition: FPSCamera.inl:128
FPSCamera::GetViewToClipMatrix
glm::tmat4x4< T, P > GetViewToClipMatrix()
Definition: FPSCamera.inl:114
FPSCamera::GetAspect
T GetAspect()
Definition: FPSCamera.inl:42