public Matrix3f invert(Matrix3f store) {
        if (store == null) {
            store = new Matrix3f();
        }

        float det = determinant();
        if (FastMath.abs(det) <= FastMath.FLT_EPSILON) {
            return store.zero();
        }

        store.m00 = m11 * m22 - m12 * m21;
        store.m01 = m02 * m21 - m01 * m22;
        store.m02 = m01 * m12 - m02 * m11;
        store.m10 = m12 * m20 - m10 * m22;
        store.m11 = m00 * m22 - m02 * m20;
        store.m12 = m02 * m10 - m00 * m12;
        store.m20 = m10 * m21 - m11 * m20;
        store.m21 = m01 * m20 - m00 * m21;
        store.m22 = m00 * m11 - m01 * m10;

        store.multLocal(1f / det);
        return store;
    }
Returns the multiplicative inverse in the specified storage. If the
current instance is singular, an all-zero matrix is returned. In either
case, the current instance is unaffected.

<p>If {@code this} and {@code store} are the same object, the result is
undefined. Use {@link #invertLocal()} instead.

@param store storage for the result, or null for a new Matrix3f
@return either {@code store} or a new Matrix3f
jme3-core/src/main/java/com/jme3/math/Matrix3f.java