#include "NGLMath.h"
Go to the source code of this file.
Functions |
ngl::Matrix | Lookat (const ngl::Vector &_eye, const ngl::Vector &_target, const ngl::Vector &_lookup) |
| method for constructing view matrix based on a approximated 'up' vector
|
ngl::Matrix | Adj (const ngl::Matrix &_mat) |
| calculated adjoint of matrix
|
float | Det (const ngl::Matrix &_mat) |
| calculated determinant of matrix
|
ngl::Matrix | Inverse (const ngl::Matrix &_mat) |
| the inverse of a matrix
|
Function Documentation
ngl::Matrix Adj |
( |
const ngl::Matrix & |
_mat | ) |
|
calculated adjoint of matrix
- Parameters:
-
[in] | _mat | the matrix to calculate from |
- Returns:
- adjoint
Definition at line 42 of file NGLMath.cpp.
{
ngl::Matrix m;
m.m_00 = _mat.m_m[1][1]*(_mat.m_m[2][2]*_mat.m_m[3][3]-_mat.m_m[3][2]*_mat.m_m[2][3])+_mat.m_m[1][2]*(_mat.m_m[3][1]*_mat.m_m[2][3]-_mat.m_m[2][1]*_mat.m_m[3][3])+_mat.m_m[1][3]*(_mat.m_m[2][1]*_mat.m_m[3][2]-_mat.m_m[3][1]*_mat.m_m[2][2]);
m.m_01 = _mat.m_m[1][0]*(_mat.m_m[3][2]*_mat.m_m[2][3]-_mat.m_m[2][2]*_mat.m_m[3][3])+_mat.m_m[1][2]*(_mat.m_m[2][0]*_mat.m_m[3][3]-_mat.m_m[3][0]*_mat.m_m[2][3])+_mat.m_m[1][3]*(_mat.m_m[3][0]*_mat.m_m[2][2]-_mat.m_m[2][0]*_mat.m_m[3][2]);
m.m_02 = _mat.m_m[1][0]*(_mat.m_m[2][1]*_mat.m_m[3][3]-_mat.m_m[3][1]*_mat.m_m[2][3])+_mat.m_m[1][1]*(_mat.m_m[3][0]*_mat.m_m[2][3]-_mat.m_m[2][0]*_mat.m_m[3][3])+_mat.m_m[1][3]*(_mat.m_m[2][0]*_mat.m_m[3][1]-_mat.m_m[3][0]*_mat.m_m[2][1]);
m.m_03 = _mat.m_m[1][0]*(_mat.m_m[3][1]*_mat.m_m[2][2]-_mat.m_m[2][1]*_mat.m_m[3][2])+_mat.m_m[1][1]*(_mat.m_m[2][0]*_mat.m_m[3][2]-_mat.m_m[3][0]*_mat.m_m[2][2])+_mat.m_m[1][2]*(_mat.m_m[3][0]*_mat.m_m[2][1]-_mat.m_m[2][0]*_mat.m_m[3][1]);
m.m_10 = _mat.m_m[0][1]*(_mat.m_m[3][2]*_mat.m_m[2][3]-_mat.m_m[2][2]*_mat.m_m[3][3])+_mat.m_m[0][2]*(_mat.m_m[2][1]*_mat.m_m[3][3]-_mat.m_m[3][1]*_mat.m_m[2][3])+_mat.m_m[0][3]*(_mat.m_m[3][1]*_mat.m_m[2][2]-_mat.m_m[2][1]*_mat.m_m[3][2]);
m.m_11 = _mat.m_m[0][0]*(_mat.m_m[2][2]*_mat.m_m[3][3]-_mat.m_m[3][2]*_mat.m_m[2][3])+_mat.m_m[0][2]*(_mat.m_m[3][0]*_mat.m_m[2][3]-_mat.m_m[2][0]*_mat.m_m[3][3])+_mat.m_m[0][3]*(_mat.m_m[2][0]*_mat.m_m[3][2]-_mat.m_m[3][0]*_mat.m_m[2][2]);
m.m_12 = _mat.m_m[0][0]*(_mat.m_m[3][1]*_mat.m_m[2][3]-_mat.m_m[2][1]*_mat.m_m[3][3])+_mat.m_m[0][1]*(_mat.m_m[2][0]*_mat.m_m[3][3]-_mat.m_m[3][0]*_mat.m_m[2][3])+_mat.m_m[0][3]*(_mat.m_m[3][0]*_mat.m_m[2][1]-_mat.m_m[2][0]*_mat.m_m[3][1]);
m.m_13= _mat.m_m[0][0]*(_mat.m_m[2][1]*_mat.m_m[3][2]-_mat.m_m[3][1]*_mat.m_m[2][2])+_mat.m_m[0][1]*(_mat.m_m[3][0]*_mat.m_m[2][2]-_mat.m_m[2][0]*_mat.m_m[3][2])+_mat.m_m[0][2]*(_mat.m_m[2][0]*_mat.m_m[3][1]-_mat.m_m[3][0]*_mat.m_m[2][1]);
m.m_20 = _mat.m_m[0][1]*(_mat.m_m[1][2]*_mat.m_m[3][3]-_mat.m_m[3][2]*_mat.m_m[1][3])+_mat.m_m[0][2]*(_mat.m_m[3][1]*_mat.m_m[1][3]-_mat.m_m[1][1]*_mat.m_m[3][3])+_mat.m_m[0][3]*(_mat.m_m[1][1]*_mat.m_m[3][2]-_mat.m_m[3][1]*_mat.m_m[1][2]);
m.m_21 = _mat.m_m[0][0]*(_mat.m_m[3][2]*_mat.m_m[1][3]-_mat.m_m[1][2]*_mat.m_m[3][3])+_mat.m_m[0][2]*(_mat.m_m[1][0]*_mat.m_m[3][3]-_mat.m_m[3][0]*_mat.m_m[1][3])+_mat.m_m[0][3]*(_mat.m_m[3][0]*_mat.m_m[1][2]-_mat.m_m[1][0]*_mat.m_m[3][2]);
m.m_22 = _mat.m_m[0][0]*(_mat.m_m[1][1]*_mat.m_m[3][3]-_mat.m_m[3][1]*_mat.m_m[1][3])+_mat.m_m[0][1]*(_mat.m_m[3][0]*_mat.m_m[1][3]-_mat.m_m[1][0]*_mat.m_m[3][3])+_mat.m_m[0][3]*(_mat.m_m[1][0]*_mat.m_m[3][1]-_mat.m_m[3][0]*_mat.m_m[1][1]);
m.m_23 = _mat.m_m[0][0]*(_mat.m_m[3][1]*_mat.m_m[1][2]-_mat.m_m[1][1]*_mat.m_m[3][2])+_mat.m_m[0][1]*(_mat.m_m[1][0]*_mat.m_m[3][2]-_mat.m_m[3][0]*_mat.m_m[1][2])+_mat.m_m[0][2]*(_mat.m_m[3][0]*_mat.m_m[1][1]-_mat.m_m[1][0]*_mat.m_m[3][1]);
m.m_30 = _mat.m_m[0][1]*(_mat.m_m[2][2]*_mat.m_m[1][3]-_mat.m_m[1][2]*_mat.m_m[2][3])+_mat.m_m[0][2]*(_mat.m_m[1][1]*_mat.m_m[2][3]-_mat.m_m[2][1]*_mat.m_m[1][3])+_mat.m_m[0][3]*(_mat.m_m[2][1]*_mat.m_m[1][2]-_mat.m_m[1][1]*_mat.m_m[2][2]);
m.m_31 = _mat.m_m[0][0]*(_mat.m_m[1][2]*_mat.m_m[2][3]-_mat.m_m[2][2]*_mat.m_m[1][3])+_mat.m_m[0][2]*(_mat.m_m[2][0]*_mat.m_m[1][3]-_mat.m_m[1][0]*_mat.m_m[2][3])+_mat.m_m[0][3]*(_mat.m_m[1][0]*_mat.m_m[2][2]-_mat.m_m[2][0]*_mat.m_m[1][2]);
m.m_32 = _mat.m_m[0][0]*(_mat.m_m[2][1]*_mat.m_m[1][3]-_mat.m_m[1][1]*_mat.m_m[2][3])+_mat.m_m[0][1]*(_mat.m_m[1][0]*_mat.m_m[2][3]-_mat.m_m[2][0]*_mat.m_m[1][3])+_mat.m_m[0][3]*(_mat.m_m[2][0]*_mat.m_m[1][1]-_mat.m_m[1][0]*_mat.m_m[2][1]);
m.m_33 = _mat.m_m[0][0]*(_mat.m_m[1][1]*_mat.m_m[2][2]-_mat.m_m[2][1]*_mat.m_m[1][2])+_mat.m_m[0][1]*(_mat.m_m[2][0]*_mat.m_m[1][2]-_mat.m_m[1][0]*_mat.m_m[2][2])+_mat.m_m[0][2]*(_mat.m_m[1][0]*_mat.m_m[2][1]-_mat.m_m[2][0]*_mat.m_m[1][1]);
return m;
}
float Det |
( |
const ngl::Matrix & |
_mat | ) |
|
calculated determinant of matrix
- Parameters:
-
[in] | _mat | the matrix to calculate from |
- Returns:
- determinant
Definition at line 69 of file NGLMath.cpp.
{
return (
_mat.m_m[0][0]*_mat.m_m[1][1]*_mat.m_m[2][2]*_mat.m_m[3][3] - _mat.m_m[0][0]*_mat.m_m[1][1]*_mat.m_m[2][3]*_mat.m_m[3][2] + _mat.m_m[0][0]*_mat.m_m[1][2]*_mat.m_m[2][3]*_mat.m_m[3][1] - _mat.m_m[0][0]*_mat.m_m[1][2]*_mat.m_m[2][1]*_mat.m_m[3][3] + _mat.m_m[0][0]*_mat.m_m[1][3]*_mat.m_m[2][1]*_mat.m_m[3][2] - _mat.m_m[0][0]*_mat.m_m[1][3]*_mat.m_m[2][2]*_mat.m_m[3][1]
- _mat.m_m[1][0]*_mat.m_m[2][1]*_mat.m_m[3][2]*_mat.m_m[0][3] + _mat.m_m[1][0]*_mat.m_m[2][1]*_mat.m_m[0][2]*_mat.m_m[3][3] - _mat.m_m[1][0]*_mat.m_m[3][1]*_mat.m_m[0][2]*_mat.m_m[2][3] + _mat.m_m[1][0]*_mat.m_m[3][1]*_mat.m_m[2][2]*_mat.m_m[0][3] - _mat.m_m[1][0]*_mat.m_m[0][1]*_mat.m_m[2][2]*_mat.m_m[3][3] + _mat.m_m[1][0]*_mat.m_m[0][1]*_mat.m_m[3][2]*_mat.m_m[2][3]
+ _mat.m_m[2][0]*_mat.m_m[3][1]*_mat.m_m[0][2]*_mat.m_m[1][3] - _mat.m_m[2][0]*_mat.m_m[3][1]*_mat.m_m[1][2]*_mat.m_m[0][3] + _mat.m_m[2][0]*_mat.m_m[0][1]*_mat.m_m[1][2]*_mat.m_m[3][3] - _mat.m_m[2][0]*_mat.m_m[0][1]*_mat.m_m[3][2]*_mat.m_m[1][3] + _mat.m_m[2][0]*_mat.m_m[1][1]*_mat.m_m[3][2]*_mat.m_m[0][3] - _mat.m_m[2][0]*_mat.m_m[1][1]*_mat.m_m[0][2]*_mat.m_m[3][3]
- _mat.m_m[3][0]*_mat.m_m[0][1]*_mat.m_m[1][2]*_mat.m_m[2][3] + _mat.m_m[3][0]*_mat.m_m[0][1]*_mat.m_m[2][2]*_mat.m_m[1][3] - _mat.m_m[3][0]*_mat.m_m[1][1]*_mat.m_m[2][2]*_mat.m_m[0][3] + _mat.m_m[3][0]*_mat.m_m[1][1]*_mat.m_m[0][2]*_mat.m_m[2][3] - _mat.m_m[3][0]*_mat.m_m[2][1]*_mat.m_m[0][2]*_mat.m_m[1][3] + _mat.m_m[3][0]*_mat.m_m[2][1]*_mat.m_m[1][2]*_mat.m_m[0][3]
);
}
ngl::Matrix Inverse |
( |
const ngl::Matrix & |
_mat | ) |
|
the inverse of a matrix
- Parameters:
-
[in] | _mat | the matrix to calculate from |
- Returns:
- inverse
Definition at line 80 of file NGLMath.cpp.
References Adj(), and Det().
{
return Adj(_mat)*(1.0/Det(_mat));
}
ngl::Matrix Lookat |
( |
const ngl::Vector & |
_eye, |
|
|
const ngl::Vector & |
_target, |
|
|
const ngl::Vector & |
_lookup |
|
) |
| |
method for constructing view matrix based on a approximated 'up' vector
- Parameters:
-
[in] | _eye | the position of the source |
[in] | _target | the position the source is looking at |
[in] | _lookup | the approximated 'up' vector for this source |
- Returns:
- ngl::Matrix view, view matrix for this lookat
Definition at line 4 of file NGLMath.cpp.
{
ngl::Vector minusEye = -_eye;
ngl::Vector w= _eye - _target;
ngl::Vector u= _lookup.cross(w);
ngl::Vector v= w.cross(u);
w.normalize();
v.normalize();
u.normalize();
ngl::Matrix view;
view.m_00 = u.m_x;
view.m_01 = u.m_y;
view.m_02 = u.m_z;
view.m_03 = minusEye.dot(u);
view.m_10 = v.m_x;
view.m_11 = v.m_y;
view.m_12 = v.m_z;
view.m_13 = minusEye.dot(v);
view.m_20 = w.m_x;
view.m_21 = w.m_y;
view.m_22 = w.m_z;
view.m_23 = minusEye.dot(w);
view.m_30 = 0.0;
view.m_31 = 0.0;
view.m_32 = 0.0;
view.m_33 = 1.0;
return view;
}