index.html 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8"/>
  5. <title>libigl</title>
  6. <meta name="author" content="Alec Jacobson and Daniele Panozzo and others"/>
  7. <link type="text/css" rel="stylesheet" href="tutorial/style.css"/>
  8. <script type='text/javascript' src='http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML'></script>
  9. <link rel='stylesheet' href='http://yandex.st/highlightjs/7.3/styles/default.min.css'>
  10. <script src='http://yandex.st/highlightjs/7.3/highlight.min.js'></script>
  11. <script>hljs.initHighlightingOnLoad();</script>
  12. </head>
  13. <body>
  14. <h1 id="libigl-asimplecgeometryprocessinglibrary">libigl - A simple C++ geometry processing library</h1>
  15. <p><a href="https://travis-ci.org/libigl/libigl"><img src="https://travis-ci.org/libigl/libigl.svg?branch=master" alt="Build Status" /></a>
  16. <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>
  17. <img src="libigl-teaser.png" alt="" /></p>
  18. <p><a href="https://github.com/libigl/libigl/">https://github.com/libigl/libigl/</a></p>
  19. <blockquote>
  20. <p>Get started with:</p>
  21. <pre><code class="bash">git clone --recursive https://github.com/libigl/libigl.git
  22. </code></pre>
  23. </blockquote>
  24. <p>libigl is a simple C++ geometry processing library. We have a wide
  25. functionality including construction of sparse discrete differential geometry
  26. operators and finite-elements matrices such as the cotangent Laplacian and
  27. diagonalized mass matrix, simple facet and edge-based topology data structures,
  28. mesh-viewing utilities for OpenGL and GLSL, and many core functions for matrix
  29. manipulation which make <a href="http://eigen.tuxfamily.org">Eigen</a> feel a lot more
  30. like MATLAB.</p>
  31. <p>It is <strong>a header-only library</strong>. You do not need to compile anything to use,
  32. just include igl headers (e.g. <code>#include &lt;igl/cotmatrix.h&gt;</code>) and run. Each
  33. header file contains a single function (e.g. <code>igl/cotmatrix.h</code> contains
  34. <code>igl::cotmatrix()</code>). Most are tailored to operate on a generic triangle mesh
  35. stored in an n-by&#8211;3 matrix of vertex positions V and an m-by&#8211;3 matrix of
  36. triangle indices F.</p>
  37. <p><em>Optionally</em> the library may also be <a href="optional/">pre-compiled</a> into a statically
  38. linked library, for faster compile times with your projects. This only effects
  39. compile time (run-time performance and behavior is identical). If in doubt, use
  40. the header-only default mode: (i.e. just include the headers you want to use).</p>
  41. <p>We use the <a href="http://eigen.tuxfamily.org">Eigen</a> library heavily in our code. Our
  42. group prototypes a lot in MATLAB, and we have a useful <a href="matlab-to-eigen.html">MATLAB to libigl+Eigen
  43. conversion table</a>.</p>
  44. <p>We regularly test compiling our library on Mac OS X with clang, Linux with gcc
  45. and Windows with Visual Studio 2015 Community Edition.</p>
  46. <h2 id="tutorial">Tutorial</h2>
  47. <p>As of version 1.0, libigl includes an introductory
  48. <a href="http://libigl.github.io/libigl/tutorial/tutorial.html">tutorial</a> that covers many functionalities.</p>
  49. <h2 id="installation">Installation</h2>
  50. <p>Libigl is a <strong>header-only</strong> library. You do <strong>not</strong> need to build anything to
  51. install. Simply add <code>libigl/include</code> to your include path and include relevant
  52. headers. Here is a small &#8220;Hello, World&#8221; program:</p>
  53. <pre><code class="cpp">#include &lt;igl/cotmatrix.h&gt;
  54. #include &lt;Eigen/Dense&gt;
  55. #include &lt;Eigen/Sparse&gt;
  56. #include &lt;iostream&gt;
  57. int main()
  58. {
  59. Eigen::MatrixXd V(4,2);
  60. V&lt;&lt;0,0,
  61. 1,0,
  62. 1,1,
  63. 0,1;
  64. Eigen::MatrixXi F(2,3);
  65. F&lt;&lt;0,1,2,
  66. 0,2,3;
  67. Eigen::SparseMatrix&lt;double&gt; L;
  68. igl::cotmatrix(V,F,L);
  69. std::cout&lt;&lt;&quot;Hello, mesh: &quot;&lt;&lt;std::endl&lt;&lt;L*V&lt;&lt;std::endl;
  70. return 0;
  71. }
  72. </code></pre>
  73. <p>If you save this in <code>hello.cpp</code>, then you could compile this with (assuming
  74. Eigen is installed in <code>/usr/local/include/eigen3</code>):</p>
  75. <pre><code class="bash">g++ -std=c++11 -I/usr/local/include/eigen3 -I./libigl/include/ hello.cpp -o hello
  76. </code></pre>
  77. <p>Running <code>./hello</code> would then produce</p>
  78. <pre><code>Hello, mesh:
  79. 0.5 0.5
  80. -0.5 0.5
  81. -0.5 -0.5
  82. 0.5 -0.5
  83. </code></pre>
  84. <h2 id="dependencies">Dependencies</h2>
  85. <p>Dependencies are on a per-include basis and the majority of the functions in
  86. libigl depends only on the <a href="http://eigen.tuxfamily.org">Eigen</a> library.</p>
  87. <p>For more information see our <a href="tutorial/tutorial.html">tutorial</a>.</p>
  88. <h3 id="optionaldependencies">Optional dependencies</h3>
  89. <p>Libigl compartmentalizes its <strong>optional</strong> dependences via its directory
  90. organization in the <code>include/</code> folder. All header files located <em>directly</em> in
  91. the <code>include/igl/</code> folder have only stl and Eigen as dependencies. For example,
  92. all of the headers that depend on CGAL are located in <code>include/igl/cgal</code>. For a
  93. full list of <em>optional</em> dependencies check <code>optional/CMakeLists.txt</code>.</p>
  94. <h3 id="gccandtheoptionalcgaldependency">GCC and the optional CGAL dependency</h3>
  95. <p>The <code>include/igl/cgal/*.h</code> headers depend on CGAL. It has come to our attention
  96. that CGAL does not work properly with GCC 4.8. To the best of our knowledge,
  97. GCC 4.7 and clang will work correctly.</p>
  98. <h3 id="openmpandwindows">OpenMP and Windows</h3>
  99. <p>Some of our functions will take advantage of OpenMP if available. However, it
  100. has come to our attention that Visual Studio + Eigen + OpenMP does not work
  101. properly. Since we use OpenMP only to improve performance, we recommend
  102. avoiding OpenMP on Windows or proceeding with caution.</p>
  103. <h2 id="download">Download</h2>
  104. <p>You can keep up to date by cloning a read-only copy of our GitHub
  105. <a href="https://github.com/libigl">repository</a>.</p>
  106. <h2 id="knownissues">Known Issues</h2>
  107. <p>We rely heavily on Eigen. Nearly all inputs and outputs are Eigen matrices of
  108. some kind. However, we currently <em>only</em> officially support Eigen&#8217;s default
  109. column-major ordering. That means, we <strong>do not</strong> expect our code to work for
  110. matrices using the <code>Eigen::RowMajor</code> flag. If you can, change definitions like:</p>
  111. <pre><code class="cpp">Eigen::Matrix&lt;double, Eigen::Dynamic, 3, Eigen::RowMajor&gt; A;
  112. </code></pre>
  113. <p>to</p>
  114. <pre><code class="cpp">Eigen::Matrix&lt;double, Eigen::Dynamic, 3, Eigen::ColMajor&gt; A;
  115. // or simply
  116. Eigen::Matrix&lt;double, Eigen::Dynamic, 3&gt; A;
  117. </code></pre>
  118. <p>We hope to fix this, or at least identify which functions are safe (many of
  119. them probably work just fine). This requires setting up unit testing, which is
  120. a major <em>todo</em> for our development.</p>
  121. <h2 id="gitsubmodules">Git Submodules</h2>
  122. <p>Libigl uses git submodules for its <em>optional</em> dependencies,
  123. in particular, those needed by the OpenGL viewer to run the examples in the
  124. <a href="tutorial/tutorial.html">tutorial</a>. Git submodules allow use to treat clones of
  125. other libraries as sub-directories within ours while separating our commits.
  126. Read the <a href="http://git-scm.com/docs/git-submodule">documentation</a> for a detailed
  127. explanation, but essentially our libigl repo stores a hash for each of its
  128. subrepos containing which version to update to. When a change is introduced in
  129. a dependencies repo we can incorporate that change by pulling in our sub-repo
  130. and updating (i.e. committing) that change to the hash.</p>
  131. <p>When pulling new changes to libigl it&#8217;s also a good idea to update changes to
  132. subrepos:</p>
  133. <pre><code class="bash">git pull
  134. git submodule update --recursive
  135. </code></pre>
  136. <h2 id="unittesting">Unit testing</h2>
  137. <p>Libigl maintains <a href="https://github.com/libigl/libigl-unit-tests">separate
  138. repository</a> for unit testing.</p>
  139. <h2 id="howtocontribute">How to contribute</h2>
  140. <p>If you are interested in joining development, please fork the repository and
  141. submit a <a href="https://help.github.com/articles/using-pull-requests/">pull request</a>
  142. with your changes.</p>
  143. <h2 id="license">License</h2>
  144. <p>libigl is primarily <a href="http://www.mozilla.org/MPL/2.0/">MPL2</a> licensed
  145. (<a href="http://www.mozilla.org/MPL/2.0/FAQ.html">FAQ</a>). Some files contain
  146. third-party code under other licenses. We&#8217;re currently in the processes of
  147. identifying these and marking appropriately.</p>
  148. <h2 id="attribution">Attribution</h2>
  149. <p>If you use libigl in your academic projects, please cite the papers we
  150. implement as appropriate. To cite the library in general, you could use this
  151. BibTeX entry:</p>
  152. <pre><code class="bibtex">@misc{libigl,
  153. title = {{libigl}: A simple {C++} geometry processing library},
  154. author = {Alec Jacobson and Daniele Panozzo and others},
  155. note = {http://libigl.github.io/libigl/},
  156. year = {2016},
  157. }
  158. </code></pre>
  159. <h2 id="projectsuniversitiesusinglibigl">Projects/Universities using libigl</h2>
  160. <p>Libigl is used by many research groups around the world. In 2015, it won the
  161. Eurographics/ACM Symposium on Geometry Processing software award. Here are a
  162. few labs/companies/institutions using libigl:</p>
  163. <ul>
  164. <li><a href="http://www.adobe.com/technology/">Adobe Research</a></li>
  165. <li><a href="http://www.ea.com">Electronic Arts, Inc</a></li>
  166. <li><a href="http://meshconsultants.ca/">Mesh</a>, consultants, Canada</li>
  167. <li><a href="http://graphics.pixar.com/research/">Pixar Research</a></li>
  168. <li><a href="http://esotericsoftware.com/">Spine by Esoteric Software</a> is an animation tool dedicated to 2D characters.</li>
  169. <li>Columbia University, <a href="http://www.cs.columbia.edu/cg/">Columbia Computer Graphics Group</a>, USA</li>
  170. <li><a href="http://www.graphics.cornell.edu/">Cornell University</a>, USA</li>
  171. <li><a href="http://dcgi.felk.cvut.cz/">Czech Technical University in Prague</a>, Czech</li>
  172. <li>EPF Lausanne, <a href="http://lgg.epfl.ch/people.php">Computer Graphics and Geometry Laboratory</a>, Switzerland</li>
  173. <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>
  174. <li>George Mason University, <a href="http://cs.gmu.edu/~ygingold/">CraGL</a>, USA</li>
  175. <li><a href="http://www.ust.hk/">Hong Kong University of Science and Technology</a>, Hong Kong</li>
  176. <li><a href="http://www.nii.ac.jp/en/">National Institute of Informatics</a>, Japan</li>
  177. <li>New York University, <a href="http://mrl.nyu.edu/">Media Research Lab</a>, USA</li>
  178. <li>NYUPoly, <a href="http://game.engineering.nyu.edu/">Game Innovation Lab</a>, USA</li>
  179. <li><a href="https://www.cg.tu-berlin.de">TU Berlin</a>, Germany</li>
  180. <li><a href="http://www.tudelft.nl/en/">TU Delft</a>, Netherlands</li>
  181. <li><a href="https://www.tuwien.ac.at/en/tuwien_home/">TU Wien</a>, Austria</li>
  182. <li><a href="http://www.telecom-paristech.fr/en/formation-et-innovation-dans-le-numerique.html">Telecom ParisTech</a>, Paris, France</li>
  183. <li><a href="http://mtm.ufsc.br/~leo/">Universidade Federal de Santa Catarina</a>, Brazil</li>
  184. <li><a href="http://vecg.cs.ucl.ac.uk/">University College London</a>, England</li>
  185. <li><a href="http://vis.berkeley.edu/">University of California Berkeley</a>, USA</li>
  186. <li><a href="http://www.cam.ac.uk/">University of Cambridge</a>, England</li>
  187. <li><a href="http://cg.cis.upenn.edu/">University of Pennsylvania</a>, USA</li>
  188. <li><a href="http://www.cs.utexas.edu/users/evouga/">University of Texas at Austin</a>, USA</li>
  189. <li><a href="https://www.csc.uvic.ca/Research/graphics/">University of Victoria</a>, Canada</li>
  190. <li><a href="http://www.usi.ch/en">Università della Svizzera Italiana</a>, Switzerland</li>
  191. <li><a href="http://www.univ-tlse3.fr/">Université Toulouse III Paul Sabatier</a>, France</li>
  192. <li><a href="http://www.math.zju.edu.cn/cagd/">Zhejiang University</a>, China</li>
  193. </ul>
  194. <h2 id="contact">Contact</h2>
  195. <p>Libigl is a group endeavor led by <a href="http://www.cs.columbia.edu/~jacobson/">Alec
  196. Jacobson</a> and <a href="http://www.inf.ethz.ch/personal/dpanozzo/">Daniele
  197. Panozzo</a>. Please <a href="&#109;&#97;&#105;&#108;&#x74;&#111;&#x3a;&#x61;&#x6c;&#101;&#x63;&#x6a;&#x61;&#x63;&#111;&#98;&#115;&#111;&#110;&#64;&#103;&#109;&#x61;&#105;&#108;&#x2e;&#x63;&#x6f;&#x6d;&#44;&#x64;&#x61;&#110;&#105;&#101;&#x6c;&#101;&#x2e;&#x70;&#x61;&#110;&#x6f;&#122;&#x7a;&#x6f;&#64;&#x67;&#x6d;&#x61;&#x69;&#x6c;&#x2e;&#99;&#x6f;&#x6d;">&#99;&#x6f;&#x6e;&#116;&#x61;&#99;&#x74;
  198. &#117;&#115;</a> if you have
  199. questions or comments. For troubleshooting, please post an
  200. <a href="https://github.com/libigl/libigl/issues">issue</a> on github.</p>
  201. <p>If you&#8217;re using libigl in your projects, quickly <a href="&#x6d;&#x61;&#105;&#108;&#x74;&#x6f;&#58;&#97;&#x6c;&#101;&#99;&#106;&#x61;&#x63;&#111;&#x62;&#x73;&#x6f;&#110;&#64;&#103;&#x6d;&#x61;&#x69;&#x6c;&#46;&#99;&#x6f;&#x6d;&#x2c;&#100;&#x61;&#110;&#105;&#x65;&#108;&#x65;&#x2e;&#112;&#97;&#x6e;&#111;&#x7a;&#x7a;&#x6f;&#x40;&#103;&#109;&#x61;&#105;&#x6c;&#x2e;&#x63;&#111;&#109;">&#x64;&#x72;&#111;&#112; &#x75;&#x73; &#97;
  202. &#110;&#111;&#116;&#101;</a>. Tell us who you
  203. are and what you&#8217;re using it for. This helps us apply for funding and justify
  204. spending time maintaining this.</p>
  205. <p>If you find bugs or have problems please use our <a href="https://github.com/libigl/libigl/issues">github issue tracking
  206. page</a>.</p>
  207. <h2 id="copyright">Copyright</h2>
  208. <p>2016 Alec Jacobson, Daniele Panozzo, Christian Schüller, Olga Diamanti, Qingnan
  209. Zhou, Sebastian Koch, Nico Pietroni, Stefan Brugger, Kenshi Takayama, Wenzel Jakob, Nikolas De
  210. Giorgis, Luigi Rocca, Leonardo Sacht, Kevin Walliman, Olga Sorkine-Hornung, and others.</p>
  211. <p>Please see individual files for appropriate copyright notices.</p>
  212. </body>
  213. </html>