Ray Tracer Common Project
Image rendering program based on the ray tracing technique.
Public Types | Public Member Functions | Friends | List of all members
rt::matrix Class Reference

4x4 matrix More...

#include <matrix.hpp>

Public Types

enum  Format { RowMajorFormat, ColumnMajorFormat }
 Matrix format enum. More...
 

Public Member Functions

 matrix ()
 Construct a Identity matrix.
 
 matrix (const matrix &)
 Copy constructor.
 
 matrix (double *data, Format format=RowMajorFormat)
 Make a new matrix from data. More...
 
 matrix (double m11, double m12, double m13, double m14, double m21, double m22, double m23, double m24, double m31, double m32, double m33, double m34, double m41, double m42, double m43, double m44)
 Make a new matrix from its values. More...
 
void set (double m11, double m12, double m13, double m14, double m21, double m22, double m23, double m24, double m31, double m32, double m33, double m34, double m41, double m42, double m43, double m44)
 Set matrix values. More...
 
void optimize ()
 Optimize the matrix. More...
 
void setToIdentity ()
 set matrix to identity.
 
bool isIdentity () const
 
double determinant () const
 Compute matrix determinant.
 
void invert (bool *invertible=0)
 Invert the matrix. More...
 
void transpose ()
 Transpose the matrix.
 
void translate (const vector &)
 Translate the matrix.
 
void translate (double x, double y, double z)
 Translate the matrix. More...
 
void scale (const vector &)
 Scale operation.
 
void scale (double x, double y, double z)
 Scale operation.
 
void scale (double factor)
 Scale operation.
 
void rotate (double angle, const vector &)
 Rotate the matrix.
 
void rotate (double angle, double x, double y, double z=0.0f)
 Rotate the matrix.
 
matrix inverted (bool *invertible=0) const
 
matrix transposed () const
 
matrix translated (const vector &) const
 
matrix translated (double x, double y, double z) const
 
matrix scaled (const vector &) const
 
matrix scaled (double x, double y, double z) const
 
matrix scaled (double factor) const
 
matrix rotated (double angle, const vector &) const
 
matrix rotated (double angle, double x, double y, double z) const
 
void lookAt (const vector &eye, const vector &center, const vector &up)
 
vector position () const
 
vector rotation () const
 
vector scale () const
 
double at (int row, int column) const
 
vector map (const vector &) const
 
const double & operator() (int row, int column) const
 
double & operator() (int row, int column)
 
matrixoperator+= (const matrix &)
 
matrixoperator-= (const matrix &)
 
matrixoperator*= (const matrix &)
 
matrixoperator*= (double)
 
bool operator== (const matrix &) const
 
bool operator!= (const matrix &) const
 
const double * data () const
 

Friends

matrix operator+ (const matrix &m1, const matrix &m2)
 
matrix operator- (const matrix &m1, const matrix &m2)
 
matrix operator* (const matrix &m1, const matrix &m2)
 
vector operator* (const matrix &m, const vector &v)
 
vector operator* (const vector &v, const matrix &m)
 
matrix operator- (const matrix &m)
 
matrix operator* (double, const matrix &m)
 
matrix operator* (const matrix &m, double)
 

Detailed Description

4x4 matrix

This class describes a 3D vector, providing basic operations (addition, product, etc.) by overloading common operators.

It also allows you to apply some basic spaces transformations sush as translations, rotations, scales, etc...

Member Enumeration Documentation

◆ Format

Matrix format enum.

Enumerator
RowMajorFormat 

Represent a matrix in row-major format in memory

ColumnMajorFormat 

Represent a matrix in column-major format in memory

Constructor & Destructor Documentation

◆ matrix() [1/2]

rt::matrix::matrix ( double *  data,
Format  format = RowMajorFormat 
)

Make a new matrix from data.

Parameters
dataA double array containing all 16 values organized according to #format.
formatData format.

◆ matrix() [2/2]

rt::matrix::matrix ( double  m11,
double  m12,
double  m13,
double  m14,
double  m21,
double  m22,
double  m23,
double  m24,
double  m31,
double  m32,
double  m33,
double  m34,
double  m41,
double  m42,
double  m43,
double  m44 
)

Make a new matrix from its values.

The values must be given in column-majorr format.

Member Function Documentation

◆ invert()

void rt::matrix::invert ( bool *  invertible = 0)

Invert the matrix.

If the matrix is non invertible, the #invertible value will be set to false (if #invertible is not null).

◆ isIdentity()

bool rt::matrix::isIdentity ( ) const
Returns
if this matrix is the identity.

◆ optimize()

void rt::matrix::optimize ( )

Optimize the matrix.

Detect translation/rotation/etc... matrix.

◆ set()

void rt::matrix::set ( double  m11,
double  m12,
double  m13,
double  m14,
double  m21,
double  m22,
double  m23,
double  m24,
double  m31,
double  m32,
double  m33,
double  m34,
double  m41,
double  m42,
double  m43,
double  m44 
)

Set matrix values.

The values must be given in column-majorr format.

◆ translate()

void rt::matrix::translate ( double  x,
double  y,
double  z 
)

Translate the matrix.

Alias for matrix.translate(vector(x, y, z))


The documentation for this class was generated from the following files: