# libigl - A simple C++ geometry processing library

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 contangent 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/README.html) 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](http://libigl.github.io/libigl/tutorial/matlab-to-eigen.html) from MATLAB to libigl/Eigen.
# Tutorial
As of version 1.0, libigl includes an introductory
[tutorial](http://libigl.github.io/libigl/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: "<