MCPcopy Create free account
hub / github.com/axmolengine/axmol / inverse

Method inverse

core/math/Mat4.cpp:650–697  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

648}
649
650bool Mat4::inverse()
651{
652 float a0 = m[0] * m[5] - m[1] * m[4];
653 float a1 = m[0] * m[6] - m[2] * m[4];
654 float a2 = m[0] * m[7] - m[3] * m[4];
655 float a3 = m[1] * m[6] - m[2] * m[5];
656 float a4 = m[1] * m[7] - m[3] * m[5];
657 float a5 = m[2] * m[7] - m[3] * m[6];
658 float b0 = m[8] * m[13] - m[9] * m[12];
659 float b1 = m[8] * m[14] - m[10] * m[12];
660 float b2 = m[8] * m[15] - m[11] * m[12];
661 float b3 = m[9] * m[14] - m[10] * m[13];
662 float b4 = m[9] * m[15] - m[11] * m[13];
663 float b5 = m[10] * m[15] - m[11] * m[14];
664
665 // Calculate the determinant.
666 float det = a0 * b5 - a1 * b4 + a2 * b3 + a3 * b2 - a4 * b1 + a5 * b0;
667
668 // Close to zero, can't invert.
669 if (std::abs(det) <= MATH_TOLERANCE)
670 return false;
671
672 // Support the case where m == dst.
673 Mat4 inverse;
674 inverse.m[0] = m[5] * b5 - m[6] * b4 + m[7] * b3;
675 inverse.m[1] = -m[1] * b5 + m[2] * b4 - m[3] * b3;
676 inverse.m[2] = m[13] * a5 - m[14] * a4 + m[15] * a3;
677 inverse.m[3] = -m[9] * a5 + m[10] * a4 - m[11] * a3;
678
679 inverse.m[4] = -m[4] * b5 + m[6] * b2 - m[7] * b1;
680 inverse.m[5] = m[0] * b5 - m[2] * b2 + m[3] * b1;
681 inverse.m[6] = -m[12] * a5 + m[14] * a2 - m[15] * a1;
682 inverse.m[7] = m[8] * a5 - m[10] * a2 + m[11] * a1;
683
684 inverse.m[8] = m[4] * b4 - m[5] * b2 + m[7] * b0;
685 inverse.m[9] = -m[0] * b4 + m[1] * b2 - m[3] * b0;
686 inverse.m[10] = m[12] * a4 - m[13] * a2 + m[15] * a0;
687 inverse.m[11] = -m[8] * a4 + m[9] * a2 - m[11] * a0;
688
689 inverse.m[12] = -m[4] * b3 + m[5] * b1 - m[6] * b0;
690 inverse.m[13] = m[0] * b3 - m[1] * b1 + m[2] * b0;
691 inverse.m[14] = -m[12] * a3 + m[13] * a1 - m[14] * a0;
692 inverse.m[15] = m[8] * a3 - m[9] * a1 + m[10] * a0;
693
694 multiply(inverse, 1.0f / det, this);
695
696 return true;
697}
698
699bool Mat4::isIdentity() const
700{

Callers 4

drawMethod · 0.45
getNormalMat3OfMat4Function · 0.45
getInversedMethod · 0.45

Calls 2

absFunction · 0.50
multiplyFunction · 0.50

Tested by

no test coverage detected