public Matrix4X4 MultiplyMInv(Matrix4X4 other)
{
float a00 = Elements[0], a01 = Elements[1], a02 = Elements[2], a03 = Elements[3];
float a10 = Elements[4], a11 = Elements[5], a12 = Elements[6], a13 = Elements[7];
float a20 = Elements[8], a21 = Elements[9], a22 = Elements[10], a23 = Elements[11];
float a30 = Elements[12], a31 = Elements[13], a32 = Elements[14], a33 = Elements[15];
float b00 = other.Elements[0], b01 = other.Elements[1], b02 = other.Elements[2], b03 = other.Elements[3];
float b10 = other.Elements[4], b11 = other.Elements[5], b12 = other.Elements[6], b13 = other.Elements[7];
float b20 = other.Elements[8], b21 = other.Elements[9], b22 = other.Elements[10], b23 = other.Elements[11];
float b30 = other.Elements[12], b31 = other.Elements[13], b32 = other.Elements[14], b33 = other.Elements[15];
Elements[0] = a00 * b00 + a01 * b10 + a02 * b20 + a03 * b30;
Elements[1] = a00 * b01 + a01 * b11 + a02 * b21 + a03 * b31;
Elements[2] = a00 * b02 + a01 * b12 + a02 * b22 + a03 * b32;
Elements[3] = a00 * b03 + a01 * b13 + a02 * b23 + a03 * b33;
Elements[4] = a10 * b00 + a11 * b10 + a12 * b20 + a13 * b30;
Elements[5] = a10 * b01 + a11 * b11 + a12 * b21 + a13 * b31;
Elements[6] = a10 * b02 + a11 * b12 + a12 * b22 + a13 * b32;
Elements[7] = a10 * b03 + a11 * b13 + a12 * b23 + a13 * b33;
Elements[8] = a20 * b00 + a21 * b10 + a22 * b20 + a23 * b30;
Elements[9] = a20 * b01 + a21 * b11 + a22 * b21 + a23 * b31;
Elements[10] = a20 * b02 + a21 * b12 + a22 * b22 + a23 * b32;
Elements[11] = a20 * b03 + a21 * b13 + a22 * b23 + a23 * b33;
Elements[12] = a30 * b00 + a31 * b10 + a32 * b20 + a33 * b30;
Elements[13] = a30 * b01 + a31 * b11 + a32 * b21 + a33 * b31;
Elements[14] = a30 * b02 + a31 * b12 + a32 * b22 + a33 * b32;
Elements[15] = a30 * b03 + a31 * b13 + a32 * b23 + a33 * b33;
return this;
}