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-e03cc46cb475
master
cutealien 2017-11-06 16:59:10 +00:00
parent 2e3e75d049
commit 78572df3f1
1 changed files with 54 additions and 54 deletions

View File

@ -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;