Ver código fonte

Documented Matrix

Thomas Buck 11 anos atrás
pai
commit
63b504a8bf
2 arquivos alterados com 152 adições e 389 exclusões
  1. 147
    315
      include/Matrix.h
  2. 5
    74
      src/Matrix.cpp

+ 147
- 315
include/Matrix.h Ver arquivo

1
-/* -*- Mode: C++; tab-width: 3; indent-tabs-mode: t; c-basic-offset: 3 -*- */
2
-/*================================================================
1
+/*!
2
+ * \file include/Matrix.h
3
+ * \brief 3D Matrix
3
  *
4
  *
4
- * Project : Freyja
5
- * Author  : Terry 'Mongoose' Hendrix II
6
- * Website : http://www.westga.edu/~stu7440/
7
- * Email   : stu7440@westga.edu
8
- * Object  : Matrix
9
- * License : No use w/o permission (C) 2002 Mongoose
10
- * Comments: 3d Matrix in class form
11
- *
12
- *
13
- *           This file was generated using Mongoose's C++
14
- *           template generator script.  <stu7440@westga.edu>
15
- *
16
- *-- History ------------------------------------------------
17
- *
18
- * 2003.06.17:
19
- * Mongoose - Now in column order to match OpenGL user needs,
20
- *            use transpose() to get row order back  =)
21
- *
22
- * 2002.05.11:
23
- * Mongoose - Created, based on my mtk3d matrix
24
- ================================================================*/
25
-
5
+ * \author Mongoose
6
+ */
26
 
7
 
27
 #ifndef _MATRIX_H_
8
 #ifndef _MATRIX_H_
28
 #define _MATRIX_H_
9
 #define _MATRIX_H_
29
 
10
 
30
-
31
 #include <MatMath.h>
11
 #include <MatMath.h>
32
 #include <Quaternion.h>
12
 #include <Quaternion.h>
33
 #include <Vector3d.h>
13
 #include <Vector3d.h>
34
 
14
 
