1#ifndef LIBSBX_MATH_MATRIX4X4_HPP_
2#define LIBSBX_MATH_MATRIX4X4_HPP_
13#include <fmt/format.h>
15#include <libsbx/math/concepts.hpp>
16#include <libsbx/math/vector3.hpp>
17#include <libsbx/math/vector4.hpp>
18#include <libsbx/math/matrix.hpp>
19#include <libsbx/math/matrix3x3.hpp>
20#include <libsbx/math/angle.hpp>
29 template<scalar Other>
32 inline static constexpr auto x_axis = std::size_t{0u};
33 inline static constexpr auto y_axis = std::size_t{1u};
34 inline static constexpr auto z_axis = std::size_t{2u};
35 inline static constexpr auto w_axis = std::size_t{3u};
39 using value_type = base_type::value_type;
40 using reference = base_type::reference;
41 using const_reference = base_type::const_reference;
42 using size_type = base_type::size_type;
45 inline static constexpr basic_matrix4x4 identity{base_type::identity()};
49 using base_type::base_type;
53 template<scalar Other>
61 template<scalar Other>
63 Other x0, Other x1, Other x2, Other x3,
64 Other y0, Other y1, Other y2, Other y3,
65 Other z0, Other z1, Other z2, Other z3,
66 Other w0, Other w1, Other w2, Other w3
69 template<scalar Other>
70 constexpr basic_matrix4x4(
const Other v00,
const Other v11,
const Other v22,
const Other v33)
noexcept;
72 template<scalar Other>
94 [[nodiscard]]
constexpr static auto orthographic(
const value_type left,
const value_type right,
const value_type bottom,
const value_type top)
noexcept ->
basic_matrix4x4;
96 [[nodiscard]]
constexpr static auto orthographic(
const value_type left,
const value_type right,
const value_type bottom,
const value_type top,
const value_type near,
const value_type far)
noexcept ->
basic_matrix4x4;
106 constexpr auto operator[](size_type index)
const noexcept ->
const column_type&;
108 constexpr auto operator[](size_type index)
noexcept ->
column_type&;
112template<scalar Lhs, scalar Rhs>
115template<scalar Lhs, scalar Rhs>
118template<scalar Lhs, scalar Rhs>
121template<scalar Lhs, scalar Rhs>
124template<scalar Lhs, scalar Rhs>
127template<scalar Lhs, scalar Rhs>
138template<sbx::math::scalar Type>
139struct fmt::formatter<sbx::math::basic_matrix4x4<Type>> {
141 template<
typename ParseContext>
142 constexpr auto parse(ParseContext& context) ->
decltype(context.begin()) {
143 return context.begin();
146 template<
typename FormatContext>
148 if constexpr (sbx::math::is_floating_point_v<Type>) {
149 return fmt::format_to(context.out(),
150 "\n{:.2f}, {:.2f}, {:.2f}, {:.2f}\n{:.2f}, {:.2f}, {:.2f}, {:.2f}\n{:.2f}, {:.2f}, {:.2f}, {:.2f}\n{:.2f}, {:.2f}, {:.2f}, {:.2f}",
151 matrix[0][0], matrix[1][0], matrix[2][0], matrix[3][0],
152 matrix[0][1], matrix[1][1], matrix[2][1], matrix[3][1],
153 matrix[0][2], matrix[1][2], matrix[2][2], matrix[3][2],
154 matrix[0][3], matrix[1][3], matrix[2][3], matrix[3][3]
157 return fmt::format_to(context.out(),
158 "\n{}, {}, {}, {}\n{}, {}, {}, {}\n{}, {}, {}, {}\n{}, {}, {}, {}",
159 matrix[0][0], matrix[1][0], matrix[2][0], matrix[3][0],
160 matrix[0][1], matrix[1][1], matrix[2][1], matrix[3][1],
161 matrix[0][2], matrix[1][2], matrix[2][2], matrix[3][2],
162 matrix[0][3], matrix[1][3], matrix[2][3], matrix[3][3]
169#include <libsbx/math/matrix4x4.ipp>
Definition: angle.hpp:271
Definition: matrix3x3.hpp:24
Definition: matrix4x4.hpp:25
Definition: matrix.hpp:13
Definition: vector3.hpp:22
Definition: vector4.hpp:22