public Vector3f getRotationColumn(int i, Vector3f store) {
        if (store == null)
            store = new Vector3f();

        float norm = norm();
        if (norm != 1.0f) {
            norm = (float)InvSqrt(norm);
        }
        
        float xx = x * x * norm;
        float xy = x * y * norm;
        float xz = x * z * norm;
        float xw = x * w * norm;
        float yy = y * y * norm;
        float yz = y * z * norm;
        float yw = y * w * norm;
        float zz = z * z * norm;
        float zw = z * w * norm;
        
        switch (i) {
            case 0:
                store.x  = 1 - 2 * ( yy + zz );
                store.y  =     2 * ( xy + zw );
                store.z  =     2 * ( xz - yw );
                break;
            case 1:
                store.x  =     2 * ( xy - zw );
                store.y  = 1 - 2 * ( xx + zz );
                store.z  =     2 * ( yz + xw );
                break;
            case 2:
                store.x  =     2 * ( xz + yw );
                store.y  =     2 * ( yz - xw );
                store.z  = 1 - 2 * ( xx + yy );
                break;
        }

        return store;
    }