code: public Matrix4d pick(double x, double y, double width, double height, int[] viewport, Matrix4d dest) {
          double sx = viewport[2] / width;
          double sy = viewport[3] / height;
          double tx = (viewport[2] + 2.0 * (viewport[0] - x)) / width;
          double ty = (viewport[3] + 2.0 * (viewport[1] - y)) / height;
          dest.m30 = m00 * tx + m10 * ty + m30;
          dest.m31 = m01 * tx + m11 * ty + m31;
          dest.m32 = m02 * tx + m12 * ty + m32;
          dest.m33 = m03 * tx + m13 * ty + m33;
          dest.m00 = m00 * sx;
          dest.m01 = m01 * sx;
          dest.m02 = m02 * sx;
          dest.m03 = m03 * sx;
          dest.m10 = m10 * sy;
          dest.m11 = m11 * sy;
          dest.m12 = m12 * sy;
          dest.m13 = m13 * sy;
          dest.properties = 0;
          return dest;
      }
docs: /* (non-Javadoc)
  @see org.joml.Matrix4dc#pick(double, double, double, double, int[], org.joml.Matrix4d)