35
-    ///////////////////////////////////////////////
36
-    // Multidim map for row order encoding       //
37
-    ///////////////////////////////////////////////
38
-    // 0,0 - 0;   0,1 - 1;   0,2 - 2;   0,3 - 3  //
39
-    // 1,0 - 4;   1,1 - 5;   1,2 - 6;   1,3 - 7  //
40
-    // 2,0 - 8;   2,1 - 9;   2,2 - 10;  2,3 - 11 //
41
-    // 3,0 - 12;  3,1 - 13;  3,2 - 14;  3,3 - 15 //
42
-    ///////////////////////////////////////////////
43
-
44
-    ///////////////////////////////////////////////
45
-    // Multidim map for column order encoding    //
46
-    ///////////////////////////////////////////////
47
-    // 0,0 - 0;   0,1 - 4;   0,2 - 8;   0,3 - 12 //
48
-    // 1,0 - 1;   1,1 - 5;   1,2 - 9;   1,3 - 13 //
49
-    // 2,0 - 2;   2,1 - 6;   2,2 - 10;  2,3 - 14 //
50
-    // 3,0 - 3;   3,1 - 7;   3,2 - 11;  3,3 - 15 //
51
-    ///////////////////////////////////////////////
52
-
53
-
54
-class Matrix
55
-{
56
- public:
57
-
58
-    ////////////////////////////////////////////////////////////
59
-    // Constructors
60
-    ////////////////////////////////////////////////////////////
61
 
15
 
16
+/*!
17
+ * \brief 3D Matrix
18
+ *
19
+ * Multidim map for row order encoding
20
+ *
21
+ *     ///////////////////////////////////////////////
22
+ *     // 0,0 - 0;   0,1 - 1;   0,2 - 2;   0,3 - 3  //
23
+ *     // 1,0 - 4;   1,1 - 5;   1,2 - 6;   1,3 - 7  //
24
+ *     // 2,0 - 8;   2,1 - 9;   2,2 - 10;  2,3 - 11 //
25
+ *     // 3,0 - 12;  3,1 - 13;  3,2 - 14;  3,3 - 15 //
26
+ *     ///////////////////////////////////////////////
27
+ *
28
+ * Multidim map for column order encoding
29
+ *
30
+ *     ///////////////////////////////////////////////
31
+ *     // 0,0 - 0;   0,1 - 4;   0,2 - 8;   0,3 - 12 //
32
+ *     // 1,0 - 1;   1,1 - 5;   1,2 - 9;   1,3 - 13 //
33
+ *     // 2,0 - 2;   2,1 - 6;   2,2 - 10;  2,3 - 14 //
34
+ *     // 3,0 - 3;   3,1 - 7;   3,2 - 11;  3,3 - 15 //
35
+ *     ///////////////////////////////////////////////
36
+ */
37
+class Matrix {
38
+public:
39
+
40
+    /*!
41
+     * \brief Constructs an object of Matrix
42
+     */
62
     Matrix();
43
     Matrix();
63
-    /*------------------------------------------------------
64
-     * Pre  :
65
-     * Post : Constructs an object of Matrix
66
-     *
67
-     *-- History ------------------------------------------
68
-     *
69
-     * 2002.05.11:
70
-     * Mongoose - Created
71
-     ------------------------------------------------------*/
72
 
44
 
45
+    /*!
46
+     * \brief Constructs an object of Matrix
47
+     * \param mat Matrix as data source
48
+     */
73
     Matrix(matrix_t mat);
49
     Matrix(matrix_t mat);
74
-    /*------------------------------------------------------
75
-     * Pre  :
76
-     * Post : Constructs an object of Matrix
77
-     *
78
-     *-- History ------------------------------------------
79
-     *
80
-     * 2002.05.11:
81
-     * Mongoose - Created
82
-     ------------------------------------------------------*/
83
 
50
 
51
+    /*!
52
+     * \brief Constructs an object of Matrix
53
+     * \param q Converts and assigns the Quaternion to the Matrix
54
+     */
84
     Matrix(Quaternion &q);
55
     Matrix(Quaternion &q);
85
-    /*------------------------------------------------------
86
-     * Pre  :
87
-     * Post : Converts and asigns Q to a Matrix
88
-     *        returns quaternion as Matrix
89
-     *
90
-     *-- History ------------------------------------------
91
-     *
92
-     * 2002.05.08:
93
-     * Mongoose - Created
94
-     ------------------------------------------------------*/
95
 
56
 
57
+    /*!
58
+     * \brief Deconstructs an object of Matrix
59
+     */
96
     ~Matrix();
60
     ~Matrix();
97
-    /*------------------------------------------------------
98
-     * Pre  : Matrix object is allocated
99
-     * Post : Deconstructs an object of Matrix
100
-     *
101
-     *-- History ------------------------------------------
102
-     *
103
-     * 2002.05.11:
104
-     * Mongoose - Created
105
-     ------------------------------------------------------*/
106
-
107
-    ////////////////////////////////////////////////////////////
108
-    // Public Accessors
109
-    ////////////////////////////////////////////////////////////
110
 
61
 
62
+    /*!
63
+     * \brief Returns this matrix copy
64
+     * \param mat target
65
+     */
111
     void getMatrix(matrix_t mat);
66
     void getMatrix(matrix_t mat);
112
-    /*------------------------------------------------------
113
-     * Pre  :
114
-     * Post : Returns this matrix copy
115
-     *
116
-     *-- History ------------------------------------------
117
-     *
118
-     * 2002.05.08:
119
-     * Mongoose - Created
120
-     ------------------------------------------------------*/
121
 
67
 
68
+    /*!
69
+     * \brief Returns this matrix transposed
70
+     * \param mat target
71
+     */
122
     void getTransposeMatrix(matrix_t mat);
72
     void getTransposeMatrix(matrix_t mat);
123
-    /*------------------------------------------------------
124
-     * Pre  :
125
-     * Post : Returns this matrix transposed
126
-     *
127
-     *-- History ------------------------------------------
128
-     *
129
-     * 2002.05.08:
130
-     * Mongoose - Created
131
-     ------------------------------------------------------*/
132
 
73
 
74
+    /*!
75
+     * \brief Returns this matrix inverted
76
+     * \param mat target
77
+     */
133
     bool getInvert(matrix_t mat);
78
     bool getInvert(matrix_t mat);
134
-    /*------------------------------------------------------
135
-     * Pre  :
136
-     * Post : Returns this matrix inverted
137
-     *
138
-     *-- History ------------------------------------------
139
-     *
140
-     * 2002.05.08:
141
-     * Mongoose - Created
142
-     ------------------------------------------------------*/
143
 
79
 
80
+    /*!
81
+     * \brief Multiplies two matrices
82
+     * \param a first matrix
83
+     * \param b second matrix
84
+     * \returns resultant matrix
85
+     */
144
     Matrix multiply(const Matrix &a, const Matrix &b);
86
     Matrix multiply(const Matrix &a, const Matrix &b);
145
-    /*------------------------------------------------------
146
-     * Pre  : Multiplies 2 matrices
147
-     * Post : Returns resultant matrix
148
-     *
149
-     *-- History ------------------------------------------
150
-     *
151
-     * 2002.05.08:
152
-     * Mongoose - Created
153
-     ------------------------------------------------------*/
154
 
87
 
88
+    /*!
89
+     * \brief Multiplies v vector and this matrix
90
+     * \param v double[4] vector
91
+     * \param result where the result will be stored, may be same as v
92
+     */
155
     void multiply4d(double *v, double *result);
93
     void multiply4d(double *v, double *result);
156
-    /*------------------------------------------------------
157
-     * Pre  : Multiplies <V> vector (double[4]) and <This> matrix
158
-     *
159
-     * Post : Returns <Result> vector,
160
-     *        <V> and <Result> maybe be the same vector
161
-     *
162
-     *-- History ------------------------------------------
163
-     *
164
-     * 2002.05.08:
165
-     * Mongoose - Created
166
-     ------------------------------------------------------*/
167
 
94
 
95
+    /*!
96
+     * \brief Multiplies v vector and this matrix
97
+     * \param v vector
98
+     * \param result where the result will be stored, may be same as v
99
+     */
168
     void multiply4v(vec4_t v, vec4_t result);
100
     void multiply4v(vec4_t v, vec4_t result);
169
-    /*------------------------------------------------------
170
-     * Pre  : Multiplies <V> vector and <This> matrix
171
-     *
172
-     * Post : Returns <Result> vector,
173
-     *        <V> and <Result> maybe be the same vector
174
-     *
175
-     *-- History ------------------------------------------
176
-     *
177
-     * 2002.05.08:
178
-     * Mongoose - Created
179
-     ------------------------------------------------------*/
180
 
101
 
102
+    /*!
103
+     * \brief Multiplies v vector and this matrix
104
+     * \param v vector
105
+     * \param result where the result will be stored, may be same as v
106
+     */
181
     void multiply3v(vec3_t v, vec3_t result);
107
     void multiply3v(vec3_t v, vec3_t result);
182
-    /*------------------------------------------------------
183
-     * Pre  : Multiplies <V> vector and <This> matrix
184
-     *
185
-     * Post : Returns <Result> vector,
186
-     *        <V> and <Result> maybe be the same vector
187
-     *
188
-     *-- History ------------------------------------------
189
-     *
190
-     * 2002.05.08:
191
-     * Mongoose - Created
192
-     ------------------------------------------------------*/
193
 
108
 
109
+    /*!
110
+     * \brief Prints matrix values to stdout
111
+     */
194
     void print();
112
     void print();
195
-    /*------------------------------------------------------
196
-     * Pre  :
197
-     * Post : Prints matrix values to stdout
198
-     *
199
-     *-- History ------------------------------------------
200
-     *
201
-     * 2002.05.08:
202
-     * Mongoose - Created
203
-     ------------------------------------------------------*/
204
 
113
 
114
+    /*!
115
+     * \brief Is this matrix the identity matrix?
116
+     * \returns true if it is identity, false otherwise
117
+     */
205
     bool isIdentity();
118
     bool isIdentity();
206
-    /*------------------------------------------------------
207
-     * Pre  :
208
-     * Post : Is this matrix the identity matrix?
209
-     *
210
-     *-- History ------------------------------------------
211
-     *
212
-     * 2002.05.08:
213
-     * Mongoose - Created
214
-     ------------------------------------------------------*/
215
 
119
 
120
+    /*!
121
+     * \brief Multiplies a and this matrix
122
+     * \param a matrix to multiply with
123
+     * \returns resultant matrix
124
+     */
216
     Matrix operator *(const Matrix &a);
125
     Matrix operator *(const Matrix &a);
217
-    /*------------------------------------------------------
218
-     * Pre  : Multiplies A and this matrices
219
-     * Post : Returns resultant matrix
220
-     *
221
-     *-- History ------------------------------------------
222
-     *
223
-     * 2002.05.08:
224
-     * Mongoose - Created
225
-     ------------------------------------------------------*/
226
 
126
 
127
+    /*!
128
+     * \brief Multiply vector by this matrix
129
+     * \param v Vector to multiply with
130
+     * \returns resultant vector (mult)
131
+     */
227
     Vector3d operator *(Vector3d v);
132
     Vector3d operator *(Vector3d v);
228
-    /*------------------------------------------------------
229
-     * Pre  : <V> is vector to multiply by this matrix
230
-     * Post : Returns resultant vector ( mult )
231
-     *
232
-     *-- History ------------------------------------------
233
-     *
234
-     * 2002.05.08:
235
-     * Mongoose - Created
236
-     ------------------------------------------------------*/
237
-
238
-
239
-    ////////////////////////////////////////////////////////////
240
-    // Public Mutators
241
-    ////////////////////////////////////////////////////////////
242
 
133
 
134
+    /*!
135
+     * \brief Sets to identity matrix
136
+     */
243
     void setIdentity();
137
     void setIdentity();
244
-    /*------------------------------------------------------
245
-     * Pre  :
246
-     * Post : Sets to identity matrix
247
-     *
248
-     *-- History ------------------------------------------
249
-     *
250
-     * 2002.05.08:
251
-     * Mongoose - Created
252
-     ------------------------------------------------------*/
253
 
138
 
139
+    /*!
140
+     * \brief S et the matrix
141
+     * \fixme dangerous, scary, boo!
142
+     * \param mat new matrix
143
+     */
254
     void setMatrix(matrix_t mat);
144
     void setMatrix(matrix_t mat);
255
-    /*------------------------------------------------------
256
-     * Pre  :
257
-     * Post : Set the matrix ( dangerous, scary boo )
258
-     *
259
-     *-- History ------------------------------------------
260
-     *
261
-     * 2002.05.08:
262
-     * Mongoose - Created
263
-     ------------------------------------------------------*/
264
 
145
 
146
+    /*!
147
+     * \brief Rotate object in 3D space
148
+     * \param x x rotation in radians
149
+     * \param y y rotation in radians
150
+     * \param z z rotation in radians
151
+     */
265
     void rotate(vec_t x, vec_t y, vec_t z);
152
     void rotate(vec_t x, vec_t y, vec_t z);
266
-    /*------------------------------------------------------
267
-     * Pre  : Radian input
268
-     * Post : Rotates object in 3 space
269
-     *
270
-     *-- History ------------------------------------------
271
-     *
272
-     * 2002.05.08:
273
-     * Mongoose - Created
274
-     ------------------------------------------------------*/
275
 
153
 
154
+    /*!
155
+     * \brief Rotate object in 3D space
156
+     * \param xyz rotation in radians
157
+     */
276
     void rotate(const vec_t *xyz);
158
     void rotate(const vec_t *xyz);
277
-    /*------------------------------------------------------
278
-     * Pre  : Rotates object in 3 space, Radian input
279
-     * Post : Returns true on sucess
280
-     *
281
-     *-- History ------------------------------------------
282
-     *
283
-     * 2002.05.08:
284
-     * Mongoose - Created
285
-     ------------------------------------------------------*/
286
 
159
 
160
+    /*!
161
+     * \brief Scale object in 3D space
162
+     * \param x x scaling
163
+     * \param y y scaling
164
+     * \param z z scaling
165
+     */
287
     void scale(vec_t x, vec_t y, vec_t z);
166
     void scale(vec_t x, vec_t y, vec_t z);
288
-    /*------------------------------------------------------
289
-     * Pre  :
290
-     * Post : Scales object in 3 space
291
-     *
292
-     *-- History ------------------------------------------
293
-     *
294
-     * 2002.05.08:
295
-     * Mongoose - Created
296
-     ------------------------------------------------------*/
297
 
167
 
168
+    /*!
169
+     * \brief Scale object in 3D space
170
+     * \param xyz scaling factors
171
+     */
298
     void scale(const vec_t *xyz);
172
     void scale(const vec_t *xyz);
299
-    /*------------------------------------------------------
300
-     * Pre  :
301
-     * Post : Scales object in 3 space
302
-     *
303
-     *-- History ------------------------------------------
304
-     *
305
-     * 2002.05.08:
306
-     * Mongoose - Created
307
-     ------------------------------------------------------*/
308
 
173
 
174
+    /*!
175
+     * \brief Translate (move) object in 3D space
176
+     * \param x x translation
177
+     * \param y y translation
178
+     * \param z z translation
179
+     */
309
     void translate(vec_t x, vec_t y, vec_t z);
180
     void translate(vec_t x, vec_t y, vec_t z);
310
-    /*------------------------------------------------------
311
-     * Pre  :
312
-     * Post : Translates ( moves ) object in 3 space
313
-     *
314
-     *-- History ------------------------------------------
315
-     *
316
-     * 2002.05.08:
317
-     * Mongoose - Created
318
-     ------------------------------------------------------*/
319
 
181
 
182
+    /*!
183
+     * \brief Translate (move) object in 3D space
184
+     * \param xyz translations
185
+     */
320
     void translate(const vec_t *xyz);
186
     void translate(const vec_t *xyz);
321
-    /*------------------------------------------------------
322
-     * Pre  :
323
-     * Post : Translates ( moves ) object in 3 space
324
-     *
325
-     *-- History ------------------------------------------
326
-     *
327
-     * 2002.05.08:
328
-     * Mongoose - Created
329
-     ------------------------------------------------------*/
330
 
187
 
188
+    /*!
189
+     * \brief Transpose this matrix
190
+     */
331
     void transpose();
191
     void transpose();
332
-    /*------------------------------------------------------
333
-     * Pre  :
334
-     * Post : Transpose this matrix
335
-     *
336
-     *-- History ------------------------------------------
337
-     *
338
-     * 2002.05.08:
339
-     * Mongoose - Created
340
-     ------------------------------------------------------*/
341
-
342
-    matrix_t mMatrix;      /* Data model, moved public for faster
343
-                                      external renderer feedback use */
344
-
345
- private:
346
-
347
-    ////////////////////////////////////////////////////////////
348
-    // Private Accessors
349
-    ////////////////////////////////////////////////////////////
350
 
192
 
193
+    matrix_t mMatrix; //!< Data model, moved public for faster external renderer feedback use
351
 
194
 
352
-    ////////////////////////////////////////////////////////////
353
-    // Private Mutators
354
-    ////////////////////////////////////////////////////////////
195
+private:
355
 
196
 
197
+    /*!
198
+     * \brief Copys value from source to dest
199
+     * \param source source
200
+     * \param dest destination
201
+     */
356
     void copy(matrix_t source, matrix_t dest);
202
     void copy(matrix_t source, matrix_t dest);
357
-    /*------------------------------------------------------
358
-     * Pre  :
359
-     * Post : Copys value of source to dest
360
-     *
361
-     *-- History ------------------------------------------
362
-     *
363
-     * 2002.05.08:
364
-     * Mongoose - Created
365
-     ------------------------------------------------------*/
366
 
203
 
204
+    /*!
205
+     * \brief Multiplies matrices a and b. Neither a or b is also the result.
206
+     * \param a first matrix
207
+     * \param b second matrix
208
+     * \param result wil be set to resultant matrix value
209
+     */
367
     void multiply(const matrix_t a, const matrix_t b, matrix_t result);
210
     void multiply(const matrix_t a, const matrix_t b, matrix_t result);
368
-    /*------------------------------------------------------
369
-     * Pre  : Multiplies matrices a and b
370
-     *        Neither a or b is also the result
371
-     *
372
-     * Post : Sets resultant matrix value ( result )
373
-     *
374
-     *-- History ------------------------------------------
375
-     *
376
-     * 2002.05.08:
377
-     * Mongoose - Created
378
-     ------------------------------------------------------*/
379
 };
211
 };
