index.html 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  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. <figure>
  16. <img src="libigl-teaser.png" alt="" />
  17. <figcaption></figcaption></figure>
  18. <p><a href="https://github.com/libigl/libigl/">https://github.com/libigl/libigl/</a></p>
  19. <p>libigl is a simple C++ geometry processing library. We have a wide
  20. functionality including construction of sparse discrete differential geometry
  21. operators and finite-elements matrices such as the cotangent Laplacian and
  22. diagonalized mass matrix, simple facet and edge-based topology data structures,
  23. mesh-viewing utilities for OpenGL and GLSL, and many core functions for matrix
  24. manipulation which make <a href="http://eigen.tuxfamily.org">Eigen</a> feel a lot more
  25. like MATLAB.</p>
  26. <p>It is <strong>a header-only library</strong>. You do not need to compile anything to use,
  27. just include igl headers (e.g. <code>#include &lt;igl/cotmatrix.h&gt;</code>) and run. Each
  28. header file contains a single function (e.g. <code>igl/cotmatrix.h</code> contains
  29. <code>igl::cotmatrix()</code>). Most are tailored to operate on a generic triangle mesh
  30. stored in an n-by&#8211;3 matrix of vertex positions V and an m-by&#8211;3 matrix of
  31. triangle indices F. </p>
  32. <p><em>Optionally</em> the library may also be <a href="build/">pre-compiled</a> into a statically
  33. linked library, for faster compile times with your projects. This only effects
  34. compile time (run-time performance and behavior is identical). If in doubt, use
  35. the header-only default mode: (i.e. just include the headers you want to use).</p>
  36. <p>We use the <a href="http://eigen.tuxfamily.org">Eigen</a> library heavily in our code. Our
  37. group prototypes a lot in MATLAB, and we have a useful <a href="matlab-to-eigen.html">MATLAB to libigl+Eigen
  38. conversion table</a>.</p>
  39. <h2 id="tutorial">Tutorial</h2>
  40. <p>As of version 1.0, libigl includes an introductory
  41. <a href="tutorial/tutorial.html">tutorial</a> that covers many functionalities.</p>
  42. <h2 id="installation">Installation</h2>
  43. <p>Libigl is a <strong>header-only</strong> library. You do <strong>not</strong> need to build anything to
  44. install. Simply add <code>libigl/include</code> to your include path and include relevant
  45. headers. Here is a small &#8220;Hello, World&#8221; program:</p>
  46. <pre><code class="cpp">#include &lt;igl/cotmatrix.h&gt;
  47. #include &lt;Eigen/Dense&gt;
  48. #include &lt;Eigen/Sparse&gt;
  49. #include &lt;iostream&gt;
  50. int main()
  51. {
  52. Eigen::MatrixXd V(4,2);
  53. V&lt;&lt;0,0,
  54. 1,0,
  55. 1,1,
  56. 0,1;
  57. Eigen::MatrixXi F(2,3);
  58. F&lt;&lt;0,1,2,
  59. 0,2,3;
  60. Eigen::SparseMatrix&lt;double&gt; L;
  61. igl::cotmatrix(V,F,L);
  62. std::cout&lt;&lt;&quot;Hello, mesh: &quot;&lt;&lt;std::endl&lt;&lt;L*V&lt;&lt;std::endl;
  63. return 0;
  64. }
  65. </code></pre>
  66. <p>If you save this in <code>hello.cpp</code>, then you could compile this with (assuming
  67. Eigen is installed in <code>/usr/local/include/eigen3</code>):</p>
  68. <pre><code class="bash">gcc -I/usr/local/include/eigen3 -I./libigl/include/ hello.cpp -o hello
  69. </code></pre>
  70. <p>Running <code>./hello</code> would then produce</p>
  71. <pre><code>Hello, mesh:
  72. 0.5 0.5
  73. -0.5 0.5
  74. -0.5 -0.5
  75. 0.5 -0.5
  76. </code></pre>
  77. <h2 id="dependencies">Dependencies</h2>
  78. <p>Dependencies are on a per-include basis and the majority of the functions in
  79. libigl depends only on the <a href="http://eigen.tuxfamily.org">Eigen</a> library.</p>
  80. <p>For more information see our <a href="tutorial/tutorial.html">tutorial</a>.</p>
  81. <h3 id="gccandtheoptionalcgaldependency">GCC and the optional CGAL dependency</h3>
  82. <p>The <code>include/igl/cgal/*.h</code> headers depend on CGAL. It has come to our attention
  83. that CGAL does not work properly with GCC 4.8. To the best of our knowledge,
  84. GCC 4.7 and clang will work correctly.</p>
  85. <h3 id="openmpandwindows">OpenMP and Windows</h3>
  86. <p>Some of our functions will take advantage of OpenMP if available. However, it
  87. has come to our attention that Visual Studio + Eigen + OpenMP does not work
  88. properly. Since we use OpenMP only to improve performance, we recommend
  89. avoiding OpenMP on Windows or proceeding with caution.</p>
  90. <h2 id="download">Download</h2>
  91. <p>You can keep up to date by cloning a read-only copy of our GitHub
  92. <a href="https://github.com/libigl">repository</a>.</p>
  93. <h2 id="knownissues">Known Issues</h2>
  94. <p>We really heavily on Eigen. Nearly all inputs and outputs are Eigen matrices of
  95. some kind. However, we currently <em>only</em> officially support Eigen&#8217;s default
  96. column-major ordering. That means, we <strong>do not</strong> expect our code to work for
  97. matrices using the <code>Eigen::RowMajor</code> flag. If you can, change definitions like:</p>
  98. <pre><code class="cpp">Eigen::Matrix&lt;double, Eigen::Dynamic, 3, Eigen::RowMajor&gt; A;
  99. </code></pre>
  100. <p>to</p>
  101. <pre><code class="cpp">Eigen::Matrix&lt;double, Eigen::Dynamic, 3, Eigen::ColMajor&gt; A;
  102. // or simply
  103. Eigen::Matrix&lt;double, Eigen::Dynamic, 3&gt; A;
  104. </code></pre>
  105. <p>We hope to fix this, or at least identify which functions are safe (many of
  106. them probably work just fine). This requires setting up unit testing, which is
  107. a major <em>todo</em> for our development.</p>
  108. <h2 id="howtocontribute">How to contribute</h2>
  109. <p>If you are interested in joining development, please fork the repository and
  110. submit a <a href="https://help.github.com/articles/using-pull-requests/">pull request</a>
  111. with your changes.</p>
  112. <h2 id="license">License</h2>
  113. <p>libigl is primarily <a href="http://www.mozilla.org/MPL/2.0/">MPL2</a> licensed
  114. (<a href="http://www.mozilla.org/MPL/2.0/FAQ.html">FAQ</a>). Some files contain
  115. third-party code under other licenses. We&#8217;re currently in the processes of
  116. identifying these and marking appropriately.</p>
  117. <h2 id="attribution">Attribution</h2>
  118. <p>If you use libigl in your academic projects, please cite the papers we
  119. implement as appropriate. To cite the library in general, you could use this
  120. BibTeX entry:</p>
  121. <pre><code class="bibtex">@misc{libigl,
  122. title = {{libigl}: A simple {C++} geometry processing library},
  123. author = {Alec Jacobson and Daniele Panozzo and others},
  124. note = {http://libigl.github.io/libigl/},
  125. year = {2015},
  126. }
  127. </code></pre>
  128. <h2 id="projectsuniversitiesusinglibigl">Projects/Universities using libigl</h2>
  129. <ul>
  130. <li><a href="http://esotericsoftware.com/">Spine by Esoteric Software</a> is an animation tool dedicated to 2D characters.</li>
  131. <li>Columbia University, <a href="http://www.cs.columbia.edu/cg/">Columbia Computer Graphics Group</a>, USA</li>
  132. <li><a href="http://www.graphics.cornell.edu/">Cornell University</a>, USA</li>
  133. <li>EPF Lausanne, <a href="http://lgg.epfl.ch/people.php">Computer Graphics and Geometry Laboratory</a>, Switzerland</li>
  134. <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>
  135. <li>George Mason University, <a href="http://cs.gmu.edu/~ygingold/">CraGL</a>, USA</li>
  136. <li><a href="http://www.ust.hk/">Hong Kong University of Science and Technology</a>, USA</li>
  137. <li><a href="http://www.nii.ac.jp/en/">National Institute of Informatics</a>, Japan</li>
  138. <li>New York University, <a href="http://mrl.nyu.edu/">Media Research Lab</a>, USA</li>
  139. <li>NYUPoly, <a href="http://game.engineering.nyu.edu/">Game Innovation Lab</a>, USA</li>
  140. <li><a href="http://www.telecom-paristech.fr/en/formation-et-innovation-dans-le-numerique.html">Telecom ParisTech</a>, Paris, France</li>
  141. <li><a href="http://www.tudelft.nl/en/">TU Delft</a>, Netherlands</li>
  142. <li><a href="http://mtm.ufsc.br/~leo/">Universidade Federal de Santa Catarina</a>, Brazil</li>
  143. <li><a href="http://www.usi.ch/en">Università della Svizzera Italiana</a>, Switzerland</li>
  144. <li><a href="http://vecg.cs.ucl.ac.uk/">University College London</a>, England</li>
  145. <li><a href="http://www.cam.ac.uk/">University of Cambridge</a>, England</li>
  146. <li><a href="http://cg.cis.upenn.edu/">University of Pennsylvania</a>, USA</li>
  147. </ul>
  148. <h2 id="contact">Contact</h2>
  149. <p>Libigl is a group endeavor led by <a href="http://www.cs.columbia.edu/~jacobson/">Alec
  150. Jacobson</a> and <a href="http://www.inf.ethz.ch/personal/dpanozzo/">Daniele
  151. 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;
  152. &#117;&#115;</a> if you have
  153. questions or comments. We are happy to get feedback!</p>
  154. <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;
  155. &#110;&#111;&#116;&#101;</a>. Tell us who you
  156. are and what you&#8217;re using it for. This helps us apply for funding and justify
  157. spending time maintaining this.</p>
  158. <p>If you find bugs or have problems please use our <a href="https://github.com/libigl/libigl/issues">github issue tracking
  159. page</a>.</p>
  160. <h2 id="copyright">Copyright</h2>
  161. <p>2015 Alec Jacobson, Daniele Panozzo, Olga Diamanti, Christian Schüller, Kenshi
  162. Takayama, Leo Sacht, Wenzel Jacob, Nico Pietroni, Amir Vaxman</p>
  163. <figure>
  164. <img src="tutorial/images/libigl-logo.jpg" alt="" />
  165. <figcaption></figcaption></figure>
  166. </body>
  167. </html>