123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8"/>
- <title>libigl</title>
- <meta name="author" content="Alec Jacobson and Daniele Panozzo and others"/>
- <link type="text/css" rel="stylesheet" href="tutorial/style.css"/>
- <script type='text/javascript' src='http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML'></script>
- <link rel='stylesheet' href='http://yandex.st/highlightjs/7.3/styles/default.min.css'>
- <script src='http://yandex.st/highlightjs/7.3/highlight.min.js'></script>
- <script>hljs.initHighlightingOnLoad();</script>
- </head>
- <body>
- <h1 id="libigl-asimplecgeometryprocessinglibrary">libigl - A simple C++ geometry processing library</h1>
- <p><a href="https://travis-ci.org/libigl/libigl"><img src="https://travis-ci.org/libigl/libigl.svg?branch=master" alt="Build Status" /></a>
- <a href="https://ci.appveyor.com/project/danielepanozzo/libigl-6hjk1"><img src="https://ci.appveyor.com/api/projects/status/mf3t9rnhco0vhly8?svg=true" alt="Build status" /></a>
- <img src="libigl-teaser.png" alt="" /></p>
- <p><a href="https://github.com/libigl/libigl/">https://github.com/libigl/libigl/</a></p>
- <blockquote>
- <p>Get started with:</p>
- <pre><code class="bash">git clone --recursive https://github.com/libigl/libigl.git
- </code></pre>
- </blockquote>
- <p>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 <a href="http://eigen.tuxfamily.org">Eigen</a> feel a lot more
- like MATLAB.</p>
- <p>It is <strong>a header-only library</strong>. You do not need to compile anything to use,
- just include igl headers (e.g. <code>#include <igl/cotmatrix.h></code>) and run. Each
- header file contains a single function (e.g. <code>igl/cotmatrix.h</code> contains
- <code>igl::cotmatrix()</code>). 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.</p>
- <p><em>Optionally</em> the library may also be <a href="optional/">pre-compiled</a> into a statically
- linked library, for faster compile times with your projects. This only effects
- compile time (run-time performance and behavior is identical). If in doubt, use
- the header-only default mode: (i.e. just include the headers you want to use).</p>
- <p>We use the <a href="http://eigen.tuxfamily.org">Eigen</a> library heavily in our code. Our
- group prototypes a lot in MATLAB, and we have a useful <a href="matlab-to-eigen.html">MATLAB to libigl+Eigen
- conversion table</a>.</p>
- <p>We regularly test compiling our library on Mac OS X with clang, Linux with gcc
- and Windows with Visual Studio 2015 Community Edition.</p>
- <h2 id="tutorial">Tutorial</h2>
- <p>As of version 1.0, libigl includes an introductory
- <a href="http://libigl.github.io/libigl/tutorial/tutorial.html">tutorial</a> that covers many functionalities.</p>
- <h2 id="installation">Installation</h2>
- <p>Libigl is a <strong>header-only</strong> library. You do <strong>not</strong> need to build anything to
- install. Simply add <code>libigl/include</code> to your include path and include relevant
- headers. Here is a small “Hello, World” program:</p>
- <pre><code class="cpp">#include <igl/cotmatrix.h>
- #include <Eigen/Dense>
- #include <Eigen/Sparse>
- #include <iostream>
- 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<double> L;
- igl::cotmatrix(V,F,L);
- std::cout<<"Hello, mesh: "<<std::endl<<L*V<<std::endl;
- return 0;
- }
- </code></pre>
- <p>If you save this in <code>hello.cpp</code>, then you could compile this with (assuming
- Eigen is installed in <code>/usr/local/include/eigen3</code>):</p>
- <pre><code class="bash">g++ -std=c++11 -I/usr/local/include/eigen3 -I./libigl/include/ hello.cpp -o hello
- </code></pre>
- <p>Running <code>./hello</code> would then produce</p>
- <pre><code>Hello, mesh:
- 0.5 0.5
- -0.5 0.5
- -0.5 -0.5
- 0.5 -0.5
- </code></pre>
- <h2 id="dependencies">Dependencies</h2>
- <p>Dependencies are on a per-include basis and the majority of the functions in
- libigl depends only on the <a href="http://eigen.tuxfamily.org">Eigen</a> library.</p>
- <p>For more information see our <a href="tutorial/tutorial.html">tutorial</a>.</p>
- <h3 id="optionaldependencies">Optional dependencies</h3>
- <p>Libigl compartmentalizes its <strong>optional</strong> dependences via its directory
- organization in the <code>include/</code> folder. All header files located <em>directly</em> in
- the <code>include/igl/</code> folder have only stl and Eigen as dependencies. For example,
- all of the headers that depend on CGAL are located in <code>include/igl/cgal</code>. For a
- full list of <em>optional</em> dependencies check <code>optional/CMakeLists.txt</code>.</p>
- <h3 id="gccandtheoptionalcgaldependency">GCC and the optional CGAL dependency</h3>
- <p>The <code>include/igl/cgal/*.h</code> headers depend on CGAL. It has come to our attention
- that CGAL does not work properly with GCC 4.8. To the best of our knowledge,
- GCC 4.7 and clang will work correctly.</p>
- <h3 id="openmpandwindows">OpenMP and Windows</h3>
- <p>Some of our functions will take advantage of OpenMP if available. However, it
- has come to our attention that Visual Studio + Eigen + OpenMP does not work
- properly. Since we use OpenMP only to improve performance, we recommend
- avoiding OpenMP on Windows or proceeding with caution.</p>
- <h2 id="download">Download</h2>
- <p>You can keep up to date by cloning a read-only copy of our GitHub
- <a href="https://github.com/libigl">repository</a>.</p>
- <h2 id="knownissues">Known Issues</h2>
- <p>We rely heavily on Eigen. Nearly all inputs and outputs are Eigen matrices of
- some kind. However, we currently <em>only</em> officially support Eigen’s default
- column-major ordering. That means, we <strong>do not</strong> expect our code to work for
- matrices using the <code>Eigen::RowMajor</code> flag. If you can, change definitions like:</p>
- <pre><code class="cpp">Eigen::Matrix<double, Eigen::Dynamic, 3, Eigen::RowMajor> A;
- </code></pre>
- <p>to</p>
- <pre><code class="cpp">Eigen::Matrix<double, Eigen::Dynamic, 3, Eigen::ColMajor> A;
- // or simply
- Eigen::Matrix<double, Eigen::Dynamic, 3> A;
- </code></pre>
- <p>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 <em>todo</em> for our development.</p>
- <h2 id="gitsubmodules">Git Submodules</h2>
- <p>Libigl uses git submodules for its <em>optional</em> dependencies,
- in particular, those needed by the OpenGL viewer to run the examples in the
- <a href="tutorial/tutorial.html">tutorial</a>. Git submodules allow use to treat clones of
- other libraries as sub-directories within ours while separating our commits.
- Read the <a href="http://git-scm.com/docs/git-submodule">documentation</a> for a detailed
- explanation, but essentially our libigl repo stores a hash for each of its
- subrepos containing which version to update to. When a change is introduced in
- a dependencies repo we can incorporate that change by pulling in our sub-repo
- and updating (i.e. committing) that change to the hash.</p>
- <p>When pulling new changes to libigl it’s also a good idea to update changes to
- subrepos:</p>
- <pre><code class="bash">git pull
- git submodule update --recursive
- </code></pre>
- <h2 id="unittesting">Unit testing</h2>
- <p>Libigl maintains <a href="https://github.com/libigl/libigl-unit-tests">separate
- repository</a> for unit testing.</p>
- <h2 id="howtocontribute">How to contribute</h2>
- <p>If you are interested in joining development, please fork the repository and
- submit a <a href="https://help.github.com/articles/using-pull-requests/">pull request</a>
- with your changes.</p>
- <h2 id="license">License</h2>
- <p>libigl is primarily <a href="http://www.mozilla.org/MPL/2.0/">MPL2</a> licensed
- (<a href="http://www.mozilla.org/MPL/2.0/FAQ.html">FAQ</a>). Some files contain
- third-party code under other licenses. We’re currently in the processes of
- identifying these and marking appropriately.</p>
- <h2 id="attribution">Attribution</h2>
- <p>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:</p>
- <pre><code class="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 = {2016},
- }
- </code></pre>
- <h2 id="projectsuniversitiesusinglibigl">Projects/Universities using libigl</h2>
- <p>Libigl is used by many research groups around the world. In 2015, it won the
- Eurographics/ACM Symposium on Geometry Processing software award. Here are a
- few labs/companies/institutions using libigl:</p>
- <ul>
- <li><a href="http://www.adobe.com/technology/">Adobe Research</a></li>
- <li><a href="http://www.ea.com">Electronic Arts, Inc</a></li>
- <li><a href="http://meshconsultants.ca/">Mesh</a>, consultants, Canada</li>
- <li><a href="http://graphics.pixar.com/research/">Pixar Research</a></li>
- <li><a href="http://esotericsoftware.com/">Spine by Esoteric Software</a> is an animation tool dedicated to 2D characters.</li>
- <li>Columbia University, <a href="http://www.cs.columbia.edu/cg/">Columbia Computer Graphics Group</a>, USA</li>
- <li><a href="http://www.graphics.cornell.edu/">Cornell University</a>, USA</li>
- <li><a href="http://dcgi.felk.cvut.cz/">Czech Technical University in Prague</a>, Czech</li>
- <li>EPF Lausanne, <a href="http://lgg.epfl.ch/people.php">Computer Graphics and Geometry Laboratory</a>, Switzerland</li>
- <li>ETH Zurich, <a href="http://igl.ethz.ch/">Interactive Geometry Lab</a> and <a href="http://ait.inf.ethz.ch/">Advanced Technologies Lab</a>, Swizterland</li>
- <li>George Mason University, <a href="http://cs.gmu.edu/~ygingold/">CraGL</a>, USA</li>
- <li><a href="http://www.ust.hk/">Hong Kong University of Science and Technology</a>, Hong Kong</li>
- <li><a href="http://www.nii.ac.jp/en/">National Institute of Informatics</a>, Japan</li>
- <li>New York University, <a href="http://mrl.nyu.edu/">Media Research Lab</a>, USA</li>
- <li>NYUPoly, <a href="http://game.engineering.nyu.edu/">Game Innovation Lab</a>, USA</li>
- <li><a href="https://www.cg.tu-berlin.de">TU Berlin</a>, Germany</li>
- <li><a href="http://www.tudelft.nl/en/">TU Delft</a>, Netherlands</li>
- <li><a href="https://www.tuwien.ac.at/en/tuwien_home/">TU Wien</a>, Austria</li>
- <li><a href="http://www.telecom-paristech.fr/en/formation-et-innovation-dans-le-numerique.html">Telecom ParisTech</a>, Paris, France</li>
- <li><a href="http://mtm.ufsc.br/~leo/">Universidade Federal de Santa Catarina</a>, Brazil</li>
- <li><a href="http://vecg.cs.ucl.ac.uk/">University College London</a>, England</li>
- <li><a href="http://vis.berkeley.edu/">University of California Berkeley</a>, USA</li>
- <li><a href="http://www.cam.ac.uk/">University of Cambridge</a>, England</li>
- <li><a href="http://cg.cis.upenn.edu/">University of Pennsylvania</a>, USA</li>
- <li><a href="http://www.cs.utexas.edu/users/evouga/">University of Texas at Austin</a>, USA</li>
- <li><a href="https://www.csc.uvic.ca/Research/graphics/">University of Victoria</a>, Canada</li>
- <li><a href="http://www.usi.ch/en">Università della Svizzera Italiana</a>, Switzerland</li>
- <li><a href="http://www.univ-tlse3.fr/">Université Toulouse III Paul Sabatier</a>, France</li>
- <li><a href="http://www.math.zju.edu.cn/cagd/">Zhejiang University</a>, China</li>
- </ul>
- <h2 id="contact">Contact</h2>
- <p>Libigl is a group endeavor led by <a href="http://www.cs.columbia.edu/~jacobson/">Alec
- Jacobson</a> and <a href="http://www.inf.ethz.ch/personal/dpanozzo/">Daniele
- Panozzo</a>. Please <a href="mailto:alecjacobson@gmail.com,daniele.panozzo@gmail.com">contact
- us</a> if you have
- questions or comments. For troubleshooting, please post an
- <a href="https://github.com/libigl/libigl/issues">issue</a> on github.</p>
- <p>If you’re using libigl in your projects, quickly <a href="mailto:alecjacobson@gmail.com,daniele.panozzo@gmail.com">drop us a
- note</a>. Tell us who you
- are and what you’re using it for. This helps us apply for funding and justify
- spending time maintaining this.</p>
- <p>If you find bugs or have problems please use our <a href="https://github.com/libigl/libigl/issues">github issue tracking
- page</a>.</p>
- <h2 id="copyright">Copyright</h2>
- <p>2016 Alec Jacobson, Daniele Panozzo, Christian Schüller, Olga Diamanti, Qingnan
- Zhou, Sebastian Koch, Nico Pietroni, Stefan Brugger, Kenshi Takayama, Wenzel Jakob, Nikolas De
- Giorgis, Luigi Rocca, Leonardo Sacht, Kevin Walliman, Olga Sorkine-Hornung, and others.</p>
- <p>Please see individual files for appropriate copyright notices.</p>
- </body>
- </html>
|