Game Development Reference
In-Depth Information
Matrix4 inverse() const
{
Matrix4 result;
result.setInverse(*this);
return result;
}
/**
* Inverts the matrix.
*/
void invert()
{
setInverse(*this);
}
};
Excerpt from src/core.cpp
real Matrix4::getDeterminant() const
{
return data[8]*data[5]*data[2]+
data[4]*data[9]*data[2]+
data[8]*data[1]*data[6]-
data[0]*data[9]*data[6]-
data[4]*data[1]*data[10]+
data[0]*data[5]*data[10];
}
void Matrix4::setInverse(const Matrix4 &m)
{
// Make sure the determinant is non-zero.
real det = getDeterminant();
if (det == 0) return;
det = ((real)1.0)/det;
data[0] = (-m.data[9]*m.data[6]+m.data[5]*m.data[10])*det;
data[4] = (m.data[8]*m.data[6]-m.data[4]*m.data[10])*det;
data[8] = (-m.data[8]*m.data[5]+m.data[4]*m.data[9]* m.data[15])*det;
data[1] = (m.data[9]*m.data[2]-m.data[1]*m.data[10])*det;
data[5] = (-m.data[8]*m.data[2]+m.data[0]*m.data[10])*det;
data[9] = (m.data[8]*m.data[1]-m.data[0]*m.data[9]* m.data[15])*det;
data[2] = (-m.data[5]*m.data[2]+m.data[1]*m.data[6]* m.data[15])*det;
Search Nedrilad ::




Custom Search