When writing the X11 (linux) implementation there was a problem with X11 defining a "Display" type and we also have a Display class in the engine. So to fix that problem and minimize the risk for running into other name conflicts. We move everything from global namespace.
86 lines
No EOL
1.6 KiB
C++
86 lines
No EOL
1.6 KiB
C++
|
|
#ifndef SPECTRE_MATH_MATRIX3_H
|
|
#define SPECTRE_MATH_MATRIX3_H
|
|
|
|
// 3x3 matrix implementation.
|
|
|
|
#include <iostream>
|
|
#include <Spectre/Math/Vector2.h>
|
|
|
|
namespace sp {
|
|
|
|
template<typename T>
|
|
struct Matrix3
|
|
{
|
|
// Column-major order are used for the matrices here to be compatible with OpenGL.
|
|
union {
|
|
T m[3][3]; // format: [col][row]
|
|
|
|
/* Indicies to use for accessing elements.
|
|
_ _
|
|
| |
|
|
| 0 3 6 |
|
|
| 1 4 7 |
|
|
| 2 5 8 |
|
|
|_ _|
|
|
*/
|
|
T v[9];
|
|
};
|
|
|
|
static Matrix3<T> Identity;
|
|
|
|
|
|
inline Matrix3();
|
|
|
|
inline Matrix3( T a, T b, T c,
|
|
T d, T e, T f,
|
|
T g, T h, T i);
|
|
|
|
inline Matrix3(T *a);
|
|
|
|
// -----------------
|
|
// Copy & Assignment.
|
|
// -----------------
|
|
|
|
inline Matrix3<T>& operator=(const Matrix3<T>& mat);
|
|
|
|
// -----------------
|
|
// Compare
|
|
// -----------------
|
|
|
|
inline bool operator==(const Matrix3<T>& mat) const;
|
|
inline bool operator!=(const Matrix3<T>& mat) const;
|
|
|
|
// -----------------
|
|
// Arithmetic: Matrix-Matrix
|
|
// -----------------
|
|
|
|
inline Matrix3<T> operator*(const Matrix3<T>& mat) const;
|
|
inline Matrix3<T> operator*=(const Matrix3<T>& mat);
|
|
|
|
// Need scalar, vector arithmetic?
|
|
|
|
// -----------------
|
|
// Named operations.
|
|
// -----------------
|
|
|
|
// Determinant.
|
|
float det() const;
|
|
|
|
// Transpose matrix.
|
|
Matrix3<T> transpose() const;
|
|
};
|
|
|
|
template <typename T>
|
|
inline std::ostream& operator<<(std::ostream &s, const Matrix3<T>& v);
|
|
|
|
typedef Matrix3<float> Matrix3f;
|
|
typedef Matrix3<double> Matrix3d;
|
|
typedef Matrix3<int> Matrix3i;
|
|
typedef Matrix3<unsigned> Matrix3u;
|
|
|
|
} // namespace sp
|
|
|
|
#include "Matrix3.inl"
|
|
|
|
#endif /* SPECTRE_MATH_MATRIX3_H */ |