ezEngine  Milestone 7
Camera.h
1 #pragma once
2 
3 #include <CoreUtils/Basics.h>
4 #include <Foundation/Math/Mat4.h>
5 
7 class EZ_COREUTILS_DLL ezCamera
8 {
9 public:
10  ezCamera();
11  virtual ~ezCamera() { }
12 
17  virtual ezVec3 GetPosition() const;
18 
20  virtual const ezVec3& GetDirForwards() const;
21 
23  virtual const ezVec3& GetDirUp() const;
24 
26  virtual const ezVec3& GetDirRight() const;
27 
29  ezAngle GetFovX(float fAspectRatioWidthDivHeight) const;
30 
32  ezAngle GetFovY(float fAspectRatioWidthDivHeight) const;
33 
35  const ezVec3& GetCenterPosition() const;
36 
38  const ezVec3& GetCenterDirForwards() const;
39 
41  const ezVec3& GetCenterDirUp() const;
42 
44  const ezVec3& GetCenterDirRight() const;
45 
47  float GetNearPlane() const;
48 
50  float GetFarPlane() const;
51 
54  {
55  None,
60  };
61 
66  void SetCameraMode(CameraMode Mode, float fFovOrDim, float fNearPlane, float fFarPlane);
67 
69  float GetFovOrDim() const { return m_fFovOrDim; }
70 
72  CameraMode GetCameraMode() const { return m_Mode; };
73 
75  void SetFromMatrix(const ezMat4& mLookAtMatrix);
76 
78  void LookAt(const ezVec3& vCameraPos, const ezVec3& vTargetPos, const ezVec3& vUp);
79 
81  void MoveLocally (float fForward, float fRight, float fUp);
82 
84  void MoveGlobally(const ezVec3& vMove);
85 
89  void RotateLocally (ezAngle X, ezAngle Y, ezAngle Z);
90 
94  void RotateGlobally(ezAngle X, ezAngle Y, ezAngle Z);
95 
97  void GetViewMatrix(ezMat4& out_viewMatrix) const;
98 
100  void GetProjectionMatrix(float fAspectRatioWidthDivHeight, ezMat4& out_projectionMatrix, ezProjectionDepthRange::Enum depthRange = ezProjectionDepthRange::Default) const;
101 
106  ezUInt32 GetSettingsModificationCounter() const { return m_uiSettingsModificationCounter; }
107 
112  ezUInt32 GetOrientationModificationCounter() const { return m_uiOrientationModificationCounter; }
113 
114 private:
117  virtual void CameraOrientationChanged(bool bPosition, bool bRotation) { ++m_uiOrientationModificationCounter; }
118 
121  virtual void CameraSettingsChanged();
122 
125  virtual void ClampRotationAngles(bool bLocalSpace, ezAngle& X, ezAngle& Y, ezAngle& Z);
126 
127  float m_fNearPlane;
128  float m_fFarPlane;
129 
130  CameraMode m_Mode;
131 
132  float m_fFovOrDim;
133 
134  ezVec3 m_vPosition;
135  ezVec3 m_vDirForwards;
136  ezVec3 m_vDirUp;
137  ezVec3 m_vDirRight;
138 
139  ezUInt32 m_uiSettingsModificationCounter;
140  ezUInt32 m_uiOrientationModificationCounter;
141 };
142 
143 
144 #include <CoreUtils/Graphics/Implementation/Camera_inl.h>
145 
146