1 #ifndef EAGINE_MATH_MATRIX_ORTHO_HPP
9 #define EAGINE_MATH_MATRIX_ORTHO_HPP
20 template <
typename T,
int N,
bool RM,
bool V>
21 struct is_matrix_constructor<ortho<matrix<T, N, N, RM, V>>> : std::true_type {};
28 template <
typename T,
bool RM,
bool V>
29 class ortho<
matrix<T, 4, 4, RM, V>> {
31 constexpr ortho(
const vect::data_t<T, 6, V>& v) noexcept
42 : _v{x_left, x_right, y_bottom, y_top, z_near, z_far} {}
50 constexpr
auto _x_left()
const {
53 constexpr
auto _x_right()
const {
56 constexpr
auto _y_bottom()
const {
59 constexpr
auto _y_top()
const {
62 constexpr
auto _z_near()
const {
65 constexpr
auto _z_far()
const {
69 constexpr
auto _m00() const noexcept {
70 return T(2) / (_x_right() - _x_left());
73 constexpr
auto _m11() const noexcept {
74 return T(2) / (_y_top() - _y_bottom());
77 constexpr
auto _m22() const noexcept {
78 return -T(2) / (_z_far() - _z_near());
81 constexpr
auto _m30() const noexcept {
82 return -(_x_right() + _x_left()) / (_x_right() - _x_left());
85 constexpr
auto _m31() const noexcept {
86 return -(_y_top() + _y_bottom()) / (_y_top() - _y_bottom());
89 constexpr
auto _m32() const noexcept {
90 return -(_z_far() + _z_near()) / (_z_far() - _z_near());
93 constexpr
auto _make(std::true_type)
const noexcept {
94 return matrix<T, 4, 4, true, V>{
95 {{_m00(), T(0), T(0), _m30()},
96 {T(0), _m11(), T(0), _m31()},
97 {T(0), T(0), _m22(), _m32()},
98 {T(0), T(0), T(0), T(1)}}};
101 constexpr
auto _make(std::false_type)
const noexcept {
102 return matrix<T, 4, 4, false, V>{
103 {{_m00(), T(0), T(0), T(0)},
104 {T(0), _m11(), T(0), T(0)},
105 {T(0), T(0), _m22(), T(0)},
106 {_m30(), _m31(), _m32(), T(1)}}};
109 using _dT = vect::data_t<T, 6, V>;
114 template <
typename T,
int N,
bool RM,
bool V>
115 static constexpr
auto
116 reorder_mat_ctr(
const ortho<matrix<T, N, N, RM, V>>& c) noexcept
117 -> ortho<matrix<T, N, N, !RM, V>> {
123 template <
typename T,
bool V>
129 #endif // EAGINE_MATH_MATRIX_ORTHO_HPP