A library for Directional Field Synthesis, Design, and Processing.
Switch branches/tags
Nothing to show
Clone or download



libdirectional is a C++ library for creating, manipulating and drawing directional fields on 3D meshes, build on libigl1 and, in turn, Eigen. The libdirectional represents directional objects, that is sets of vectors, per face of the mesh. The content and the notations are based on the Eurographics 2016 star, and consequently SIGGRAPH Asia 2016/SIGGRAPH 2017 course on Directional Field Synthesis, Design, and Processing2. Some visualization code is borrowed from the libhedra library3.


libdirectional is a header-only library where each file generally includes one function. To use the library, simply add the include directory to your include path and make sure libigl and its prerequisites are set up properly. After that you can include any files you need normally, using for example #include <directional/trivial_connection.h>.

To use the examples simply clone the repository using:

git clone --recursive https://github.com/avaxman/libdirectional.git


An alpha version of a tutorial that walks through the entire functionality of libdirectional is available here.

Future Plans

The following functionality is still needed for libdirectional:

Face-based polar representation, and consequent mixed-integer algorithms. Support for 3D octahedral fields. Other discretizations: vertex-based, DEC. Discrete vector calculus: operators and Hodge decomposition. Poisson equations and parameterization.

If you would like to suggest further topics, would like to collaborate in implementation, complain about bugs or ask questions, please address [Amir Vaxman] (avaxman@gmail.com) (or open an issue in the repository)

Acknowledge libdirectional

If you use libhedra in your academic projects, please cite the implemented papers directly, and/or the EG STAR 2016 when appropriate. To cite the library in general, you could use this BibTeX entry:

  title = {{libdirectional}: directional field synthesis, design, and processing,
  author = {Amir Vaxman and others},
  note = {https://github.com/avaxman/libdirectional},
  year = {2017},


2017 Amir Vaxman, Sam de Redelijkheid, Daniele Panozzo, Olga Diamanti, Olga Sorkine-Hornung, and others.


1: A. Jacobson and D. Panozzo and others, libigl: A simple C++ geometry processing library, 2016.
2: A. Vaxman et al., Directional Field Synthesis, Design, and Processing, 2016.
3: A. Vaxman et al., libhedra, 2016.
4: K. Crane and M. Desbrun and P. Schröder, Trivial Connections on Discrete Surfaces, 2010.
5: O. Diamanti et al., Designing N-PolyVector Fields with Complex Polynomials, 2014.
6: F. Knöppel et al., Globally optimal direction fields, 2013.