Line 1... |
Line 1... |
1 |
/** \mainpage GEL: Geometric and linear algebra tools.
|
1 |
/** \mainpage GEL: GEometric and Linear algebra tools.
|
2 |
|
2 |
|
3 |
GEL is a framwork for working with graphics and certain vision related
|
3 |
GEL is a framwork for computer graphics and 3D vision.
|
- |
|
4 |
|
4 |
tasks. There is a good deal of tools for processing Geometry and
|
5 |
There are a good many tools for computational geometry processing: A
|
5 |
some tools for computer Graphics. There is a halfedge based mesh class in the
|
6 |
voxel grid and a simple triangle mesh data structure. There is also a
|
6 |
HMesh namespace, and an indexed face set based mesh class IMesh.
|
7 |
more advanced triangle mesh data structure called IMesh and a halfedge
|
- |
|
8 |
based polygonal mesh data structure called HMesh. There is a very
|
- |
|
9 |
useful data structure known as a k-D tree and many other things.
|
7 |
|
10 |
|
8 |
Also found are two packages for linear algebra: CGLA is strictly for small
|
11 |
Also found are two packages for linear algebra: CGLA is strictly for small
|
9 |
vectors and matrices. LinAlg is a lapack wrapper for slightly larger
|
12 |
vectors and matrices. LinAlg is a Lapack wrapper for slightly larger
|
10 |
problems. Finally there are some utilities in Util.
|
13 |
problems. At this point, it is fairly simple.
|
- |
|
14 |
|
- |
|
15 |
Finally there are some utilities in Util: Getting command line arguments,
|
- |
|
16 |
hash table classes, a 2D grid class, a resource manager and other
|
- |
|
17 |
miscellany.
|
11 |
*/
|
18 |
*/
|
12 |
|
19 |
|
13 |
/** \namespace CGLA
|
20 |
/** \namespace CGLA
|
14 |
\brief Computer Graphics Linear Algebra
|
21 |
\brief Computer Graphics Linear Algebra.
|
- |
|
22 |
|
- |
|
23 |
CGLA is a set of numerical C++ vector and matrix classes and class
|
- |
|
24 |
templates designed with computer graphics in mind. CGLA stands for
|
- |
|
25 |
``Computer Graphics Linear Algebra''.
|
- |
|
26 |
|
- |
|
27 |
Let us get right down to the obvious question: Why create another
|
- |
|
28 |
linear algebra package?
|
- |
|
29 |
Well, CGLA evolved from a few matrix and vector classes because I
|
- |
|
30 |
didn't have anything better. Also, I created CGLA to experiment with
|
- |
|
31 |
some template programming techniques. This led to the most important
|
- |
|
32 |
feature of CGLA, namely the fact that all vector types are derived
|
- |
|
33 |
from the same template.
|
- |
|
34 |
|
- |
|
35 |
This makes it easy to ensure identical semantics: Since all vectors
|
- |
|
36 |
have inherited, say, the * operator from a common ancestor, it works
|
- |
|
37 |
the same for all of them.
|
- |
|
38 |
|
- |
|
39 |
It is important to note that CGLA was designed for Computer Graphics
|
- |
|
40 |
(not numerical computations) and this had a number of
|
- |
|
41 |
implications. Since, in computer graphics we mainly need small vectors
|
- |
|
42 |
of dimension 2,3, or 4 CGLA was designed for vectors of low
|
- |
|
43 |
dimensionality. Moreover, the amount of memory allocated for a vector
|
- |
|
44 |
is decided by its type at compile time. CGLA does not use dynamic
|
- |
|
45 |
memory. CGLA also does not use virtual functions, and most functions
|
- |
|
46 |
are inline. These features all help making CGLA relatively fast.
|
- |
|
47 |
|
- |
|
48 |
Of course, other libraries of vector templates for computer graphics
|
- |
|
49 |
exist, but to my knowledge none where the fundamental templates are
|
- |
|
50 |
parametrized w.r.t. dimension as well as type. In other words, we have
|
- |
|
51 |
a template (ArithVec) that gets both type
|
- |
|
52 |
(e.g. float) and dimension
|
- |
|
53 |
(e.g. 3) as arguments. the intended use of this template is as
|
- |
|
54 |
ancestor of concrete types such as Vec3f - a 3D floating
|
- |
|
55 |
point type.
|
- |
|
56 |
|
- |
|
57 |
The use of just one template as basis is very important, I believe,
|
- |
|
58 |
since it makes it extremely simple to add new types of
|
- |
|
59 |
vectors. Another very generic template is ArithMat which is a
|
- |
|
60 |
template for matrix classes. (and not necessarily NxN matrices).
|
- |
|
61 |
|
- |
|
62 |
From a users perspective CGLA contains a number of vector and matrix
|
- |
|
63 |
classes, a quaternion and some utility classes. In summary, the most
|
- |
|
64 |
important features are
|
- |
|
65 |
|
- |
|
66 |
- A number of 2, 3 and 4 d vector classes.
|
- |
|
67 |
- A number of Matrix classes.
|
- |
|
68 |
- A Quaternion class.
|
- |
|
69 |
- Some test programs.
|
- |
|
70 |
- Works well with OpenGL.
|
15 |
|
71 |
|
16 |
CGLA is a collection of classes for linear algebra. All vectors and matrices
|
- |
|
17 |
are allocated on the static not using dynamic memory. Only dimensions 2,3,4
|
- |
|
18 |
are supported. There is also a quaternion class and other components.
|
- |
|
19 |
|
72 |
|
20 |
There is an introductory document discussing how to use CGLA.
|
73 |
There is a document on CGLA in the GEL documentation. The introduction
|
- |
|
74 |
above was taken from that text.
|
21 |
*/
|
75 |
*/
|
22 |
|
76 |
|
23 |
/** \namespace Graphics
|
77 |
/** \namespace Graphics
|
24 |
\brief The namespace for things related to (real time) rendering
|
78 |
\brief The namespace for things related to (real time) rendering
|
25 |
|
79 |
|