380
 
212
 
381
 #endif
213
 #endif

+ 5
- 74
src/Matrix.cpp Ver arquivo

1
-/* -*- Mode: C++; tab-width: 3; indent-tabs-mode: t; c-basic-offset: 3 -*- */
2
-/*================================================================
1
+/*!
2
+ * \file src/Matrix.cpp
3
+ * \brief 3D Matrix
3
  *
4
  *
4
- * Project : Freyja
5
- * Author  : Terry 'Mongoose' Hendrix II
6
- * Website : http://www.westga.edu/~stu7440/
7
- * Email   : stu7440@westga.edu
8
- * Object  : Matrix
9
- * License : No use w/o permission (C) 2002 Mongoose
10
- * Comments: 3d Matrix class
11
- *
12
- *
13
- *           This file was generated using Mongoose's C++
14
- *           template generator script.  <stu7440@westga.edu>
15
- *
16
- *-- History -------------------------------------------------
17
- *
18
- * 2002.05.11:
19
- * Mongoose - Created
20
- =================================================================*/
5
+ * \author Mongoose
6
+ */
21
 
7
 
22
 #include <stdio.h>
8
 #include <stdio.h>
23
 #include <math.h>
9
 #include <math.h>
24
 
10
 
25
 #include <Matrix.h>
