# libigl - A simple C++ geometry processing library ![](libigl-teaser.png) libigl is a simple C++ geometry processing library. We have a wide functionality including construction of sparse discrete differential geometry operators and finite-elements matrices such as the cotangent Laplacian and diagonalized mass matrix, simple facet and edge-based topology data structures, mesh-viewing utilities for OpenGL and GLSL, and many core functions for matrix manipulation which make [Eigen](http://eigen.tuxfamily.org) feel a lot more like MATLAB. It is first and foremost a header library. Each header file contains a single function. Most are tailored to operate on a generic triangle mesh stored in an n-by-3 matrix of vertex positions V and an m-by-3 matrix of triangle indices F. The library may also be [compiled](build/) into a statically linked library, for faster compile times with your projects. We use the [Eigen](http://eigen.tuxfamily.org) library heavily in our code. Our group prototypes a lot in MATLAB, and we have a useful [conversion table](matlab-to-eigen.html) from MATLAB to libigl/Eigen. ## Tutorial As of version 1.0, libigl includes an introductory [tutorial](tutorial/tutorial.html) that covers its basic functionalities. ## Installation Libigl is a *header* library. You do **not** need to build anything to install. Simply add `igl/` to your include path and include relevant headers. Here is a small "Hello, World" program: ```cpp #include #include #include #include int main() { Eigen::MatrixXd V(4,2); V<<0,0, 1,0, 1,1, 0,1; Eigen::MatrixXi F(2,3); F<<0,1,2, 0,2,3; Eigen::SparseMatrix L; igl::cotmatrix(V,F,L); std::cout<<"Hello, mesh: "< A; ``` to ```cpp Eigen::Matrix A; // or simply Eigen::Matrix A; ``` We hope to fix this, or at least identify which functions are safe (many of them probably work just fine). This requires setting up unit testing, which is a major _todo_ for our development. ## How to contribute If you are interested in joining development, please fork the repository and submit a [pull request](https://help.github.com/articles/using-pull-requests/) with your changes. ## License libigl is primarily [MPL2](http://www.mozilla.org/MPL/2.0/) licensed ([FAQ](http://www.mozilla.org/MPL/2.0/FAQ.html)). Some files contain third-party code under other licenses. We're currently in the processes of identifying these and marking appropriately. ## Attribution If you use libigl in your academic projects, please cite the papers we implement as appropriate. To cite the library in general, you could use this BibTeX entry: ```bibtex @misc{libigl, title = {{libigl}: A simple {C++} geometry processing library}, author = {Alec Jacobson and Daniele Panozzo and others}, note = {http://libigl.github.io/libigl/}, year = {2015}, } ``` ## Contact Libigl is a group endeavor led by [Alec Jacobson](http://www.cs.columbia.edu/~jacobson/) and [Daniele Panozzo](http://www.inf.ethz.ch/personal/dpanozzo/). Please [contact us](mailto:alecjacobson@gmail.com,daniele.panozzo@gmail.com) if you have questions or comments. We are happy to get feedback! If you're using libigl in your projects, quickly [drop us a note](mailto:alecjacobson@gmail.com,daniele.panozzo@gmail.com). Tell us who you are and what you're using it for. This helps us apply for funding and justify spending time maintaining this. If you find bugs or have problems please use our [github issue tracking page](https://github.com/libigl/libigl/issues). ## Copyright 2015 Alec Jacobson, Daniele Panozzo, Olga Diamanti, Christian Schüller, Kenshi Takayama, Leo Sacht, Wenzel Jacob, Nico Pietroni, Amir Vaxman ![](tutorial/images/libigl-logo.jpg)