XMatrix44#
-
template<typename T>
class XMatrix44# Template class representing a 4x4 matrix stored in column-major order.
A template-based 4x4 matrix class that provides matrix operations including arithmetic operations, transformations, and conversions. This class stores column vectors in column-major order, which is compatible with OpenGL and many graphics APIs.
The matrix is organized as follows:
columns[0] = first column vector
columns[1] = second column vector
columns[2] = third column vector
columns[3] = fourth column vector (often translation in transformation matrices)
Note
Matrix operations follow column-major conventions common in graphics programming
- Template Parameters:
T – The numeric type for matrix elements (typically float or double)
Public Functions
-
inline XMatrix44()#
Default constructor initializes matrix to zero.
-
inline XMatrix44(const T *d)#
Constructor that initializes matrix from array data.
- Parameters:
d – [in] Pointer to array of 16 elements in column-major order
- inline XMatrix44(
- T c11,
- T c21,
- T c31,
- T c41,
- T c12,
- T c22,
- T c32,
- T c42,
- T c13,
- T c23,
- T c33,
- T c43,
- T c14,
- T c24,
- T c34,
- T c44,
Constructor that initializes matrix with individual element values.
- Parameters:
c11 – [in] Element at row 1, column 1
c21 – [in] Element at row 2, column 1
c31 – [in] Element at row 3, column 1
c41 – [in] Element at row 4, column 1
c12 – [in] Element at row 1, column 2
c22 – [in] Element at row 2, column 2
c32 – [in] Element at row 3, column 2
c42 – [in] Element at row 4, column 2
c13 – [in] Element at row 1, column 3
c23 – [in] Element at row 2, column 3
c33 – [in] Element at row 3, column 3
c43 – [in] Element at row 4, column 3
c14 – [in] Element at row 1, column 4
c24 – [in] Element at row 2, column 4
c34 – [in] Element at row 3, column 4
c44 – [in] Element at row 4, column 4
- inline XMatrix44( )#
Constructor that initializes matrix from four column vectors.
- Parameters:
c1 – [in] First column vector
c2 – [in] Second column vector
c3 – [in] Third column vector
c4 – [in] Fourth column vector
-
inline operator T*()#
Conversion operator to non-const pointer to matrix data.
- Returns:
Pointer to the first element in column-major order
-
inline operator const T*() const#
Conversion operator to const pointer to matrix data.
- Returns:
Const pointer to the first element in column-major order
-
inline XMatrix44<T> operator*(const XMatrix44<T> &rhs) const#
Matrix multiplication operator (right multiply)
- Parameters:
rhs – [in] Matrix to multiply with (right operand)
- Returns:
New matrix that is the product of this matrix and rhs
-
inline XMatrix44<T> &operator*=(const XMatrix44<T> &rhs)#
Matrix multiplication assignment operator (right multiply)
- Parameters:
rhs – [in] Matrix to multiply with (right operand)
- Returns:
Reference to this matrix after multiplication
-
inline float operator()(int row, int col) const#
Element access operator (const version)
- Parameters:
row – [in] Row index (0-3)
col – [in] Column index (0-3)
- Returns:
Const reference to matrix element at specified row and column
-
inline float &operator()(int row, int col)#
Element access operator (non-const version)
- Parameters:
row – [in] Row index (0-3)
col – [in] Column index (0-3)
- Returns:
Reference to matrix element at specified row and column
-
inline XMatrix44<T> &operator*=(const T &s)#
Scalar multiplication assignment operator.
- Parameters:
s – [in] Scalar value to multiply all elements with
- Returns:
Reference to this matrix after scalar multiplication
- inline void MatrixMultiply (const T *__restrict lhs, const T *__restrict rhs, T *__restrict result) const
Performs matrix multiplication of two 4x4 matrices.
Computes result = lhs * rhs using column-major storage
- Parameters:
lhs – [in] Left-hand side matrix (as array of 16 elements)
rhs – [in] Right-hand side matrix (as array of 16 elements)
result – [out] Output matrix (as array of 16 elements)
- Pre:
lhs, rhs, and result must point to different memory locations
-
inline void SetCol(int index, const Vec4 &c)#
Sets a column of the matrix to the specified 4D vector.
- Parameters:
index – [in] Column index (0-3)
c – [in] 4D vector to set as the column
-
inline void SetAxis(uint32_t index, const XVector3<T> &a)#
Sets a column of the matrix to the specified 3D vector (w=0)
- Parameters:
index – [in] Column index (0-3)
a – [in] 3D vector to set as the column (w component set to 0)
-
inline void SetTranslation(const Point3 &p)#
Sets the translation column (fourth column) of the matrix.
- Parameters:
p – [in] 3D point representing the translation
-
inline const Vec3 &GetAxis(int i) const#
Gets a column as a 3D vector (ignoring w component)
- Parameters:
i – [in] Column index (0-3)
- Returns:
Const reference to 3D vector representing the column
-
inline const Vec4 &GetCol(int i) const#
Gets a column as a 4D vector.
- Parameters:
i – [in] Column index (0-3)
- Returns:
Const reference to 4D vector representing the column
Public Members