11
 #include <Matrix.h>
26
 
12
 
27
-
28
-////////////////////////////////////////////////////////////
29
-// Constructors
30
-////////////////////////////////////////////////////////////
31
-
32
 Matrix::Matrix()
13
 Matrix::Matrix()
33
 {
14
 {
34
     setIdentity();
15
     setIdentity();
35
 }
16
 }
36
 
17
 
37
-
38
 Matrix::Matrix(matrix_t m)
18
 Matrix::Matrix(matrix_t m)
39
 {
19
 {
40
     setMatrix(m);
20
     setMatrix(m);
41
 }
21
 }
42
 
22
 
43
-
44
 Matrix::Matrix(Quaternion &q)
23
 Matrix::Matrix(Quaternion &q)
45
 {
24
 {
46
     matrix_t m;
25
     matrix_t m;
50
     setMatrix(m);
29
     setMatrix(m);
51
 }
30
 }
52
 
31
 
53
-
54
 Matrix::~Matrix()
32
 Matrix::~Matrix()
55
 {
33
 {
56
 }
34
 }
57
 
35
 
58
-
59
-////////////////////////////////////////////////////////////
60
-// Public Accessors
61
-////////////////////////////////////////////////////////////
62
-
63
-
64
 bool Matrix::getInvert(matrix_t out)
36
 bool Matrix::getInvert(matrix_t out)
65
 {
37
 {
66
     matrix_t m;
38
     matrix_t m;
189
 #undef SWAP_ROWS
161
 #undef SWAP_ROWS
190
 }
162
 }
191
 
163
 
192
-
193
 void Matrix::getMatrix(matrix_t mat)
164
 void Matrix::getMatrix(matrix_t mat)
194
 {
165
 {
195
     copy(mMatrix, mat);
166
     copy(mMatrix, mat);
196
 }
167
 }
197
 
168
 
198
-
199
 void Matrix::getTransposeMatrix(matrix_t m)
169
 void Matrix::getTransposeMatrix(matrix_t m)
200
 {
170
 {
201
     m[ 0]= mMatrix[0]; m[ 1]= mMatrix[4]; m[ 2]= mMatrix[ 8]; m[ 3]=mMatrix[12];
171
     m[ 0]= mMatrix[0]; m[ 1]= mMatrix[4]; m[ 2]= mMatrix[ 8]; m[ 3]=mMatrix[12];
204
     m[12]= mMatrix[3]; m[13]= mMatrix[7]; m[14]= mMatrix[11]; m[15]=mMatrix[15];
174
     m[12]= mMatrix[3]; m[13]= mMatrix[7]; m[14]= mMatrix[11]; m[15]=mMatrix[15];
205
 }
175
 }
