index.html 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592
  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="tutorial/images/libigl-logo.jpg" alt="" />
  17. <figcaption></figcaption></figure>
  18. <p><a href="http://libigl.github.io/libigl/">http://libigl.github.io/libigl/</a>
  19. <a href="https://github.com/libigl/libigl/">https://github.com/libigl/libigl/</a></p>
  20. <p>Copyright 2014 - Alec Jacobson, Daniele Panozzo, Olga Diamanti, Kenshi
  21. Takayama, Leo Sacht, Wenzel Jacob, etc.</p>
  22. <p>Libigl is first and foremost a <em>header</em> library. Each header file should
  23. contain a single function. This function may have multiple overloads and
  24. prototypes. All functions should use the <code>igl::</code> namespace and should adhere to
  25. the conventions and styles listed in the <a href="style_guidelines.html">style
  26. guidelines</a>.</p>
  27. <blockquote>
  28. <p><strong>New:</strong> As of 1 July 2014, we have released libigl as beta version 1.0.
  29. There are a number of changes we collected for this release to minimize
  30. confusion and changes to how you use libigl. See <a href="#version1.0changes">Version 1.0
  31. Changes</a>.</p>
  32. </blockquote>
  33. <h2 id="installation">Installation</h2>
  34. <p>Libigl is a <em>header</em> library. You do <strong>not</strong> need to build anything to install.
  35. Simple add <code>igl/</code> to your include path and include relevant headers. Here&#8217;s a
  36. small &#8220;Hello, World&#8221; program:</p>
  37. <pre><code class="cpp">#include &lt;igl/cotmatrix.h&gt;
  38. #include &lt;Eigen/Dense&gt;
  39. #include &lt;Eigen/Sparse&gt;
  40. #include &lt;iostream&gt;
  41. int main()
  42. {
  43. Eigen::MatrixXd V(4,2);
  44. V&lt;&lt;0,0,
  45. 1,0,
  46. 1,1,
  47. 0,1;
  48. Eigen::MatrixXi F(2,3);
  49. F&lt;&lt;0,1,2,
  50. 0,2,3;
  51. Eigen::SparseMatrix&lt;double&gt; L;
  52. igl::cotmatrix(V,F,L);
  53. std::cout&lt;&lt;&quot;Hello, mesh: &quot;&lt;&lt;std::endl&lt;&lt;L*V&lt;&lt;std::endl;
  54. return 0;
  55. }
  56. </code></pre>
  57. <p>If you save this in <code>hello.cpp</code>, then on <code>gcc</code> with Eigen installed via
  58. macports for example you could compile this with:</p>
  59. <pre><code class="bash">gcc -I/opt/local/include/eigen3 -I./igl/ hello.cpp -o hello
  60. </code></pre>
  61. <p>Running <code>./hello</code> would then produce</p>
  62. <pre><code>Hello, mesh:
  63. 0.5 0.5
  64. -0.5 0.5
  65. -0.5 -0.5
  66. 0.5 -0.5
  67. </code></pre>
  68. <h2 id="tutorial">Tutorial</h2>
  69. <p>As of version 1.0, libigl includes an introductory
  70. <a href="http://libigl.github.io/libigl/tutorial/tutorial.html">tutorial</a> that covers
  71. its basic functionalities.</p>
  72. <h2 id="dependencies">Dependencies</h2>
  73. <ul>
  74. <li>Eigen3 Last tested with Eigen Version 3.2</li>
  75. </ul>
  76. <h3 id="optional">Optional</h3>
  77. <ul>
  78. <li>OpenGL (disable with <code>IGL_NO_OPENGL</code>)
  79. <ul>
  80. <li>OpenGL &gt;= 4 (enable with <code>IGL_OPENGL_4</code>)</li>
  81. </ul></li>
  82. <li>AntTweakBar (disable with <code>IGL_NO_ANTTWEAKBAR</code>) Last tested 1.16 (see
  83. <code>libigl/external/AntTweakBar</code>)</li>
  84. <li>GLEW Windows and Linux</li>
  85. <li>OpenMP</li>
  86. <li>libpng libiglpng extra only</li>
  87. <li>Mosek libiglmosek extra only</li>
  88. <li>Matlab libiglmatlab extra only</li>
  89. <li>boost libiglboost, libiglcgal extra only</li>
  90. <li>SSE/AVX libiglsvd3x3 extra only</li>
  91. <li>CGAL libiglcgal extra only
  92. <ul>
  93. <li>boost</li>
  94. <li>gmp</li>
  95. <li>mpfr</li>
  96. </ul></li>
  97. <li>CoMiSo libcomiso extra only</li>
  98. </ul>
  99. <h3 id="optionalincludedinexternal">Optional (included in external/)</h3>
  100. <ul>
  101. <li>TetGen libigltetgen extra only</li>
  102. <li>Embree libiglembree extra only</li>
  103. <li>tinyxml2 libiglxml extra only</li>
  104. <li>glfw libviewer extra only</li>
  105. <li>LIM liblim extra only</li>
  106. </ul>
  107. <h2 id="headeronly">Header only</h2>
  108. <p>Libigl is designed to work &#8220;out-of-the-box&#8221; as a headers only library. To
  109. include libigl in your project. You need only include the libigl/include/
  110. directory in your include path. To
  111. compile a hello-word example.cpp:</p>
  112. <pre><code>#include &lt;Eigen/Dense&gt;
  113. #include &lt;igl/readOBJ.h&gt;
  114. #include &lt;iostream&gt;
  115. int main(int argc, char * argv[])
  116. {
  117. if(argc&gt;1)
  118. {
  119. Eigen::MatrixXd V;
  120. Eigen::MatrixXi F;
  121. igl::readOBJ(argv[1],V,F);
  122. std::cout&lt;&lt;&quot;Hello, mesh with &quot;&lt;&lt;V.rows()&lt;&lt;&quot; vertices!&quot;&lt;&lt;std::endl;
  123. }else{
  124. std::cout&lt;&lt;&quot;Hello, world!&quot;&lt;&lt;std::endl;
  125. }
  126. return 0;
  127. }
  128. </code></pre>
  129. <p>using gcc (replacing appropriate paths):</p>
  130. <pre><code>g++ -I/usr/local/igl/libigl/include \
  131. -I/opt/local/include/eigen3 example.cpp -o example
  132. </code></pre>
  133. <p>Then run this example with:</p>
  134. <pre><code>./example examples/shared/TinyTorus.obj
  135. </code></pre>
  136. <h2 id="compilationasastaticlibrary">Compilation as a static library</h2>
  137. <p>Libigl is developed most often on Mac OS X, though has current users in Linux
  138. and Windows.</p>
  139. <h3 id="linuxmacosxcygwin">Linux/Mac OS X/Cygwin</h3>
  140. <p>Libigl may also be compiled to a static library. This is advantageous when
  141. building a project with libigl, since when used as an header-only library can
  142. slow down compile times.</p>
  143. <p>To build the entire libigl library producing lib/libigl.a, issue:</p>
  144. <pre><code>cd build
  145. make lib
  146. </code></pre>
  147. <p>You may need to edit Makefile.conf accordingly. Best to give yourself an
  148. <code>IGL_USERNAME</code> and add a custom install suite for yourself. Then you can enable
  149. appropriate extras.</p>
  150. <h4 id="extras">Extras</h4>
  151. <p>Once you&#8217;ve set up an <code>IGL_USERNAME</code> and enabled extras within Makefile.conf.
  152. You can build the extra libraries (into lib/ligiglpng.a, lib/libiglmatlab.a,
  153. lib/libigltetgen.a, lib/libiglmosek.a, etc.) by issuing:</p>
  154. <pre><code>cd build
  155. make extras
  156. </code></pre>
  157. <h4 id="examples">Examples</h4>
  158. <p>You can make a slew of examples by issuing:</p>
  159. <pre><code>cd build
  160. make examples
  161. </code></pre>
  162. <h4 id="external">External</h4>
  163. <p>Finally there are a number of external libraries that we include in
  164. ./external/ because they are either difficult to obtain or they have been
  165. patched for easier use with libigl. Please see the respective readmes in
  166. those directories.</p>
  167. <h5 id="installinganttweakbar">Installing AntTweakBar</h5>
  168. <p>To build the a static AntTweakBar library on Mac OS X issue:</p>
  169. <pre><code>cd external/AntTweakBar/src
  170. make -f Makefile.osx.igl
  171. </code></pre>
  172. <h5 id="installingtetgen">Installing Tetgen</h5>
  173. <p>To build the tetgen library and executable on Mac OS X issue:</p>
  174. <pre><code>cd external/tetgen
  175. make clean
  176. rm -f obj/*.o
  177. make -f Makefile.igl tetgen
  178. rm -f obj/*.o
  179. make -f Makefile.igl tetlib
  180. </code></pre>
  181. <h5 id="installingmedit">Installing medit</h5>
  182. <p>To build the igl version of the medit executable on Mac OS X issue:</p>
  183. <pre><code>cd external/medit
  184. make -C libmesh
  185. make -f Makefile.igl medit
  186. </code></pre>
  187. <h5 id="installingembree2.0">Installing Embree 2.0</h5>
  188. <p>To build the embree library and executables on Mac OS X issue:</p>
  189. <pre><code>cd external/embree
  190. mkdir build
  191. cd build
  192. cmake ..
  193. # Or using a different compiler
  194. #cmake .. -DCMAKE_C_COMPILER=/opt/local/bin/gcc -DCMAKE_CXX_COMPILER=/opt/local/bin/g++
  195. make
  196. # Could also install embree to your root, but libigl examples don't expect
  197. # this
  198. #sudo make install
  199. </code></pre>
  200. <h5 id="installingtinyxml2">Installing tinyxml2</h5>
  201. <p>To build the a static tinyxml2 library on Mac OS X issue:</p>
  202. <pre><code>cd external/tinyxml2
  203. cmake .
  204. make
  205. </code></pre>
  206. <h5 id="installingyimg">Installing YImg</h5>
  207. <p>To build the a static YImg library on Mac OS X issue:</p>
  208. <pre><code>cd external/yimg
  209. make
  210. </code></pre>
  211. <p>You may need to install libpng. Systems with X11 might find this already
  212. installed at <code>/usr/X11/lib</code>.</p>
  213. <h3 id="windowsexperimental">Windows (Experimental)</h3>
  214. <p>To build a static library (.lib) on windows, open Visual Studio 2010.</p>
  215. <ul>
  216. <li>New &gt; Project &#8230;</li>
  217. <li>Visual C++ &gt; Win32</li>
  218. <li>Win32 Console Application</li>
  219. <li>Name: libiglVisualStudio</li>
  220. <li>Uncheck &#8220;Create directory for solution&#8221;</li>
  221. <li>Then hit OK, and then Next</li>
  222. <li>Check &#8220;Static Library&#8221;</li>
  223. <li>Uncheck &#8220;Precompiled headers&#8221;</li>
  224. <li>Add all include/igl/*.cpp to the sources directory</li>
  225. <li>Add all include/igl/*.h to the headers directory</li>
  226. <li>Open Project &gt; libigl Properties&#8230;</li>
  227. <li>Add the path to eigen3 to the include paths</li>
  228. <li>Change the target name to libigl</li>
  229. <li>Build and pray (this should create libigl.lib</li>
  230. </ul>
  231. <p><a href="http://msdn.microsoft.com/en-us/library/ms235627(v=vs.80).aspx">Source</a></p>
  232. <h2 id="examples">Examples</h2>
  233. <p>To get started, we advise that you take a look at a few examples:</p>
  234. <pre><code>./examples/hello-world/
  235. ./examples/meshio/
  236. ./examples/basic-topology/
  237. ./examples/ReAntTweakBar/
  238. </code></pre>
  239. <h2 id="extras">Extras</h2>
  240. <p>Libigl compartmentalizes dependences via its organization into a <em>main</em> libigl
  241. library and &#8220;extras.&#8221;</p>
  242. <h3 id="bbw">bbw</h3>
  243. <p>This library extra contains functions for computing Bounded Biharmonic Weights, can
  244. be used with and without the <a href="#mosek">mosek</a> extra via the <code>IGL_NO_MOSEK</code>
  245. macro.</p>
  246. <h3 id="boost">boost</h3>
  247. <p>This library extra utilizes the graph functions in the boost library for find
  248. connected components and performing breadth-first traversals.</p>
  249. <h3 id="cgal">cgal</h3>
  250. <p>This library extra utilizes CGAL&#8217;s efficient and exact intersection and
  251. proximity queries.</p>
  252. <h3 id="embree">embree</h3>
  253. <p>This library extra utilizes embree&#8217;s efficient ray tracing queries.</p>
  254. <h3 id="matlab">matlab</h3>
  255. <p>This library extra provides support for reading and writing <code>.mat</code> workspace
  256. files, interfacing with Matlab at run time and compiling mex functions.</p>
  257. <h3 id="mosek">mosek</h3>
  258. <p>This library extra utilizes mosek&#8217;s efficient interior-point solver for
  259. quadratic programs.</p>
  260. <h3 id="png">png</h3>
  261. <p>This library extra uses <code>libpng</code> and <code>YImage</code> to read and write <code>.png</code> files.</p>
  262. <h3 id="svd3x3">svd3x3</h3>
  263. <p>This library extra implements &#8220;as-rigid-as-possible&#8221; (ARAP) deformation
  264. techniques using the fast singular value decomposition routines
  265. written specifically for 3x3 matrices to use <code>SSE</code> intrinsics. This extra can
  266. still be compiled without sse support and support should be determined
  267. automatically at compile time via the <code>__SSE__</code> macro.</p>
  268. <h3 id="tetgen">tetgen</h3>
  269. <p>This library extra provides a simplified wrapper to the tetgen 3d tetrahedral meshing
  270. library.</p>
  271. <h3 id="viewer">viewer</h3>
  272. <p>This library extra utilizes glfw and glew to open an opengl context and launch
  273. a simple mesh viewer.</p>
  274. <h3 id="xml">xml</h3>
  275. <p>This library extra utilizes tinyxml2 to read and write serialized classes
  276. containing Eigen matrices and other standard simple data-structures.</p>
  277. <h2 id="development">Development</h2>
  278. <p>Further documentation for developers is listed in tutorial.html,
  279. style_guidelines.html</p>
  280. <h2 id="license">License</h2>
  281. <p>See <code>LICENSE.txt</code></p>
  282. <h2 id="zipping">Zipping</h2>
  283. <p>Zip this directory without .git litter and binaries using:</p>
  284. <pre><code>git archive -prefix=libigl/ -o libigl.zip master
  285. </code></pre>
  286. <h2 id="version1.0changes">Version 1.0 Changes</h2>
  287. <p>Our beta release marks our confidence that this library can be used outside of
  288. casual experimenting. To maintain order, we have made a few changes which
  289. current users should read and adapt their code accordingly.</p>
  290. <h3 id="renamedfunctions">Renamed functions</h3>
  291. <p>The following table lists functions which have changed name as of version
  292. 1.0.0:</p>
  293. <table>
  294. <colgroup>
  295. <col style="text-align:left;"/>
  296. <col style="text-align:left;"/>
  297. </colgroup>
  298. <thead>
  299. <tr>
  300. <th style="text-align:left;">Old</th>
  301. <th style="text-align:left;">New</th>
  302. </tr>
  303. </thead>
  304. <tbody>
  305. <tr>
  306. <td style="text-align:left;"><code>igl::add_barycenter</code></td>
  307. <td style="text-align:left;"><code>igl::false_barycentric_subdivision</code></td>
  308. </tr>
  309. <tr>
  310. <td style="text-align:left;"><code>igl::areamatrix</code></td>
  311. <td style="text-align:left;"><code>igl::vector_area_matrix</code></td>
  312. </tr>
  313. <tr>
  314. <td style="text-align:left;"><code>igl::barycentric2global</code></td>
  315. <td style="text-align:left;"><code>igl::barycentric_to_global</code></td>
  316. </tr>
  317. <tr>
  318. <td style="text-align:left;"><code>igl::boundary_faces</code></td>
  319. <td style="text-align:left;"><code>igl::boundary_facets</code></td>
  320. </tr>
  321. <tr>
  322. <td style="text-align:left;"><code>igl::boundary_vertices_sorted</code></td>
  323. <td style="text-align:left;"><code>igl::boundary_loop</code></td>
  324. </tr>
  325. <tr>
  326. <td style="text-align:left;"><code>igl::cotangent</code></td>
  327. <td style="text-align:left;"><code>igl::cotmatrix_entries</code></td>
  328. </tr>
  329. <tr>
  330. <td style="text-align:left;"><code>igl::edgetopology</code></td>
  331. <td style="text-align:left;"><code>igl::edge_topology</code></td>
  332. </tr>
  333. <tr>
  334. <td style="text-align:left;"><code>igl::gradMat</code></td>
  335. <td style="text-align:left;"><code>igl::grad</code></td>
  336. </tr>
  337. <tr>
  338. <td style="text-align:left;"><code>igl::is_manifold</code></td>
  339. <td style="text-align:left;"><code>igl::is_edge_manifold</code></td>
  340. </tr>
  341. <tr>
  342. <td style="text-align:left;"><code>igl::mexStream</code></td>
  343. <td style="text-align:left;"><code>igl::MexStream</code></td>
  344. </tr>
  345. <tr>
  346. <td style="text-align:left;"><code>igl::moveFV</code></td>
  347. <td style="text-align:left;"><code>igl::average_onto_vertices</code></td>
  348. </tr>
  349. <tr>
  350. <td style="text-align:left;"><code>igl::moveVF</code></td>
  351. <td style="text-align:left;"><code>igl::average_onto_faces</code></td>
  352. </tr>
  353. <tr>
  354. <td style="text-align:left;"><code>igl::plot_vector</code></td>
  355. <td style="text-align:left;"><code>igl::print_vector</code></td>
  356. </tr>
  357. <tr>
  358. <td style="text-align:left;"><code>igl::pos</code></td>
  359. <td style="text-align:left;"><code>igl::HalfEdgeIterator</code></td>
  360. </tr>
  361. <tr>
  362. <td style="text-align:left;"><code>igl::plane_project</code></td>
  363. <td style="text-align:left;"><code>igl::project_isometrically_to_plane</code></td>
  364. </tr>
  365. <tr>
  366. <td style="text-align:left;"><code>igl::project_points_mesh</code></td>
  367. <td style="text-align:left;"><code>igl::line_mesh_intersection</code></td>
  368. </tr>
  369. <tr>
  370. <td style="text-align:left;"><code>igl::read</code></td>
  371. <td style="text-align:left;"><code>igl::read_triangle_mesh</code></td>
  372. </tr>
  373. <tr>
  374. <td style="text-align:left;"><code>igl::removeDuplicates.cpp</code></td>
  375. <td style="text-align:left;"><code>igl::remove_duplicates</code></td>
  376. </tr>
  377. <tr>
  378. <td style="text-align:left;"><code>igl::removeUnreferenced</code></td>
  379. <td style="text-align:left;"><code>igl::remove_unreferenced</code></td>
  380. </tr>
  381. <tr>
  382. <td style="text-align:left;"><code>igl::tt</code></td>
  383. <td style="text-align:left;"><code>igl::triangle_triangle_adjacency</code></td>
  384. </tr>
  385. <tr>
  386. <td style="text-align:left;"><code>igl::vf</code></td>
  387. <td style="text-align:left;"><code>igl::vertex_triangle_adjacency</code></td>
  388. </tr>
  389. <tr>
  390. <td style="text-align:left;"><code>igl::write</code></td>
  391. <td style="text-align:left;"><code>igl::write_triangle_mesh</code></td>
  392. </tr>
  393. <tr>
  394. <td style="text-align:left;"><code>igl::manifold_patches</code></td>
  395. <td style="text-align:left;"><code>igl::orientable_patches</code></td>
  396. </tr>
  397. <tr>
  398. <td style="text-align:left;"><code>igl::selfintersect</code></td>
  399. <td style="text-align:left;"><code>igl::remesh_self_intersections</code></td>
  400. </tr>
  401. <tr>
  402. <td style="text-align:left;"><code>igl::project_mesh</code></td>
  403. <td style="text-align:left;"><code>igl::line_mesh_intersection</code></td>
  404. </tr>
  405. <tr>
  406. <td style="text-align:left;"><code>igl::triangulate</code></td>
  407. <td style="text-align:left;"><code>igl::polygon_mesh_to_triangle_mesh</code></td>
  408. </tr>
  409. <tr>
  410. <td style="text-align:left;"><code>igl::is_manifold</code></td>
  411. <td style="text-align:left;"><code>igl::is_edge_manifold</code></td>
  412. </tr>
  413. <tr>
  414. <td style="text-align:left;"><code>igl::triangle_wrapper</code></td>
  415. <td style="text-align:left;"><code>igl::triangulate</code></td>
  416. </tr>
  417. </tbody>
  418. </table>
  419. <h3 id="miscellaneous">Miscellaneous</h3>
  420. <ul>
  421. <li>To match interfaces provided by (all) other quadratic optimization
  422. libraries, <code>igl::min_quad_with_fixed</code> and <code>igl::active_set</code> now expect as
  423. input twice the quadratic coefficients matrix, i.e. the Hessian. For
  424. example, <code>igl::min_quad_with_fixed(H,B,...)</code> minimizes <span class="math">\(\frac{1}{2}x^T H
  425. x+x^T B\)</span>.</li>
  426. <li>We have inverted the <code>IGL_HEADER_ONLY</code> macro to <code>IGL_STATIC_LIBRARY</code>. To
  427. compile using libigl as a header-only library, simply include headers and
  428. libigl in the header search path. To link to libigl, you must define the
  429. <code>IGL_STATIC_LIBRARY</code> macro at compile time and link to the <code>libigl*.a</code>
  430. libraries.</li>
  431. <li>Building libigl as a static library is now more organized. There is a
  432. <code>build/</code> directory with Makefiles for the main library (<code>Makefile</code>) and each
  433. dependency (e.g. <code>Makefile_mosek</code> for <code>libiglmosek.a</code>)</li>
  434. <li><code>igl::polar_svd</code> now always returns a rotation in <code>R</code>, never a reflection.
  435. This mirrors the behavior of <code>igl::polar_svd3x3</code>. Consequently the <code>T</code>
  436. part may have negative skews.</li>
  437. <li>We have organized the static</li>
  438. <li>The previous <code>igl::grad</code> function, which computed the per-triangle gradient
  439. of a per-vertex scalar function has been replaced. Now <code>igl::grad</code> computes
  440. the linear operator (previous computed using <code>igl::gradMat</code>). The gradient
  441. values can still be recovered by multiplying the operator against the scalar
  442. field as a vector and reshaping to have gradients per row.</li>
  443. <li><code>MASSMATRIX_*</code> has become <code>MASSMATRIX_TYPE_*</code></li>
  444. <li>The function <code>igl::project_normals</code>, which cast a line for each vertex of
  445. mesh <em>A</em> in the normal direction and found the closest intersection along
  446. these lines with mesh <em>B</em>, has been removed.</li>
  447. </ul>
  448. <h2 id="contact">Contact</h2>
  449. <p>Libigl is a group endeavor led by Alec Jacobson and Daniele Panozzo. Please
  450. contact <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;">&#97;&#x6c;&#x65;&#99;&#106;&#97;&#x63;&#111;&#x62;&#x73;&#x6f;&#110;&#x40;&#103;&#x6d;&#x61;&#105;&#x6c;&#x2e;&#x63;&#x6f;&#x6d;</a> if you have
  451. questions or comments. We are happy to get feedback! Enjoy!</p>
  452. <p>If you&#8217;re using libigl in your projects, quickly <a href="&#x6d;&#97;&#x69;&#x6c;&#116;&#x6f;&#x3a;&#97;&#x6c;&#101;&#x63;&#106;&#97;&#x63;&#x6f;&#98;&#115;&#x6f;&#x6e;&#64;&#103;&#x6d;&#97;&#105;&#108;&#x2e;&#x63;&#111;&#x6d;">&#x64;&#x72;&#111;&#112; &#117;&#x73; &#x61;
  453. &#x6e;&#x6f;&#116;&#101;</a>. Tell us who you are and what you&#8217;re using
  454. it for. This helps us apply for funding and justify spending time maintaining
  455. this.</p>
  456. <p>If you find bugs or have problems please use our <a href="https://github.com/libigl/libigl/issues">github issue tracking
  457. page</a>.</p>
  458. <h2 id="academiccitation">Academic citation</h2>
  459. <p>If you use libigl in your research projects, please cite the papers we
  460. implement as appropriate. To cite the library in general, you could use this
  461. BibTeX entry:</p>
  462. <pre><code class="bibtex">@misc{libigl,
  463. title = {{libigl}: A simple {C++} geometry processing library},
  464. author = {Alec Jacobson and Daniele Panozzo and others},
  465. note = {http://libigl.github.io/libigl/},
  466. year = {2014},
  467. }
  468. </code></pre>
  469. </body>
  470. </html>