21 #ifndef LIB_LIGHTMETRICA_MATH_MATRIX_H
22 #define LIB_LIGHTMETRICA_MATH_MATRIX_H
24 #include "math.vector.h"
27 LM_MATH_NAMESPACE_BEGIN
29 template <
typename T>
struct TMat3;
30 template <
typename T>
struct TMat4;
48 LM_FORCE_INLINE
TMat3();
51 LM_FORCE_INLINE
TMat3(
const T& v);
53 LM_FORCE_INLINE
TMat3(
const T* v);
54 LM_FORCE_INLINE
TMat3(
59 static LM_FORCE_INLINE
TMat3<T> Zero();
60 static LM_FORCE_INLINE
TMat3<T> Diag(T v);
61 static LM_FORCE_INLINE
TMat3<T> Identity();
63 LM_FORCE_INLINE
TVec3<T>& operator[](
int i);
64 LM_FORCE_INLINE
const TVec3<T>& operator[](
int i)
const;
67 LM_FORCE_INLINE
TMat3<T>& operator*=(
const T& s);
68 LM_FORCE_INLINE
TMat3<T>& operator/=(
const T& s);
72 template <
typename T> LM_FORCE_INLINE
TMat3<T> operator*(
const TMat3<T>& m,
const T& s);
73 template <
typename T> LM_FORCE_INLINE
TMat3<T> operator*(
const T& v,
const TMat3<T>& m);
76 template <
typename T> LM_FORCE_INLINE
TMat3<T> operator/(
const TMat3<T>& m,
const T& s);
104 LM_FORCE_INLINE
TMat4();
107 LM_FORCE_INLINE
TMat4(
const T& v);
109 LM_FORCE_INLINE
TMat4(
const T* v);
110 LM_FORCE_INLINE
TMat4(
111 T v00, T v10, T v20, T v30,
112 T v01, T v11, T v21, T v31,
113 T v02, T v12, T v22, T v32,
114 T v03, T v13, T v23, T v33);
116 static LM_FORCE_INLINE
TMat4<T> Zero();
117 static LM_FORCE_INLINE
TMat4<T> Diag(T v);
118 static LM_FORCE_INLINE
TMat4<T> Identity();
120 LM_FORCE_INLINE
TVec4<T>& operator[](
int i);
121 LM_FORCE_INLINE
const TVec4<T>& operator[](
int i)
const;
124 LM_FORCE_INLINE
TMat4<T>& operator*=(
const T& s);
125 LM_FORCE_INLINE
TMat4<T>& operator/=(
const T& s);
129 template <
typename T> LM_FORCE_INLINE
TMat4<T> operator*(
const TMat4<T>& m,
const T& s);
130 template <
typename T> LM_FORCE_INLINE
TMat4<T> operator*(
const T& v,
const TMat4<T>& m);
133 template <
typename T> LM_FORCE_INLINE
TMat4<T> operator/(
const TMat4<T>& m,
const T& s);
135 template <
typename T> LM_FORCE_INLINE
TMat4<T> Transpose(
const TMat4<T>& m);
151 struct LM_ALIGN_16
TMat3<float>
156 LM_FORCE_INLINE
TMat3();
159 LM_FORCE_INLINE
TMat3(
float v);
161 LM_FORCE_INLINE
TMat3(
const float* v);
162 LM_FORCE_INLINE
TMat3(
163 float v00,
float v10,
float v20,
164 float v01,
float v11,
float v21,
165 float v02,
float v12,
float v22);
167 static LM_FORCE_INLINE
Mat3f Zero();
168 static LM_FORCE_INLINE
Mat3f Diag(
float v);
169 static LM_FORCE_INLINE
Mat3f Identity();
171 LM_FORCE_INLINE
Vec3f& operator[](
int i);
172 LM_FORCE_INLINE
const Vec3f& operator[](
int i)
const;
174 LM_FORCE_INLINE
Mat3f& operator*=(
const Mat3f& m);
175 LM_FORCE_INLINE
Mat3f& operator*=(
const float& s);
176 LM_FORCE_INLINE
Mat3f& operator/=(
const float& s);
180 template <> LM_FORCE_INLINE
Mat3f operator*(
const Mat3f& m,
const float& s);
181 template <> LM_FORCE_INLINE
Mat3f operator*(
const float& s,
const Mat3f& m);
182 template <> LM_FORCE_INLINE
Vec3f operator*(
const Mat3f& m,
const Vec3f& v);
183 template <> LM_FORCE_INLINE
Mat3f operator*(
const Mat3f& m1,
const Mat3f& m2);
184 template <> LM_FORCE_INLINE
Mat3f operator/(
const Mat3f& m,
const float& s);
186 template <> LM_FORCE_INLINE
Mat3f Transpose(
const Mat3f& m);
196 struct LM_ALIGN_16
TMat4<float>
201 LM_FORCE_INLINE
TMat4();
204 LM_FORCE_INLINE
TMat4(
float v);
206 LM_FORCE_INLINE
TMat4(
const float* v);
207 LM_FORCE_INLINE
TMat4(
208 float v00,
float v10,
float v20,
float v30,
209 float v01,
float v11,
float v21,
float v31,
210 float v02,
float v12,
float v22,
float v32,
211 float v03,
float v13,
float v23,
float v33);
213 static LM_FORCE_INLINE
Mat4f Zero();
214 static LM_FORCE_INLINE
Mat4f Diag(
float v);
215 static LM_FORCE_INLINE
Mat4f Identity();
217 LM_FORCE_INLINE
Vec4f& operator[](
int i);
218 LM_FORCE_INLINE
const Vec4f& operator[](
int i)
const;
220 LM_FORCE_INLINE
Mat4f& operator*=(
const Mat4f& m);
221 LM_FORCE_INLINE
Mat4f& operator*=(
const float& s);
222 LM_FORCE_INLINE
Mat4f& operator/=(
const float& s);
226 template <> LM_FORCE_INLINE
Mat4f operator*(
const Mat4f& m,
const float& s);
227 template <> LM_FORCE_INLINE
Mat4f operator*(
const float& s,
const Mat4f& m);
228 template <> LM_FORCE_INLINE
Vec4f operator*(
const Mat4f& m,
const Vec4f& v);
229 template <> LM_FORCE_INLINE
Mat4f operator*(
const Mat4f& m1,
const Mat4f& m2);
230 template <> LM_FORCE_INLINE
Mat4f operator/(
const Mat4f& m,
const float& s);
232 template <> LM_FORCE_INLINE
Mat4f Transpose(
const Mat4f& m);
233 template <> LM_FORCE_INLINE
Mat4f Inverse(
const Mat4f& m);
246 struct LM_ALIGN_32
TMat3<double>
251 LM_FORCE_INLINE
TMat3();
254 LM_FORCE_INLINE
TMat3(
double v);
256 LM_FORCE_INLINE
TMat3(
const double* v);
257 LM_FORCE_INLINE
TMat3(
258 double v00,
double v10,
double v20,
259 double v01,
double v11,
double v21,
260 double v02,
double v12,
double v22);
262 static LM_FORCE_INLINE
Mat3d Zero();
263 static LM_FORCE_INLINE
Mat3d Diag(
double v);
264 static LM_FORCE_INLINE
Mat3d Identity();
266 LM_FORCE_INLINE
Vec3d& operator[](
int i);
267 LM_FORCE_INLINE
const Vec3d& operator[](
int i)
const;
269 LM_FORCE_INLINE
Mat3d& operator*=(
const Mat3d& m);
270 LM_FORCE_INLINE
Mat3d& operator*=(
const double& s);
271 LM_FORCE_INLINE
Mat3d& operator/=(
const double& s);
275 template <> LM_FORCE_INLINE
Mat3d operator*(
const Mat3d& m,
const double& s);
276 template <> LM_FORCE_INLINE
Mat3d operator*(
const double& s,
const Mat3d& m);
277 template <> LM_FORCE_INLINE
Vec3d operator*(
const Mat3d& m,
const Vec3d& v);
278 template <> LM_FORCE_INLINE
Mat3d operator*(
const Mat3d& m1,
const Mat3d& m2);
279 template <> LM_FORCE_INLINE
Mat3d operator/(
const Mat3d& m,
const double& s);
288 struct LM_ALIGN_32
TMat4<double>
293 LM_FORCE_INLINE
TMat4();
296 LM_FORCE_INLINE
TMat4(
double v);
298 LM_FORCE_INLINE
TMat4(
const double* v);
299 LM_FORCE_INLINE
TMat4(
300 double v00,
double v10,
double v20,
double v30,
301 double v01,
double v11,
double v21,
double v31,
302 double v02,
double v12,
double v22,
double v32,
303 double v03,
double v13,
double v23,
double v33);
305 static LM_FORCE_INLINE
Mat4d Zero();
306 static LM_FORCE_INLINE
Mat4d Diag(
double v);
307 static LM_FORCE_INLINE
Mat4d Identity();
309 LM_FORCE_INLINE
Vec4d& operator[](
int i);
310 LM_FORCE_INLINE
const Vec4d& operator[](
int i)
const;
312 LM_FORCE_INLINE
Mat4d& operator*=(
const Mat4d& m);
313 LM_FORCE_INLINE
Mat4d& operator*=(
const double& s);
314 LM_FORCE_INLINE
Mat4d& operator/=(
const double& s);
318 template <> LM_FORCE_INLINE
Mat4d operator*(
const Mat4d& m,
const double& s);
319 template <> LM_FORCE_INLINE
Mat4d operator*(
const double& s,
const Mat4d& m);
320 template <> LM_FORCE_INLINE
Vec4d operator*(
const Mat4d& m,
const Vec4d& v);
321 template <> LM_FORCE_INLINE
Mat4d operator*(
const Mat4d& m1,
const Mat4d& m2);
322 template <> LM_FORCE_INLINE
Mat4d operator/(
const Mat4d& m,
const double& s);
326 LM_MATH_NAMESPACE_END
329 #include "math.matrix.inl"
331 #endif // LIB_LIGHTMETRICA_MATH_MATRIX_H
Definition: math.matrix.h:30
Definition: math.vector.h:32
Definition: math.matrix.h:29
Definition: math.vector.h:31