Use index notation instead of row/column notation in CMatrix4::getInverse as in other matrix functions.
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@5570 dfc29bdd-3216-0410-991c-e03cc46cb475master
parent
2e3e75d049
commit
78572df3f1
|
@ -1371,66 +1371,66 @@ namespace core
|
|||
#endif
|
||||
const CMatrix4<T> &m = *this;
|
||||
|
||||
f32 d = (m(0, 0) * m(1, 1) - m(0, 1) * m(1, 0)) * (m(2, 2) * m(3, 3) - m(2, 3) * m(3, 2)) -
|
||||
(m(0, 0) * m(1, 2) - m(0, 2) * m(1, 0)) * (m(2, 1) * m(3, 3) - m(2, 3) * m(3, 1)) +
|
||||
(m(0, 0) * m(1, 3) - m(0, 3) * m(1, 0)) * (m(2, 1) * m(3, 2) - m(2, 2) * m(3, 1)) +
|
||||
(m(0, 1) * m(1, 2) - m(0, 2) * m(1, 1)) * (m(2, 0) * m(3, 3) - m(2, 3) * m(3, 0)) -
|
||||
(m(0, 1) * m(1, 3) - m(0, 3) * m(1, 1)) * (m(2, 0) * m(3, 2) - m(2, 2) * m(3, 0)) +
|
||||
(m(0, 2) * m(1, 3) - m(0, 3) * m(1, 2)) * (m(2, 0) * m(3, 1) - m(2, 1) * m(3, 0));
|
||||
f32 d = (m[0] * m[5] - m[1] * m[4]) * (m[10] * m[15] - m[11] * m[14]) -
|
||||
(m[0] * m[6] - m[2] * m[4]) * (m[9] * m[15] - m[11] * m[13]) +
|
||||
(m[0] * m[7] - m[3] * m[4]) * (m[9] * m[14] - m[10] * m[13]) +
|
||||
(m[1] * m[6] - m[2] * m[5]) * (m[8] * m[15] - m[11] * m[12]) -
|
||||
(m[1] * m[7] - m[3] * m[5]) * (m[8] * m[14] - m[10] * m[12]) +
|
||||
(m[2] * m[7] - m[3] * m[6]) * (m[8] * m[13] - m[9] * m[12]);
|
||||
|
||||
if( core::iszero ( d, FLT_MIN ) )
|
||||
return false;
|
||||
|
||||
d = core::reciprocal ( d );
|
||||
|
||||
out(0, 0) = d * (m(1, 1) * (m(2, 2) * m(3, 3) - m(2, 3) * m(3, 2)) +
|
||||
m(1, 2) * (m(2, 3) * m(3, 1) - m(2, 1) * m(3, 3)) +
|
||||
m(1, 3) * (m(2, 1) * m(3, 2) - m(2, 2) * m(3, 1)));
|
||||
out(0, 1) = d * (m(2, 1) * (m(0, 2) * m(3, 3) - m(0, 3) * m(3, 2)) +
|
||||
m(2, 2) * (m(0, 3) * m(3, 1) - m(0, 1) * m(3, 3)) +
|
||||
m(2, 3) * (m(0, 1) * m(3, 2) - m(0, 2) * m(3, 1)));
|
||||
out(0, 2) = d * (m(3, 1) * (m(0, 2) * m(1, 3) - m(0, 3) * m(1, 2)) +
|
||||
m(3, 2) * (m(0, 3) * m(1, 1) - m(0, 1) * m(1, 3)) +
|
||||
m(3, 3) * (m(0, 1) * m(1, 2) - m(0, 2) * m(1, 1)));
|
||||
out(0, 3) = d * (m(0, 1) * (m(1, 3) * m(2, 2) - m(1, 2) * m(2, 3)) +
|
||||
m(0, 2) * (m(1, 1) * m(2, 3) - m(1, 3) * m(2, 1)) +
|
||||
m(0, 3) * (m(1, 2) * m(2, 1) - m(1, 1) * m(2, 2)));
|
||||
out(1, 0) = d * (m(1, 2) * (m(2, 0) * m(3, 3) - m(2, 3) * m(3, 0)) +
|
||||
m(1, 3) * (m(2, 2) * m(3, 0) - m(2, 0) * m(3, 2)) +
|
||||
m(1, 0) * (m(2, 3) * m(3, 2) - m(2, 2) * m(3, 3)));
|
||||
out(1, 1) = d * (m(2, 2) * (m(0, 0) * m(3, 3) - m(0, 3) * m(3, 0)) +
|
||||
m(2, 3) * (m(0, 2) * m(3, 0) - m(0, 0) * m(3, 2)) +
|
||||
m(2, 0) * (m(0, 3) * m(3, 2) - m(0, 2) * m(3, 3)));
|
||||
out(1, 2) = d * (m(3, 2) * (m(0, 0) * m(1, 3) - m(0, 3) * m(1, 0)) +
|
||||
m(3, 3) * (m(0, 2) * m(1, 0) - m(0, 0) * m(1, 2)) +
|
||||
m(3, 0) * (m(0, 3) * m(1, 2) - m(0, 2) * m(1, 3)));
|
||||
out(1, 3) = d * (m(0, 2) * (m(1, 3) * m(2, 0) - m(1, 0) * m(2, 3)) +
|
||||
m(0, 3) * (m(1, 0) * m(2, 2) - m(1, 2) * m(2, 0)) +
|
||||
m(0, 0) * (m(1, 2) * m(2, 3) - m(1, 3) * m(2, 2)));
|
||||
out(2, 0) = d * (m(1, 3) * (m(2, 0) * m(3, 1) - m(2, 1) * m(3, 0)) +
|
||||
m(1, 0) * (m(2, 1) * m(3, 3) - m(2, 3) * m(3, 1)) +
|
||||
m(1, 1) * (m(2, 3) * m(3, 0) - m(2, 0) * m(3, 3)));
|
||||
out(2, 1) = d * (m(2, 3) * (m(0, 0) * m(3, 1) - m(0, 1) * m(3, 0)) +
|
||||
m(2, 0) * (m(0, 1) * m(3, 3) - m(0, 3) * m(3, 1)) +
|
||||
m(2, 1) * (m(0, 3) * m(3, 0) - m(0, 0) * m(3, 3)));
|
||||
out(2, 2) = d * (m(3, 3) * (m(0, 0) * m(1, 1) - m(0, 1) * m(1, 0)) +
|
||||
m(3, 0) * (m(0, 1) * m(1, 3) - m(0, 3) * m(1, 1)) +
|
||||
m(3, 1) * (m(0, 3) * m(1, 0) - m(0, 0) * m(1, 3)));
|
||||
out(2, 3) = d * (m(0, 3) * (m(1, 1) * m(2, 0) - m(1, 0) * m(2, 1)) +
|
||||
m(0, 0) * (m(1, 3) * m(2, 1) - m(1, 1) * m(2, 3)) +
|
||||
m(0, 1) * (m(1, 0) * m(2, 3) - m(1, 3) * m(2, 0)));
|
||||
out(3, 0) = d * (m(1, 0) * (m(2, 2) * m(3, 1) - m(2, 1) * m(3, 2)) +
|
||||
m(1, 1) * (m(2, 0) * m(3, 2) - m(2, 2) * m(3, 0)) +
|
||||
m(1, 2) * (m(2, 1) * m(3, 0) - m(2, 0) * m(3, 1)));
|
||||
out(3, 1) = d * (m(2, 0) * (m(0, 2) * m(3, 1) - m(0, 1) * m(3, 2)) +
|
||||
m(2, 1) * (m(0, 0) * m(3, 2) - m(0, 2) * m(3, 0)) +
|
||||
m(2, 2) * (m(0, 1) * m(3, 0) - m(0, 0) * m(3, 1)));
|
||||
out(3, 2) = d * (m(3, 0) * (m(0, 2) * m(1, 1) - m(0, 1) * m(1, 2)) +
|
||||
m(3, 1) * (m(0, 0) * m(1, 2) - m(0, 2) * m(1, 0)) +
|
||||
m(3, 2) * (m(0, 1) * m(1, 0) - m(0, 0) * m(1, 1)));
|
||||
out(3, 3) = d * (m(0, 0) * (m(1, 1) * m(2, 2) - m(1, 2) * m(2, 1)) +
|
||||
m(0, 1) * (m(1, 2) * m(2, 0) - m(1, 0) * m(2, 2)) +
|
||||
m(0, 2) * (m(1, 0) * m(2, 1) - m(1, 1) * m(2, 0)));
|
||||
out[0] = d * (m[5] * (m[10] * m[15] - m[11] * m[14]) +
|
||||
m[6] * (m[11] * m[13] - m[9] * m[15]) +
|
||||
m[7] * (m[9] * m[14] - m[10] * m[13]));
|
||||
out[1] = d * (m[9] * (m[2] * m[15] - m[3] * m[14]) +
|
||||
m[10] * (m[3] * m[13] - m[1] * m[15]) +
|
||||
m[11] * (m[1] * m[14] - m[2] * m[13]));
|
||||
out[2] = d * (m[13] * (m[2] * m[7] - m[3] * m[6]) +
|
||||
m[14] * (m[3] * m[5] - m[1] * m[7]) +
|
||||
m[15] * (m[1] * m[6] - m[2] * m[5]));
|
||||
out[3] = d * (m[1] * (m[7] * m[10] - m[6] * m[11]) +
|
||||
m[2] * (m[5] * m[11] - m[7] * m[9]) +
|
||||
m[3] * (m[6] * m[9] - m[5] * m[10]));
|
||||
out[4] = d * (m[6] * (m[8] * m[15] - m[11] * m[12]) +
|
||||
m[7] * (m[10] * m[12] - m[8] * m[14]) +
|
||||
m[4] * (m[11] * m[14] - m[10] * m[15]));
|
||||
out[5] = d * (m[10] * (m[0] * m[15] - m[3] * m[12]) +
|
||||
m[11] * (m[2] * m[12] - m[0] * m[14]) +
|
||||
m[8] * (m[3] * m[14] - m[2] * m[15]));
|
||||
out[6] = d * (m[14] * (m[0] * m[7] - m[3] * m[4]) +
|
||||
m[15] * (m[2] * m[4] - m[0] * m[6]) +
|
||||
m[12] * (m[3] * m[6] - m[2] * m[7]));
|
||||
out[7] = d * (m[2] * (m[7] * m[8] - m[4] * m[11]) +
|
||||
m[3] * (m[4] * m[10] - m[6] * m[8]) +
|
||||
m[0] * (m[6] * m[11] - m[7] * m[10]));
|
||||
out[8] = d * (m[7] * (m[8] * m[13] - m[9] * m[12]) +
|
||||
m[4] * (m[9] * m[15] - m[11] * m[13]) +
|
||||
m[5] * (m[11] * m[12] - m[8] * m[15]));
|
||||
out[9] = d * (m[11] * (m[0] * m[13] - m[1] * m[12]) +
|
||||
m[8] * (m[1] * m[15] - m[3] * m[13]) +
|
||||
m[9] * (m[3] * m[12] - m[0] * m[15]));
|
||||
out[10] = d * (m[15] * (m[0] * m[5] - m[1] * m[4]) +
|
||||
m[12] * (m[1] * m[7] - m[3] * m[5]) +
|
||||
m[13] * (m[3] * m[4] - m[0] * m[7]));
|
||||
out[11] = d * (m[3] * (m[5] * m[8] - m[4] * m[9]) +
|
||||
m[0] * (m[7] * m[9] - m[5] * m[11]) +
|
||||
m[1] * (m[4] * m[11] - m[7] * m[8]));
|
||||
out[12] = d * (m[4] * (m[10] * m[13] - m[9] * m[14]) +
|
||||
m[5] * (m[8] * m[14] - m[10] * m[12]) +
|
||||
m[6] * (m[9] * m[12] - m[8] * m[13]));
|
||||
out[13] = d * (m[8] * (m[2] * m[13] - m[1] * m[14]) +
|
||||
m[9] * (m[0] * m[14] - m[2] * m[12]) +
|
||||
m[10] * (m[1] * m[12] - m[0] * m[13]));
|
||||
out[14] = d * (m[12] * (m[2] * m[5] - m[1] * m[6]) +
|
||||
m[13] * (m[0] * m[6] - m[2] * m[4]) +
|
||||
m[14] * (m[1] * m[4] - m[0] * m[5]));
|
||||
out[15] = d * (m[0] * (m[5] * m[10] - m[6] * m[9]) +
|
||||
m[1] * (m[6] * m[8] - m[4] * m[10]) +
|
||||
m[2] * (m[4] * m[9] - m[5] * m[8]));
|
||||
|
||||
#if defined ( USE_MATRIX_TEST )
|
||||
out.definitelyIdentityMatrix = definitelyIdentityMatrix;
|
||||
|
|
Loading…
Reference in New Issue