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