Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void Matrix4::Inverse( void )
- {
- double det;
- Matrix4 ret;
- int i;
- ret.m_elements[0] = m_elements[5]*m_elements[10]*m_elements[15] - m_elements[5]*m_elements[11]*m_elements[14] - m_elements[9]*m_elements[6]*m_elements[15]
- + m_elements[9]*m_elements[7]*m_elements[14] + m_elements[13]*m_elements[6]*m_elements[11] - m_elements[13]*m_elements[7]*m_elements[10];
- ret.m_elements[4] = -m_elements[4]*m_elements[10]*m_elements[15] + m_elements[4]*m_elements[11]*m_elements[14] + m_elements[8]*m_elements[6]*m_elements[15]
- - m_elements[8]*m_elements[7]*m_elements[14] - m_elements[12]*m_elements[6]*m_elements[11] + m_elements[12]*m_elements[7]*m_elements[10];
- ret.m_elements[8] = m_elements[4]*m_elements[9]*m_elements[15] - m_elements[4]*m_elements[11]*m_elements[13] - m_elements[8]*m_elements[5]*m_elements[15]
- + m_elements[8]*m_elements[7]*m_elements[13] + m_elements[12]*m_elements[5]*m_elements[11] - m_elements[12]*m_elements[7]*m_elements[9];
- ret.m_elements[12] = -m_elements[4]*m_elements[9]*m_elements[14] + m_elements[4]*m_elements[10]*m_elements[13] + m_elements[8]*m_elements[5]*m_elements[14]
- - m_elements[8]*m_elements[6]*m_elements[13] - m_elements[12]*m_elements[5]*m_elements[10] + m_elements[12]*m_elements[6]*m_elements[9];
- ret.m_elements[1] = -m_elements[1]*m_elements[10]*m_elements[15] + m_elements[1]*m_elements[11]*m_elements[14] + m_elements[9]*m_elements[2]*m_elements[15]
- - m_elements[9]*m_elements[3]*m_elements[14] - m_elements[13]*m_elements[2]*m_elements[11] + m_elements[13]*m_elements[3]*m_elements[10];
- ret.m_elements[5] = m_elements[0]*m_elements[10]*m_elements[15] - m_elements[0]*m_elements[11]*m_elements[14] - m_elements[8]*m_elements[2]*m_elements[15]
- + m_elements[8]*m_elements[3]*m_elements[14] + m_elements[12]*m_elements[2]*m_elements[11] - m_elements[12]*m_elements[3]*m_elements[10];
- ret.m_elements[9] = -m_elements[0]*m_elements[9]*m_elements[15] + m_elements[0]*m_elements[11]*m_elements[13] + m_elements[8]*m_elements[1]*m_elements[15]
- - m_elements[8]*m_elements[3]*m_elements[13] - m_elements[12]*m_elements[1]*m_elements[11] + m_elements[12]*m_elements[3]*m_elements[9];
- ret.m_elements[13] = m_elements[0]*m_elements[9]*m_elements[14] - m_elements[0]*m_elements[10]*m_elements[13] - m_elements[8]*m_elements[1]*m_elements[14]
- + m_elements[8]*m_elements[2]*m_elements[13] + m_elements[12]*m_elements[1]*m_elements[10] - m_elements[12]*m_elements[2]*m_elements[9];
- ret.m_elements[2] = m_elements[1]*m_elements[6]*m_elements[15] - m_elements[1]*m_elements[7]*m_elements[14] - m_elements[5]*m_elements[2]*m_elements[15]
- + m_elements[5]*m_elements[3]*m_elements[14] + m_elements[13]*m_elements[2]*m_elements[7] - m_elements[13]*m_elements[3]*m_elements[6];
- ret.m_elements[6] = -m_elements[0]*m_elements[6]*m_elements[15] + m_elements[0]*m_elements[7]*m_elements[14] + m_elements[4]*m_elements[2]*m_elements[15]
- - m_elements[4]*m_elements[3]*m_elements[14] - m_elements[12]*m_elements[2]*m_elements[7] + m_elements[12]*m_elements[3]*m_elements[6];
- ret.m_elements[10] = m_elements[0]*m_elements[5]*m_elements[15] - m_elements[0]*m_elements[7]*m_elements[13] - m_elements[4]*m_elements[1]*m_elements[15]
- + m_elements[4]*m_elements[3]*m_elements[13] + m_elements[12]*m_elements[1]*m_elements[7] - m_elements[12]*m_elements[3]*m_elements[5];
- ret.m_elements[14] = -m_elements[0]*m_elements[5]*m_elements[14] + m_elements[0]*m_elements[6]*m_elements[13] + m_elements[4]*m_elements[1]*m_elements[14]
- - m_elements[4]*m_elements[2]*m_elements[13] - m_elements[12]*m_elements[1]*m_elements[6] + m_elements[12]*m_elements[2]*m_elements[5];
- ret.m_elements[3] = -m_elements[1]*m_elements[6]*m_elements[11] + m_elements[1]*m_elements[7]*m_elements[10] + m_elements[5]*m_elements[2]*m_elements[11]
- - m_elements[5]*m_elements[3]*m_elements[10] - m_elements[9]*m_elements[2]*m_elements[7] + m_elements[9]*m_elements[3]*m_elements[6];
- ret.m_elements[7] = m_elements[0]*m_elements[6]*m_elements[11] - m_elements[0]*m_elements[7]*m_elements[10] - m_elements[4]*m_elements[2]*m_elements[11]
- + m_elements[4]*m_elements[3]*m_elements[10] + m_elements[8]*m_elements[2]*m_elements[7] - m_elements[8]*m_elements[3]*m_elements[6];
- ret.m_elements[11] = -m_elements[0]*m_elements[5]*m_elements[11] + m_elements[0]*m_elements[7]*m_elements[9] + m_elements[4]*m_elements[1]*m_elements[11]
- - m_elements[4]*m_elements[3]*m_elements[9] - m_elements[8]*m_elements[1]*m_elements[7] + m_elements[8]*m_elements[3]*m_elements[5];
- ret.m_elements[15] = m_elements[0]*m_elements[5]*m_elements[10] - m_elements[0]*m_elements[6]*m_elements[9] - m_elements[4]*m_elements[1]*m_elements[10]
- + m_elements[4]*m_elements[2]*m_elements[9] + m_elements[8]*m_elements[1]*m_elements[6] - m_elements[8]*m_elements[2]*m_elements[5];
- det = m_elements[0]*ret.m_elements[0] + m_elements[1]*ret.m_elements[4] + m_elements[2]*ret.m_elements[8] + m_elements[3]*ret.m_elements[12];
- if (det == 0)
- return;
- det = 1.0 / det;
- for (i = 0; i < 16; i++)
- m_elements[i] = float(ret.m_elements[i] * det);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement