// Variations of Matrix4x4
template <class scalarT> class Matrix4x4;
typedef Matrix4x4<int> iMatrix4x4;
typedef Matrix4x4<float> fMatrix4x4;
typedef Matrix4x4<double> dMatrix4x4;
typedef Matrix4x4<unsigned char> bMatrix4x4;
///////////////////////////////////////////////////////////////////////////////
// Matrix4x4
// - 4 dimensional matrix
// - Used for storing and manipulating 3D transforms
///////////////////////////////////////////////////////////////////////////////
template <class scalarT>
class Matrix4x4
{
private:
typedef Matrix4x4<scalarT> self; // Shortcut type to simplify declarations
public:
scalarT mat[4][4]; // 4x4 array for matrix contents
// Constructors
Matrix4x4() // Construct an identity matrix
;
Matrix4x4(const Vector4D<scalarT> &); // Create matrix from a quaternion
// Operator for converting to openGL scalarT[] array
inline operator const scalarT *() const
inline operator scalarT *()
// Statics to sreate a rotation matrix from Euler rotations
static self fromEulerDeg(const Vector3D<scalarT> °);
inline static self fromEulerRad(const Vector3D<scalarT> &rad);
// Matrix operations
// Transpose this matrix, return it
self &transpose();
// Multiply matrices
self operator *(const self &) const;
// Multiple matrix times a vector
Vector3D<scalarT> operator *(const Vector3D<scalarT> &) const;
Vector4D<scalarT> operator *(const Vector4D<scalarT> &) const;
// Return a quaternion representing this matrix
Vector4D<scalarT> getQuaternion() const;
};