code: public Matrix4d rotateTowards(Vector3dc direction, Vector3dc up, Matrix4d dest) {
          return rotateTowards(direction.x(), direction.y(), direction.z(), up.x(), up.y(), up.z(), dest);
      }
docs: Apply a model transformation to this matrix for a right-handed coordinate system,
  that aligns the local <code>+Z</code> axis with <code>direction</code>
  and store the result in <code>dest</code>.
  <p>
  If <code>M</code> is <code>this</code> matrix and <code>L</code> the lookat matrix,
  then the new matrix will be <code>M * L</code>. So when transforming a
  vector <code>v</code> with the new matrix by using <code>M * L * v</code>,
  the lookat transformation will be applied first!
  <p>
  In order to set the matrix to a rotation transformation without post-multiplying it,
  use {@link #rotationTowards(Vector3dc, Vector3dc) rotationTowards()}.
  <p>
  This method is equivalent to calling: <code>mulAffine(new Matrix4d().lookAt(new Vector3d(), new Vector3d(dir).negate(), up).invertAffine(), dest)</code>
  
  @see #rotateTowards(double, double, double, double, double, double, Matrix4d)
  @see #rotationTowards(Vector3dc, Vector3dc)
  
  @param direction
  the direction to rotate towards
  @param up
  the up vector
  @param dest
  will hold the result
  @return dest