NRE_Frustum.hpp
Go to the documentation of this file.
1 
10  #pragma once
11 
12 
13  #include <Utility/Array/NRE_Array.hpp>
14  #include <Utility/Interfaces/Stringable/NRE_Stringable.hpp>
15  #include "../NRE_Unit.hpp"
16  #include "../Plane/NRE_Plane.hpp"
17  #include "../Vector/2D/NRE_Vector2D.hpp"
18  #include "../Vector/3D/NRE_Vector3D.hpp"
19  #include "../Matrix/4D/NRE_Matrix4x4.hpp"
20 
25  namespace NRE {
30  namespace Math {
31 
36  class Frustum : public Utility::Stringable<Frustum> {
37  private: //Fields
38  Utility::Array<Plane<float>, 6> planes;
39  Vector2D<float> near;
40  Vector2D<float> far;
41  Vector2D<float> dist;
42  float ratio;
43  Angle fov;
45  public: // Methods
46  //## Constructor ##//
50  Frustum() = delete;
57  Frustum(Angle fieldOfView, float r, Vector2D<float> const& d);
58 
59  //## Copy-Constructor ##//
64  Frustum(Frustum const& f) = default;
65 
66  //## Move-Constructor ##//
71  Frustum(Frustum && f) = default;
72 
73  //## Deconstructor ##//
77  ~Frustum() = default;
78 
79  //## Getter ##//
85  Plane<float> const& getPlane(std::size_t index) const;
86 
87  //## Setter ##//
92  void setFov(Angle fieldOfView);
93 
94  //## Methods ##//
102  void computePlane(Point3D<float> const& eye, Vector3D<float> const& forward, Vector3D<float> const& left, Vector3D<float> const& up);
116  void resize(Vector2D<std::size_t> const& size, Point3D<float> const& eye, Vector3D<float> const& forward, Vector3D<float> const& left, Vector3D<float> const& up);
117 
118  //## Assignment Operator ##//
124  Frustum& operator =(Frustum const& f) = default;
130  Frustum& operator =(Frustum && f) = default;
131 
132  //## Stream Operator ##//
137  Utility::String toString() const;
138 
139  private:
143  void computeNearAndFar();
144  };
145  }
146  }
147 
148  #include "NRE_Frustum.tpp"
void computePlane(Point3D< float > const &eye, Vector3D< float > const &forward, Vector3D< float > const &left, Vector3D< float > const &up)
void resize(Vector2D< std::size_t > const &size, Point3D< float > const &eye, Vector3D< float > const &forward, Vector3D< float > const &left, Vector3D< float > const &up)
4x4 generic matrix
Definition: NRE_Matrix3x3.hpp:35
Math&#39;s API.
Frustum & operator=(Frustum const &f)=default
A cartesian 3D vector, 2D homogeneous.
Definition: NRE_Matrix3x3.hpp:33
A cartesian plane with a point and a vector.
Definition: NRE_Matrix4x4.hpp:36
void setFov(Angle fieldOfView)
The NearlyRealEngine&#39;s global namespace.
Utility::String toString() const
void computeProjectionMatrix(Matrix4x4< float > &m)
Plane< float > const & getPlane(std::size_t index) const
A view frustum used with camera.
Definition: NRE_Frustum.hpp:36