public Matrix4f invert(Matrix4f store) { if (store == null) store = new Matrix4f();  float fA0 = m00*m11 - m01*m10; float fA1 = m00*m12 - m02*m10; float fA2 = m00*m13 - m03*m10; float fA3 = m01*m12 - m02*m11; float fA4 = m01*m13 - m03*m11; float fA5 = m02*m13 - m03*m12; float fB0 = m20*m31 - m21*m30; float fB1 = m20*m32 - m22*m30; float fB2 = m20*m33 - m23*m30; float fB3 = m21*m32 - m22*m31; float fB4 = m21*m33 - m23*m31; float fB5 = m22*m33 - m23*m32; float fDet = fA0*fB5-fA1*fB4+fA2*fB3+fA3*fB2-fA4*fB1+fA5*fB0;  if ( FastMath.abs(fDet) <= FastMath.FLT_EPSILON ) return store.zero();  store.m00 = + m11*fB5 - m12*fB4 + m13*fB3; store.m10 = - m10*fB5 + m12*fB2 - m13*fB1; store.m20 = + m10*fB4 - m11*fB2 + m13*fB0; store.m30 = - m10*fB3 + m11*fB1 - m12*fB0; store.m01 = - m01*fB5 + m02*fB4 - m03*fB3; store.m11 = + m00*fB5 - m02*fB2 + m03*fB1; store.m21 = - m00*fB4 + m01*fB2 - m03*fB0; store.m31 = + m00*fB3 - m01*fB1 + m02*fB0; store.m02 = + m31*fA5 - m32*fA4 + m33*fA3; store.m12 = - m30*fA5 + m32*fA2 - m33*fA1; store.m22 = + m30*fA4 - m31*fA2 + m33*fA0; store.m32 = - m30*fA3 + m31*fA1 - m32*fA0; store.m03 = - m21*fA5 + m22*fA4 - m23*fA3; store.m13 = + m20*fA5 - m22*fA2 + m23*fA1; store.m23 = - m20*fA4 + m21*fA2 - m23*fA0; store.m33 = + m20*fA3 - m21*fA1 + m22*fA0;  float fInvDet = 1.0f/fDet; store.multLocal(fInvDet);  return store;
public Matrix4f invert() { return invert(null);
    public Matrix4f invert(Matrix4f store) {        if (store == null) store = new Matrix4f();        float fA0 = m00*m11 - m01*m10;        float fA1 = m00*m12 - m02*m10;        float fA2 = m00*m13 - m03*m10;        float fA3 = m01*m12 - m02*m11;        float fA4 = m01*m13 - m03*m11;        float fA5 = m02*m13 - m03*m12;        float fB0 = m20*m31 - m21*m30;        float fB1 = m20*m32 - m22*m30;        float fB2 = m20*m33 - m23*m30;        float fB3 = m21*m32 - m22*m31;        float fB4 = m21*m33 - m23*m31;        float fB5 = m22*m33 - m23*m32;        float fDet = fA0*fB5-fA1*fB4+fA2*fB3+fA3*fB2-fA4*fB1+fA5*fB0;        if ( FastMath.abs(fDet) <= FastMath.FLT_EPSILON )            return store.zero();        store.m00 = + m11*fB5 - m12*fB4 + m13*fB3;        store.m10 = - m10*fB5 + m12*fB2 - m13*fB1;        store.m20 = + m10*fB4 - m11*fB2 + m13*fB0;        store.m30 = - m10*fB3 + m11*fB1 - m12*fB0;        store.m01 = - m01*fB5 + m02*fB4 - m03*fB3;        store.m11 = + m00*fB5 - m02*fB2 + m03*fB1;        store.m21 = - m00*fB4 + m01*fB2 - m03*fB0;        store.m31 = + m00*fB3 - m01*fB1 + m02*fB0;        store.m02 = + m31*fA5 - m32*fA4 + m33*fA3;        store.m12 = - m30*fA5 + m32*fA2 - m33*fA1;        store.m22 = + m30*fA4 - m31*fA2 + m33*fA0;        store.m32 = - m30*fA3 + m31*fA1 - m32*fA0;        store.m03 = - m21*fA5 + m22*fA4 - m23*fA3;        store.m13 = + m20*fA5 - m22*fA2 + m23*fA1;        store.m23 = - m20*fA4 + m21*fA2 - m23*fA0;        store.m33 = + m20*fA3 - m21*fA1 + m22*fA0;        float fInvDet = 1.0f/fDet;        store.multLocal(fInvDet);        return store;    }