4 #include "../Matrix/MatrixImpl.hpp" 5 #include "../Vector.hpp" 12 template <
class T,
int Dim,
bool Packed>
14 static_assert(!std::is_integral_v<T>);
18 : minBounds(minBounds), maxBounds(maxBounds), projNearPlane(projNearPlane), projFarPlane(projFarPlane) {}
21 template <
class U, eMatrixOrder Order, eMatrixLayout Layout,
bool MPacked>
28 template <
class U, eMatrixLayout Layout,
bool MPacked>
35 template <
class U, eMatrixLayout Layout,
bool MPacked>
43 template <
class U,
int Rows,
int Columns, eMatrixOrder Order, eMatrixLayout Layout,
bool MPacked>
47 VectorT volumeSize = maxBounds - minBounds;
48 VectorT scale = T(2) / volumeSize;
49 scale[scale.
Dimension() - 1] *= T(0.5) * (projFarPlane - projNearPlane);
50 VectorT offset = -(maxBounds + minBounds) / T(2) * scale;
51 offset[offset.
Dimension() - 1] += (projFarPlane + projNearPlane) / 2;
54 for (
int i = 0; i < scale.
Dimension(); ++i) {
61 T projNearPlane, projFarPlane;
72 template <
class T,
int Dim,
bool Packed>
74 if constexpr (std::is_integral_v<T>) {
76 return OrthographicBuilder(VectorT(minBounds), VectorT(maxBounds),
float(projNearPlane),
float(projFarPlane));
auto Identity()
Creates an identity matrix or identity quaternion.
Definition: IdentityBuilder.hpp:42
auto Orthographic(const Vector< T, Dim, Packed > &minBounds, const Vector< T, Dim, Packed > &maxBounds, T projNearPlane=T(0), T projFarPlane=T(1))
Creates an orthographics projection matrix. The volume before projection is an axis-aligned hypercube...
Definition: OrthographicBuilder.hpp:73
Represents a vector in N-dimensional space.
Definition: Definitions.hpp:57
Definition: OrthographicBuilder.hpp:13
Definition: Approx.hpp:11
Definition: Definitions.hpp:63
constexpr int Dimension() const
Returns the number of dimensions of the vector.
Definition: VectorImpl.hpp:402
OrthographicBuilder & operator=(const OrthographicBuilder &)=delete
OrthographicBuilder(const VectorT &minBounds, const VectorT &maxBounds, T projNearPlane, T projFarPlane)
Definition: OrthographicBuilder.hpp:17