forked from libigl/libigl
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
289 lines (225 loc) · 15 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
<!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/branch/master"><img src="https://ci.appveyor.com/api/projects/status/mf3t9rnhco0vhly8/branch/master?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 <code>V</code> and an m-by–3 matrix of
triangle indices <code>F</code>.</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="libiglexampleproject">libigl Example Project</h2>
<p>We provide a <a href="https://github.com/libigl/libigl-example-project">blank project example</a> showing how to use libigl and cmake. Feel free and encouraged to copy or fork this project as a way of starting a new personal project using libigl.</p>
<h2 id="codingguidelinesandtips">Coding Guidelines and Tips</h2>
<p>libigl follows strict coding guidelines, please take a look <a href="http://libigl.github.io/libigl/style-guidelines.html">here</a> before submitting your pull requests. We also have a set of <a href="http://libigl.github.io/libigl/coding-guidelines.html">general coding tips</a> on how to code a geometry processing research project.</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. libigl follows strict coding guidelines, please take a look at our <a href="style-guidelines.html">style guidelines</a> before submitting your pull requests.</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.activision.com">Activision</a></li>
<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="https://epicgames.com">Epic Games</a></li>
<li><a href="https://research.google.com">Google Research</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="https://www.inria.fr/centre/grenoble/">Inria, Université Grenoble Alpes</a>, France</li>
<li><a href="http://english.jiangnan.edu.cn">Jiangnan university</a>, China</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://www.staff.science.uu.nl/~vaxma001/">Utrecht University</a>, The Netherlands</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="http://dgp.toronto.edu">University of Toronto</a>, Canada</li>
<li><a href="https://www.csc.uvic.ca/Research/graphics/">University of Victoria</a>, Canada</li>
<li><a href="http://www.uwec.edu/computer-science/">University of Wisconsin-Eau Claire</a>, USA</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.toronto.edu/~jacobson/">Alec
Jacobson</a> and <a href="http://cs.nyu.edu/~panozzo/">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>2017 Alec Jacobson, Daniele Panozzo, Christian Schüller, Olga Diamanti, Qingnan
Zhou, Sebastian Koch, Amir Vaxman, 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>