Subversion Repositories gelsvn

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
156 jab 1
/** \mainpage GEL: GEometric and Linear algebra tools.
2
 
3
GEL is a framwork for computer graphics and 3D vision.
4
 
5
There are a good many tools for computational geometry processing: A
211 jab 6
voxel grid and a simple triangle mesh data structure. There is also 
7
a halfedge based polygonal mesh data structure called HMesh. There is a very
156 jab 8
useful data structure known as a k-D tree and many other things. 
9
 
10
Also found are two packages for linear algebra: CGLA is strictly for small
11
vectors and matrices. LinAlg is a Lapack wrapper for slightly larger 
12
problems. At this point, it is fairly simple.
13
 
14
Finally there are some utilities in Util: Getting command line arguments,
15
hash table classes, a 2D grid class, a resource manager and other 
16
miscellany.
17
*/
18
 
19
/** \namespace CGLA
20
\brief Computer Graphics Linear Algebra.
21
 
22
CGLA is a set of numerical C++ vector and matrix classes and class
23
templates designed with computer graphics in mind. CGLA stands for
24
``Computer Graphics Linear Algebra''.
25
 
26
Let us get right down to the obvious question: Why create another
27
linear algebra package?
28
Well, CGLA evolved from a few matrix and vector classes because I
29
didn't have anything better. Also, I created CGLA to experiment with
30
some template programming techniques. This led to the most important
31
feature of CGLA, namely the fact that all vector types are derived
32
from the same template. 
33
 
34
This makes it easy to ensure identical semantics: Since all vectors
35
have inherited, say, the * operator from a common ancestor, it works
36
the same for all of them.
37
 
38
It is important to note that CGLA was designed for Computer Graphics 
39
(not numerical computations) and this had a number of
40
implications. Since, in computer graphics we mainly need small vectors
41
of dimension 2,3, or 4 CGLA was designed for vectors of low
42
dimensionality. Moreover, the amount of memory allocated for a vector
43
is decided by its type at compile time. CGLA does not use dynamic
44
memory. CGLA also does not use virtual functions, and most functions
45
are inline. These features all help making CGLA relatively fast. 
46
 
47
Of course, other libraries of vector templates for computer graphics
48
exist, but to my knowledge none where the fundamental templates are
49
parametrized w.r.t. dimension as well as type. In other words, we have
50
a template (ArithVec) that gets both type
51
(e.g. float) and dimension 
52
(e.g. 3) as arguments. the intended use of this template is as
53
ancestor of concrete types such as Vec3f - a 3D floating
54
point type. 
55
 
56
The use of just one template as basis is very important, I believe,
57
since it makes it extremely simple to add new types of
58
vectors. Another very generic template is ArithMat which is a
59
template for matrix classes. (and not necessarily NxN matrices). 
60
 
61
From a users perspective CGLA contains a number of vector and matrix
62
classes, a quaternion and some utility classes. In summary, the most
63
important features are
64
 
65
- A number of 2, 3 and 4 d vector classes.
66
- A number of Matrix classes.
67
- A Quaternion class.
68
- Some test programs.
69
- Works well with OpenGL.
70
 
71
 
72
There is a document on CGLA in the GEL documentation. The introduction
73
above was taken from that text.
74
*/
75
 
76
/** \namespace Graphics
77
		\brief The namespace for things related to (real time) rendering
78
 
79
		Right now this namespace contains mostly trackball and viewing related
80
		things.
81
*/
82
 
83
/** \namespace Geometry
84
		\brief A namespace for utilities related to geometry.
85
 
86
		This namespace contains a wide range of stuff: Spatial datastructures
87
		voxel grids and related classes as well as a simple triangle mesh class.
88
*/
89
 
90
/** \namespace HMesh
91
		\brief The HMesh namespace contains the Manifold class which is a halfedge
92
		based mesh.
93
 
94
		Apart from manifold there are also face and vertex circulators in this 
95
		namespace. More advanced things are relegated to the HMeshUtil namespace.
96
 
97
		Some applications are also found here. For instance an isosurface 
98
		polygonizer and Garland Heckbert simplification has been implemented
99
	  on top of HMesh.
100
*/
101
 
102
/*!
103
	\namespace LinAlg
104
	\brief The Linear Algebra Implementation/Module/Package. 
105
 
106
  This is the linear algebra package deal with vector and matrix types plus 
107
  the basic operation on them. The Vector and Matrix Types are templated such 
108
  that the precision of a given 'system' can be changen. Though the precision 
109
  or type in mind is the double. Special types for 2 and 3 vectors 
110
  (CVec2 and CVec3) are included for improved performance. The more advanced 
111
  linear algebra functions are supplied by lincage to the LaPack package.
112
 
113
  \test The functionality in this pacage has if nothing else is mentioned 
114
  been tested by making small functions utilizing the functions. The 
115
  reason being that the functions here are rather esay to validate due to 
116
  their functional simplicity.
117
 
118
	A list of improvements in mind is:
119
	- Lapack interface
120
	- Vector and Matrix product and so on, with interface to _BLAS_
121
	- iterator thing
122
	- Memory leak check ? inline ?
123
	- Element functor
124
	- Identity matrixs
125
	- Compile and utilize the newer versions of the Lapack routines.
126
	- Have a nameing convention section in the documentaion
127
	- Integrate the design into the documentation
128
	- Have a get data in the matrix and vector instead of &A[0].
129
	- Have 3x3, 3x4 4x1 and 4x4 specialities.
130
	- Look at casting e.g. vec2i=vec2l.
131
	- Error handling in From/To matrix
132
	- Has error handling in Lapack been made ?
133
 
134
	\author Henrik Aanęs
135
	\version Aug 2001
136
*/
137
 
138
/** \namespace Util
139
		\brief This namespace is for general utilities that do not fit elsewhere.
140
 
141
*/
142