27 #include <boost/operators.hpp>
39 private boost::equality_comparable<Mat4>,
40 private boost::additive<Mat4>,
41 private boost::multiplicative<Mat4, Real>
44 static Mat4 Identity();
73 explicit Mat4(
const float[16]);
75 explicit Mat4(
const double[16]);
82 const Real& At(std::size_t r, std::size_t c)
const
85 throw std::out_of_range(
"indices must be smaller than 4");
90 Real& At(std::size_t r, std::size_t c)
93 throw std::out_of_range(
"indices must be smaller than 4");
98 Real& operator()(std::size_t r, std::size_t c)
100 assert(r<4 && c < 4);
104 const Real& operator()(std::size_t r, std::size_t c)
const
106 assert(r<4 && c < 4);
120 Mat3 ExtractRotation()
const;
121 void PasteRotation(
const Mat3& m);
122 Vec3 ExtractTranslation()
const;
123 void PasteTranslation(
const Vec3& v);
131 void set(
float i00,
float i01,
float i02,
float i03,
float i10,
float i11,
float i12,
132 float i13,
float i20,
float i21,
float i22,
float i23,
float i30,
float i31,
float i32,
134 void set(
double i00,
double i01,
double i02,
double i03,
double i10,
double i11,
double
135 i12,
double i13,
double i20,
double i21,
double i22,
double i23,
double i30,
double i31,
136 double i32,
double i33);