code: public Quaternionf lookAlong(Vector3fc dir, Vector3fc up) {
          return lookAlong(dir.x(), dir.y(), dir.z(), up.x(), up.y(), up.z(), this);
      }
docs: Apply a rotation to this quaternion that maps the given direction to the positive Z axis.
  <p>
  Because there are multiple possibilities for such a rotation, this method will choose the one that ensures the given up direction to remain
  parallel to the plane spanned by the <code>up</code> and <code>dir</code> vectors.
  <p>
  If <code>Q</code> is <code>this</code> quaternion and <code>R</code> the quaternion representing the
  specified rotation, then the new quaternion will be <code>Q * R</code>. So when transforming a
  vector <code>v</code> with the new quaternion by using <code>Q * R * v</code>, the
  rotation added by this method will be applied first!
  <p>
  Reference: <a href="http://answers.unity3d.com/questions/467614/what-is-the-source-code-of-quaternionlookrotation.html">http://answers.unity3d.com</a>
  
  @see #lookAlong(float, float, float, float, float, float, Quaternionf)
  
  @param dir
  the direction to map to the positive Z axis
  @param up
  the vector which will be mapped to a vector parallel to the plane
  spanned by the given <code>dir</code> and <code>up</code>
  @return this