206
 
176
 
207
-
208
 Matrix Matrix::multiply(const Matrix &a, const Matrix &b)
177
 Matrix Matrix::multiply(const Matrix &a, const Matrix &b)
209
 {
178
 {
210
     Matrix c;
179
     Matrix c;
211
 
180
 
212
-
213
     multiply(a.mMatrix, b.mMatrix, c.mMatrix);
181
     multiply(a.mMatrix, b.mMatrix, c.mMatrix);
214
 
182
 
215
     return c;
183
     return c;
216
 }
184
 }
217
 
185
 
218
-
219
 Matrix Matrix::operator *(const Matrix &a)
186
 Matrix Matrix::operator *(const Matrix &a)
220
 {
187
 {
221
     return multiply(a, *this);
188
     return multiply(a, *this);
222
 }
189
 }
223
 
190
 
224
-
225
 Vector3d Matrix::operator *(Vector3d v)
191
 Vector3d Matrix::operator *(Vector3d v)
226
 {
192
 {
227
     vec_t x = v.mVec[0], y = v.mVec[1], z = v.mVec[2];
193
     vec_t x = v.mVec[0], y = v.mVec[1], z = v.mVec[2];
228
 
194
 
229
-
230
 #ifdef COLUMN_ORDER
195
 #ifdef COLUMN_ORDER
231
     // Column order
196
     // Column order
232
     return Vector3d(mMatrix[0]*x + mMatrix[4]*y + mMatrix[ 8]*z + mMatrix[12],
197
     return Vector3d(mMatrix[0]*x + mMatrix[4]*y + mMatrix[ 8]*z + mMatrix[12],
240
 #endif
205
 #endif
241
 }
206
 }
242
 
207
 
243
-
244
 void Matrix::multiply3v(vec3_t v, vec3_t result)
208
 void Matrix::multiply3v(vec3_t v, vec3_t result)
245
 {
209
 {
246
     vec_t x = v[0], y = v[1], z = v[2];
210
     vec_t x = v[0], y = v[1], z = v[2];
247
 
211
 
248
-
249
     result[0] = mMatrix[0]*x + mMatrix[1]*y + mMatrix[ 2]*z + mMatrix[ 3];
212
     result[0] = mMatrix[0]*x + mMatrix[1]*y + mMatrix[ 2]*z + mMatrix[ 3];
250
     result[1] = mMatrix[4]*x + mMatrix[5]*y + mMatrix[ 6]*z + mMatrix[ 7];
213
     result[1] = mMatrix[4]*x + mMatrix[5]*y + mMatrix[ 6]*z + mMatrix[ 7];
251
     result[2] = mMatrix[8]*x + mMatrix[9]*y + mMatrix[10]*z + mMatrix[11];
214
     result[2] = mMatrix[8]*x + mMatrix[9]*y + mMatrix[10]*z + mMatrix[11];
252
 }
215
 }
253
 
216
 
254
-
255
 void Matrix::multiply4d(double *v, double *result)
217
 void Matrix::multiply4d(double *v, double *result)
256
 {
218
 {
257
     double x = v[0], y = v[1], z = v[2], w = v[3];
219
     double x = v[0], y = v[1], z = v[2], w = v[3];
258
 
220
 
259
-
260
     result[0] = mMatrix[ 0]*x + mMatrix[ 1]*y + mMatrix[ 2]*z + mMatrix[ 3]*w;
221
     result[0] = mMatrix[ 0]*x + mMatrix[ 1]*y + mMatrix[ 2]*z + mMatrix[ 3]*w;
261
     result[1] = mMatrix[ 4]*x + mMatrix[ 5]*y + mMatrix[ 6]*z + mMatrix[ 7]*w;
222
     result[1] = mMatrix[ 4]*x + mMatrix[ 5]*y + mMatrix[ 6]*z + mMatrix[ 7]*w;
262
     result[2] = mMatrix[ 8]*x + mMatrix[ 9]*y + mMatrix[10]*z + mMatrix[11]*w;
223
     result[2] = mMatrix[ 8]*x + mMatrix[ 9]*y + mMatrix[10]*z + mMatrix[11]*w;
263
     result[3] = mMatrix[12]*x + mMatrix[13]*y + mMatrix[14]*z + mMatrix[15]*w;
224
     result[3] = mMatrix[12]*x + mMatrix[13]*y + mMatrix[14]*z + mMatrix[15]*w;
264
 }
225
 }
265
 
226
 
266
-
267
 void Matrix::multiply4v(vec4_t v, vec4_t result)
227
 void Matrix::multiply4v(vec4_t v, vec4_t result)
268
 {
228
 {
269
     vec_t x = v[0], y = v[1], z = v[2], w = v[3];
229
     vec_t x = v[0], y = v[1], z = v[2], w = v[3];
270
 
230
 
271
-
272
     result[0] = mMatrix[ 0]*x + mMatrix[ 1]*y + mMatrix[ 2]*z + mMatrix[ 3]*w;
231
     result[0] = mMatrix[ 0]*x + mMatrix[ 1]*y + mMatrix[ 2]*z + mMatrix[ 3]*w;
273
     result[1] = mMatrix[ 4]*x + mMatrix[ 5]*y + mMatrix[ 6]*z + mMatrix[ 7]*w;
232
     result[1] = mMatrix[ 4]*x + mMatrix[ 5]*y + mMatrix[ 6]*z + mMatrix[ 7]*w;
274
     result[2] = mMatrix[ 8]*x + mMatrix[ 9]*y + mMatrix[10]*z + mMatrix[11]*w;
233
     result[2] = mMatrix[ 8]*x + mMatrix[ 9]*y + mMatrix[10]*z + mMatrix[11]*w;
275
     result[3] = mMatrix[12]*x + mMatrix[13]*y + mMatrix[14]*z + mMatrix[15]*w;
234
     result[3] = mMatrix[12]*x + mMatrix[13]*y + mMatrix[14]*z + mMatrix[15]*w;
276
 }
235
 }
277
 
236
 
278
-
279
 void Matrix::print()
237
 void Matrix::print()
280
 {
238
 {
281
 #ifdef COLUMN_ORDER
239
 #ifdef COLUMN_ORDER
293
 #endif
251
 #endif
294
 }
252
 }
295
 
253
 
296
-
297
 bool Matrix::isIdentity()
254
 bool Matrix::isIdentity()
298
 {
255
 {
299
     // Hhhmm... floating point using direct comparisions
256
     // Hhhmm... floating point using direct comparisions
308
     return false;
265
     return false;
309
 }
266
 }
310
 
267
 
311
-
312
-////////////////////////////////////////////////////////////
313
-// Public Mutators
314
-////////////////////////////////////////////////////////////
315
-
316
 void Matrix::setMatrix(matrix_t mat)
268
 void Matrix::setMatrix(matrix_t mat)
317
 {
269
 {
318
     copy(mat, mMatrix);
270
     copy(mat, mMatrix);
319
 }
271
 }
320
 
272
 
321
-
322
 void Matrix::setIdentity()
273
 void Matrix::setIdentity()
323
 {
274
 {
324
     mMatrix[ 0] = 1; mMatrix[ 1] = 0; mMatrix[ 2] = 0; mMatrix[ 3] = 0;
275
     mMatrix[ 0] = 1; mMatrix[ 1] = 0; mMatrix[ 2] = 0; mMatrix[ 3] = 0;
327
     mMatrix[12] = 0; mMatrix[13] = 0; mMatrix[14] = 0; mMatrix[15] = 1;
278
     mMatrix[12] = 0; mMatrix[13] = 0; mMatrix[14] = 0; mMatrix[15] = 1;
328
 }
279
 }
329
 
280
 
330
-
331
 void Matrix::scale(const vec_t *xyz)
281
 void Matrix::scale(const vec_t *xyz)
332
 {
282
 {
333
     scale(xyz[0], xyz[1], xyz[2]);
283
     scale(xyz[0], xyz[1], xyz[2]);
334
 }
284
 }
335
 
285
 
336
-
337
 void Matrix::scale(vec_t sx, vec_t sy, vec_t sz)
286
 void Matrix::scale(vec_t sx, vec_t sy, vec_t sz)
338
 {
287
 {
339
     matrix_t smatrix;
288
     matrix_t smatrix;
340
     matrix_t tmp;
289
     matrix_t tmp;
341
 
290
 
342
-
343
     smatrix[ 0] = sx;smatrix[ 1] = 0; smatrix[ 2] = 0; smatrix[ 3] = 0;
291
     smatrix[ 0] = sx;smatrix[ 1] = 0; smatrix[ 2] = 0; smatrix[ 3] = 0;
344
     smatrix[ 4] = 0; smatrix[ 5] = sy;smatrix[ 6] = 0; smatrix[ 7] = 0;
292
     smatrix[ 4] = 0; smatrix[ 5] = sy;smatrix[ 6] = 0; smatrix[ 7] = 0;
345
     smatrix[ 8] = 0; smatrix[ 9] = 0; smatrix[10] = sz;smatrix[11] = 0;
293
     smatrix[ 8] = 0; smatrix[ 9] = 0; smatrix[10] = sz;smatrix[11] = 0;
349
     multiply(tmp, smatrix, mMatrix);
297
     multiply(tmp, smatrix, mMatrix);
350
 }
298
 }
351
 
299
 
352
-
353
 void Matrix::rotate(const vec_t *xyz)
300
 void Matrix::rotate(const vec_t *xyz)
354
 {
301
 {
355
     rotate(xyz[0], xyz[1], xyz[2]);
302
     rotate(xyz[0], xyz[1], xyz[2]);
356
 }
303
 }
357
 
304
 
358
-
359
 void Matrix::rotate(vec_t ax, vec_t ay, vec_t az)
305
 void Matrix::rotate(vec_t ax, vec_t ay, vec_t az)
360
 {
306
 {
361
     matrix_t xmat, ymat, zmat, tmp, tmp2;
307
     matrix_t xmat, ymat, zmat, tmp, tmp2;
362
 
308
 
363
-
364
     xmat[ 0]=1;        xmat[ 1]=0;        xmat[ 2]=0;        xmat[ 3]=0;
309
     xmat[ 0]=1;        xmat[ 1]=0;        xmat[ 2]=0;        xmat[ 3]=0;
365
     xmat[ 4]=0;        xmat[ 5]=cos(ax);  xmat[ 6]=sin(ax);  xmat[ 7]=0;
310
     xmat[ 4]=0;        xmat[ 5]=cos(ax);  xmat[ 6]=sin(ax);  xmat[ 7]=0;
366
     xmat[ 8]=0;        xmat[ 9]=-sin(ax); xmat[10]=cos(ax);  xmat[11]=0;
311
     xmat[ 8]=0;        xmat[ 9]=-sin(ax); xmat[10]=cos(ax);  xmat[11]=0;
381
     multiply(tmp2, zmat, mMatrix);
326
     multiply(tmp2, zmat, mMatrix);
382
 }
327
 }
383
 
328
 
384
-
385
 void Matrix::translate(const vec_t *xyz)
329
 void Matrix::translate(const vec_t *xyz)
386
 {
330
 {
387
     translate(xyz[0], xyz[1], xyz[2]);
331
     translate(xyz[0], xyz[1], xyz[2]);
388
 }
332
 }
389
 
333
 
390
-
391
 void Matrix::translate(vec_t tx, vec_t ty, vec_t tz)
334
 void Matrix::translate(vec_t tx, vec_t ty, vec_t tz)
392
 {
335
 {
393
     matrix_t tmat, tmp;
336
     matrix_t tmat, tmp;
394
 
337
 
395
-
396
     tmat[ 0]=1;  tmat[ 1]=0;  tmat[ 2]=0;  tmat[ 3]=0;
338
     tmat[ 0]=1;  tmat[ 1]=0;  tmat[ 2]=0;  tmat[ 3]=0;
397
     tmat[ 4]=0;  tmat[ 5]=1;  tmat[ 6]=0;  tmat[ 7]=0;
339
     tmat[ 4]=0;  tmat[ 5]=1;  tmat[ 6]=0;  tmat[ 7]=0;
398
     tmat[ 8]=0;  tmat[ 9]=0;  tmat[10]=1;  tmat[11]=0;
340
     tmat[ 8]=0;  tmat[ 9]=0;  tmat[10]=1;  tmat[11]=0;
402
     multiply(tmp, tmat, mMatrix);
344
     multiply(tmp, tmat, mMatrix);
403
 }
345
 }
404
 
346
 
405
-
406
-////////////////////////////////////////////////////////////
407
-// Private Accessors
408
-////////////////////////////////////////////////////////////
409
-
410
-
411
-////////////////////////////////////////////////////////////
412
-// Private Mutators
413
-////////////////////////////////////////////////////////////
414
-
415
 void Matrix::copy(matrix_t source, matrix_t dest)
347
 void Matrix::copy(matrix_t source, matrix_t dest)
416
 {
348
 {
417
 #ifdef FASTER_MATRIX
349
 #ifdef FASTER_MATRIX
439
 #endif
371
 #endif
440
 }
372
 }
441
 
373
 
442
-
443
 void Matrix::multiply(const matrix_t a, const matrix_t b, matrix_t result)
374
 void Matrix::multiply(const matrix_t a, const matrix_t b, matrix_t result)
444
 {
375
 {
445
     /* Generated code for matrix mult
376
     /* Generated code for matrix mult

Carregando…
Cancelar
Salvar