rev |
line source |
nuclear@0
|
1 #ifndef _N3DMATH_H_
|
nuclear@0
|
2 #define _N3DMATH_H_
|
nuclear@0
|
3
|
nuclear@0
|
4 // - n3dmath.h -
|
nuclear@0
|
5 // Nuc3D 2 Header File
|
nuclear@0
|
6 // written by: John Tsiombikas (10 Sep 2002)
|
nuclear@0
|
7 // Last Modification: 14 April 2002
|
nuclear@0
|
8 // ---------------------------
|
nuclear@0
|
9 // Mathematical stuff
|
nuclear@0
|
10
|
nuclear@0
|
11 #include <iostream>
|
nuclear@0
|
12 #include <cmath>
|
nuclear@0
|
13
|
nuclear@0
|
14 #ifdef NUC3D_VER_DIRECT3D
|
nuclear@0
|
15 #include "d3d8.h" // Direct3D type definitions (D3DMATRIX)
|
nuclear@0
|
16 #endif //NUC3D_VER_DIRECT3D
|
nuclear@0
|
17
|
nuclear@0
|
18 // forward declarations
|
nuclear@0
|
19 class Matrix4x4;
|
nuclear@0
|
20 class Matrix3x3;
|
nuclear@0
|
21 class Vector3;
|
nuclear@0
|
22 class Vector2;
|
nuclear@0
|
23 class Vector4;
|
nuclear@0
|
24 class Quaternion;
|
nuclear@0
|
25
|
nuclear@0
|
26 // mathematical constants
|
nuclear@0
|
27 const float Pi = 3.1415926535897932f;
|
nuclear@0
|
28 const float TwoPi = 6.2831853071795865f;// Pi * 2.0f;
|
nuclear@0
|
29 const float HalfPi = 1.5707963267948965f; //Pi * 0.5f;
|
nuclear@0
|
30 const float QuarterPi = 0.7853981633974483f; //Pi * 0.25f;
|
nuclear@0
|
31 const float ThreeQuartersPi = 2.3561944901923450f; //QuarterPi * 3.0f;
|
nuclear@0
|
32
|
nuclear@0
|
33 const float XSmallNumber = 1.e-8f;
|
nuclear@0
|
34 const float SmallNumber = 1.e-4f;
|
nuclear@0
|
35
|
nuclear@0
|
36 // basis vectors
|
nuclear@0
|
37 #define VECTOR3_I (Vector3(1.0f, 0.0f, 0.0f))
|
nuclear@0
|
38 #define VECTOR3_J (Vector3(0.0f, 1.0f, 0.0f))
|
nuclear@0
|
39 #define VECTOR3_K (Vector3(0.0f, 0.0f, 1.0f))
|
nuclear@0
|
40
|
nuclear@0
|
41 #define VECTOR2_I (Vector2(1.0f, 0.0f))
|
nuclear@0
|
42 #define VECTOR2_J (Vector2(0.0f, 1.0f))
|
nuclear@0
|
43
|
nuclear@0
|
44 // angle conversion
|
nuclear@0
|
45 #define DEGTORAD(a) (Pi * (a) / 180)
|
nuclear@0
|
46 #define RADTODEG(a) ((a) * 180 / Pi)
|
nuclear@0
|
47
|
nuclear@0
|
48
|
nuclear@0
|
49
|
nuclear@0
|
50 // ------------- Vector3 class -------------
|
nuclear@0
|
51
|
nuclear@0
|
52 #ifdef NUC3D_VER_DIRECT3D // if we are using Direct3D version
|
nuclear@0
|
53
|
nuclear@0
|
54 class Vector3 : public D3DVECTOR {
|
nuclear@0
|
55 public:
|
nuclear@0
|
56
|
nuclear@0
|
57 #else // not D3D
|
nuclear@0
|
58
|
nuclear@0
|
59 class Vector3 {
|
nuclear@0
|
60 public:
|
nuclear@0
|
61 float x, y, z;
|
nuclear@0
|
62
|
nuclear@0
|
63 #endif //NUC3D_VER_DIRECT3D
|
nuclear@0
|
64
|
nuclear@0
|
65 Vector3();
|
nuclear@0
|
66 Vector3(float x, float y, float z);
|
nuclear@0
|
67
|
nuclear@0
|
68 inline float DotProduct(const Vector3 &vec) const;
|
nuclear@0
|
69 inline Vector3 CrossProduct(const Vector3 &vec) const;
|
nuclear@0
|
70
|
nuclear@0
|
71 inline Vector3 operator +(const Vector3 &vec) const;
|
nuclear@0
|
72 inline Vector3 operator -(const Vector3 &vec) const;
|
nuclear@0
|
73 inline Vector3 operator *(float scalar) const;
|
nuclear@0
|
74 inline Vector3 operator /(float scalar) const;
|
nuclear@0
|
75 inline void operator +=(const Vector3 &vec);
|
nuclear@0
|
76 inline void operator -=(const Vector3 &vec);
|
nuclear@0
|
77 inline void operator *=(float scalar);
|
nuclear@0
|
78 inline void operator /=(float scalar);
|
nuclear@0
|
79 inline Vector3 operator -() const; // unary minus for inversion
|
nuclear@0
|
80
|
nuclear@0
|
81 inline bool operator >(const Vector3 &vec) const;
|
nuclear@0
|
82 inline bool operator <(const Vector3 &vec) const;
|
nuclear@0
|
83 inline bool operator >(float len) const;
|
nuclear@0
|
84 inline bool operator <(float len) const;
|
nuclear@0
|
85 inline bool operator ==(const Vector3 &vec) const;
|
nuclear@0
|
86 inline bool operator ==(float len) const;
|
nuclear@0
|
87
|
nuclear@0
|
88 inline operator Vector2() const;
|
nuclear@0
|
89 inline operator Vector4() const;
|
nuclear@0
|
90
|
nuclear@0
|
91 inline float Length() const;
|
nuclear@0
|
92 inline float LengthSq() const;
|
nuclear@0
|
93
|
nuclear@0
|
94 inline void Normalize();
|
nuclear@0
|
95 inline Vector3 Normalized() const;
|
nuclear@0
|
96
|
nuclear@0
|
97 inline Vector3 Reflection(const Vector3 &normal) const;
|
nuclear@0
|
98 Vector3 Refraction(const Vector3 &normal, float FromIOR, float ToIOR) const;
|
nuclear@0
|
99
|
nuclear@0
|
100 void Transform(const Matrix4x4 &mat); // transform a vector using a transformation matrix
|
nuclear@0
|
101 void Transform(const Quaternion &quat); // transform by a quaternion
|
nuclear@0
|
102
|
nuclear@0
|
103 // Direct transformations on the vector
|
nuclear@0
|
104 void Translate(float x, float y, float z);
|
nuclear@0
|
105 void Rotate(float x, float y, float z);
|
nuclear@0
|
106 void Rotate(const Vector3 &axis, float angle);
|
nuclear@0
|
107 void Scale(float x, float y, float z);
|
nuclear@0
|
108
|
nuclear@0
|
109 float &operator [](int index);
|
nuclear@0
|
110
|
nuclear@0
|
111 friend std::ostream &operator <<(std::ostream &out, const Vector3 &vec);
|
nuclear@0
|
112 };
|
nuclear@0
|
113
|
nuclear@0
|
114 inline float DotProduct(const Vector3 &vec1, const Vector3 &vec2);
|
nuclear@0
|
115 inline Vector3 CrossProduct(const Vector3 &vec1, const Vector3 &vec2);
|
nuclear@0
|
116
|
nuclear@0
|
117 ////////////////////// 4-dimensional vectors ////////////////////////////
|
nuclear@0
|
118 class Vector4 {
|
nuclear@0
|
119 public:
|
nuclear@0
|
120 float x, y, z, w;
|
nuclear@0
|
121
|
nuclear@0
|
122 Vector4();
|
nuclear@0
|
123 Vector4(const Vector4 &vec);
|
nuclear@0
|
124 Vector4(const Vector3 &vec); // create from a 3 dimensional vector setting w=1
|
nuclear@0
|
125 Vector4(float x, float y, float z, float w);
|
nuclear@0
|
126
|
nuclear@0
|
127 float DotProduct(const Vector4 &vec) const;
|
nuclear@0
|
128 Vector4 CrossProduct(const Vector4 &vec1, const Vector4 &vec2) const;
|
nuclear@0
|
129
|
nuclear@0
|
130 Vector4 operator +(const Vector4 &vec) const;
|
nuclear@0
|
131 Vector4 operator -(const Vector4 &vec) const;
|
nuclear@0
|
132 Vector4 operator *(float scalar) const;
|
nuclear@0
|
133 Vector4 operator /(float scalar) const;
|
nuclear@0
|
134 void operator +=(const Vector4 &vec);
|
nuclear@0
|
135 void operator -=(const Vector4 &vec);
|
nuclear@0
|
136 void operator *=(float scalar);
|
nuclear@0
|
137 void operator /=(float scalar);
|
nuclear@0
|
138 Vector4 operator -() const; // unary minus for inversion
|
nuclear@0
|
139
|
nuclear@0
|
140 bool operator >(const Vector4 &vec) const;
|
nuclear@0
|
141 bool operator <(const Vector4 &vec) const;
|
nuclear@0
|
142 bool operator >(float len) const;
|
nuclear@0
|
143 bool operator <(float len) const;
|
nuclear@0
|
144 bool operator ==(const Vector4 &vec) const;
|
nuclear@0
|
145 bool operator ==(float len) const;
|
nuclear@0
|
146
|
nuclear@0
|
147 operator Vector3() const;
|
nuclear@0
|
148
|
nuclear@0
|
149 float Length() const;
|
nuclear@0
|
150 float LengthSq() const;
|
nuclear@0
|
151
|
nuclear@0
|
152 void Normalize();
|
nuclear@0
|
153 Vector4 Normalized() const;
|
nuclear@0
|
154
|
nuclear@0
|
155 void Transform(const Matrix4x4 &mat); // transform a vector using a transformation matrix
|
nuclear@0
|
156
|
nuclear@0
|
157 // Direct transformations on the vector
|
nuclear@0
|
158 void Translate(float x, float y, float z, float w);
|
nuclear@0
|
159 void Rotate(float x, float y, float z);
|
nuclear@0
|
160 void Rotate(const Vector3 &axis, float angle);
|
nuclear@0
|
161 void Scale(float x, float y, float z, float w);
|
nuclear@0
|
162
|
nuclear@0
|
163 float &operator [](int index);
|
nuclear@0
|
164
|
nuclear@0
|
165 friend std::ostream &operator <<(std::ostream &out, const Vector3 &vec);
|
nuclear@0
|
166 };
|
nuclear@0
|
167
|
nuclear@0
|
168 float DotProduct(const Vector4 &vec1, const Vector4 &vec2);
|
nuclear@0
|
169 Vector4 CrossProduct(const Vector4 &vec1, const Vector4 &vec2, const Vector4 &vec3);
|
nuclear@0
|
170
|
nuclear@0
|
171 ///////////////////////////
|
nuclear@0
|
172
|
nuclear@0
|
173 class Vector2 {
|
nuclear@0
|
174 public:
|
nuclear@0
|
175 float x, y;
|
nuclear@0
|
176
|
nuclear@0
|
177 Vector2();
|
nuclear@0
|
178 Vector2(const Vector2 &vec);
|
nuclear@0
|
179 Vector2(float x, float y);
|
nuclear@0
|
180
|
nuclear@0
|
181 float DotProduct(const Vector2 &vec) const;
|
nuclear@0
|
182 //Vector2 CrossProduct(const Vector2 &vec) const;
|
nuclear@0
|
183
|
nuclear@0
|
184 Vector2 operator +(const Vector2 &vec) const;
|
nuclear@0
|
185 Vector2 operator -(const Vector2 &vec) const;
|
nuclear@0
|
186 Vector2 operator *(float scalar) const;
|
nuclear@0
|
187 Vector2 operator /(float scalar) const;
|
nuclear@0
|
188 void operator +=(const Vector2 &vec);
|
nuclear@0
|
189 void operator -=(const Vector2 &vec);
|
nuclear@0
|
190 void operator *=(float scalar);
|
nuclear@0
|
191 void operator /=(float scalar);
|
nuclear@0
|
192 Vector2 operator -() const; // unary minus for inversion
|
nuclear@0
|
193
|
nuclear@0
|
194 bool operator >(const Vector2 &vec) const;
|
nuclear@0
|
195 bool operator <(const Vector2 &vec) const;
|
nuclear@0
|
196 bool operator >(float len) const;
|
nuclear@0
|
197 bool operator <(float len) const;
|
nuclear@0
|
198 bool operator ==(const Vector2 &vec) const;
|
nuclear@0
|
199 bool operator ==(float len) const;
|
nuclear@0
|
200
|
nuclear@0
|
201 operator Vector3() const;
|
nuclear@0
|
202
|
nuclear@0
|
203 float Length() const;
|
nuclear@0
|
204 float LengthSq() const;
|
nuclear@0
|
205
|
nuclear@0
|
206 void Normalize();
|
nuclear@0
|
207 Vector2 Normalized() const;
|
nuclear@0
|
208
|
nuclear@0
|
209 Vector2 Reflection(const Vector2 &normal) const;
|
nuclear@0
|
210 Vector2 Refraction(const Vector2 &normal, float FromIOR, float ToIOR) const;
|
nuclear@0
|
211
|
nuclear@0
|
212 void Transform(const Matrix3x3 &mat); // transform a vector using a transformation matrix
|
nuclear@0
|
213
|
nuclear@0
|
214 // Direct transformations on the vector
|
nuclear@0
|
215 void Translate(float x, float y);
|
nuclear@0
|
216 void Rotate(float angle);
|
nuclear@0
|
217 void Scale(float x, float y);
|
nuclear@0
|
218
|
nuclear@0
|
219 float &operator [](int index);
|
nuclear@0
|
220
|
nuclear@0
|
221 friend std::ostream &operator <<(std::ostream &out, const Vector2 &vec);
|
nuclear@0
|
222 };
|
nuclear@0
|
223
|
nuclear@0
|
224 float DotProduct(const Vector3 &vec1, const Vector3 &vec2);
|
nuclear@0
|
225
|
nuclear@0
|
226
|
nuclear@0
|
227 struct Vector2i {
|
nuclear@0
|
228 int x, y;
|
nuclear@0
|
229
|
nuclear@0
|
230 Vector2i(int x=0, int y=0) {this->x = x; this->y = y;}
|
nuclear@0
|
231 };
|
nuclear@0
|
232
|
nuclear@0
|
233
|
nuclear@0
|
234 ////////////////// Quaternion ///////////////////////
|
nuclear@0
|
235
|
nuclear@0
|
236 class Quaternion {
|
nuclear@0
|
237 public:
|
nuclear@0
|
238 float s;
|
nuclear@0
|
239 Vector3 v;
|
nuclear@0
|
240
|
nuclear@0
|
241 Quaternion();
|
nuclear@0
|
242 Quaternion(float s, const Vector3 &v);
|
nuclear@0
|
243 Quaternion(float s, float x, float y, float z);
|
nuclear@0
|
244
|
nuclear@0
|
245 Quaternion operator +(const Quaternion &quat) const;
|
nuclear@0
|
246 Quaternion operator -(const Quaternion &quat) const;
|
nuclear@0
|
247 Quaternion operator -() const;
|
nuclear@0
|
248 Quaternion operator *(const Quaternion &quat) const;
|
nuclear@0
|
249
|
nuclear@0
|
250 void operator +=(const Quaternion &quat);
|
nuclear@0
|
251 void operator -=(const Quaternion &quat);
|
nuclear@0
|
252 void operator *=(const Quaternion &quat);
|
nuclear@0
|
253
|
nuclear@0
|
254 void ResetIdentity();
|
nuclear@0
|
255
|
nuclear@0
|
256 Quaternion Conjugate() const;
|
nuclear@0
|
257
|
nuclear@0
|
258 float Length() const;
|
nuclear@0
|
259 float LengthSq() const;
|
nuclear@0
|
260
|
nuclear@0
|
261 void Normalize();
|
nuclear@0
|
262 Quaternion Normalized() const;
|
nuclear@0
|
263
|
nuclear@0
|
264 Quaternion Inverse() const;
|
nuclear@0
|
265
|
nuclear@0
|
266 void SetRotation(const Vector3 &axis, float angle);
|
nuclear@0
|
267 void Rotate(const Vector3 &axis, float angle);
|
nuclear@0
|
268
|
nuclear@0
|
269 Matrix3x3 GetRotationMatrix() const;
|
nuclear@0
|
270 };
|
nuclear@0
|
271
|
nuclear@0
|
272
|
nuclear@0
|
273
|
nuclear@0
|
274 ////////////////////////// Matrices //////////////////////////////
|
nuclear@0
|
275
|
nuclear@0
|
276 #ifdef NUC3D_VER_DIRECT3D // if we are using Direct3D version
|
nuclear@0
|
277
|
nuclear@0
|
278 class Matrix4x4 : public D3DMATRIX {
|
nuclear@0
|
279 public:
|
nuclear@0
|
280
|
nuclear@0
|
281 #else // Software or OpenGL version
|
nuclear@0
|
282
|
nuclear@0
|
283 class Matrix4x4 {
|
nuclear@0
|
284 public:
|
nuclear@0
|
285 float m[4][4];
|
nuclear@0
|
286
|
nuclear@0
|
287 #endif //NUC3D_VER_DIRECT3D
|
nuclear@0
|
288
|
nuclear@0
|
289 Matrix4x4();
|
nuclear@0
|
290 Matrix4x4(const Matrix4x4 &mat);
|
nuclear@0
|
291 Matrix4x4(const Matrix3x3 &mat);
|
nuclear@0
|
292 Matrix4x4( float m00, float m01, float m02, float m03,
|
nuclear@0
|
293 float m10, float m11, float m12, float m13,
|
nuclear@0
|
294 float m20, float m21, float m22, float m23,
|
nuclear@0
|
295 float m30, float m31, float m32, float m33 );
|
nuclear@0
|
296
|
nuclear@0
|
297 // basic operations on matrices
|
nuclear@0
|
298 Matrix4x4 operator +(const Matrix4x4 &mat) const;
|
nuclear@0
|
299 Matrix4x4 operator -(const Matrix4x4 &mat) const;
|
nuclear@0
|
300 Matrix4x4 operator *(const Matrix4x4 &mat) const;
|
nuclear@0
|
301 Matrix4x4 operator *(float scalar) const;
|
nuclear@0
|
302 void operator +=(const Matrix4x4 &mat);
|
nuclear@0
|
303 void operator -=(const Matrix4x4 &mat);
|
nuclear@0
|
304 void operator *=(const Matrix4x4 &mat);
|
nuclear@0
|
305 void operator *=(float scalar);
|
nuclear@0
|
306
|
nuclear@0
|
307 void ResetIdentity();
|
nuclear@0
|
308
|
nuclear@0
|
309 // concatenate various transformation matrices with our current matrix
|
nuclear@0
|
310 void Translate(float x, float y, float z);
|
nuclear@0
|
311 void Rotate(float x, float y, float z);
|
nuclear@0
|
312 void Rotate(const Vector3 &axis, float rads);
|
nuclear@0
|
313 void Scale(float x, float y, float z);
|
nuclear@0
|
314
|
nuclear@0
|
315 // set the matrix to a specific transformation matrix
|
nuclear@0
|
316 void SetTranslation(float x, float y, float z);
|
nuclear@0
|
317 void SetRotation(float x, float y, float z);
|
nuclear@0
|
318 void SetRotation(const Vector3 &axis, float angle);
|
nuclear@0
|
319 void SetScaling(float x, float y, float z);
|
nuclear@0
|
320
|
nuclear@0
|
321 // row and column accessors
|
nuclear@0
|
322 void SetColumnVector(const Vector4 &vec, int columnindex);
|
nuclear@0
|
323 void SetRowVector(const Vector4 &vec, int rowindex);
|
nuclear@0
|
324 Vector4 GetColumnVector(int columnindex) const;
|
nuclear@0
|
325 Vector4 GetRowVector(int rowindex) const;
|
nuclear@0
|
326
|
nuclear@0
|
327 // other operations on matrices
|
nuclear@0
|
328 void Transpose();
|
nuclear@0
|
329 Matrix4x4 Transposed() const;
|
nuclear@0
|
330
|
nuclear@0
|
331 float Determinant() const;
|
nuclear@0
|
332 Matrix4x4 Adjoint() const;
|
nuclear@0
|
333 Matrix4x4 Inverse() const;
|
nuclear@0
|
334 };
|
nuclear@0
|
335
|
nuclear@0
|
336
|
nuclear@0
|
337 ////////////////// Matrix3x3 //////////////////
|
nuclear@0
|
338 class Matrix3x3 {
|
nuclear@0
|
339 public:
|
nuclear@0
|
340 float m[3][3];
|
nuclear@0
|
341
|
nuclear@0
|
342 Matrix3x3();
|
nuclear@0
|
343 Matrix3x3(const Matrix3x3 &mat);
|
nuclear@0
|
344 Matrix3x3( float m00, float m01, float m02,
|
nuclear@0
|
345 float m10, float m11, float m12,
|
nuclear@0
|
346 float m20, float m21, float m22 );
|
nuclear@0
|
347
|
nuclear@0
|
348 // basic operations on matrices
|
nuclear@0
|
349 Matrix3x3 operator +(const Matrix3x3 &mat) const;
|
nuclear@0
|
350 Matrix3x3 operator -(const Matrix3x3 &mat) const;
|
nuclear@0
|
351 Matrix3x3 operator *(const Matrix3x3 &mat) const;
|
nuclear@0
|
352 Matrix3x3 operator *(float scalar) const;
|
nuclear@0
|
353 void operator +=(const Matrix3x3 &mat);
|
nuclear@0
|
354 void operator -=(const Matrix3x3 &mat);
|
nuclear@0
|
355 void operator *=(const Matrix3x3 &mat);
|
nuclear@0
|
356 void operator *=(float scalar);
|
nuclear@0
|
357
|
nuclear@0
|
358 void ResetIdentity();
|
nuclear@0
|
359
|
nuclear@0
|
360 // concatenate various transformation matrices with our current matrix
|
nuclear@0
|
361 void Translate(float x, float y);
|
nuclear@0
|
362 void Rotate(float angle);
|
nuclear@0
|
363 void Scale(float x, float y);
|
nuclear@0
|
364
|
nuclear@0
|
365 // set the matrix to a specific transformation matrix
|
nuclear@0
|
366 void SetTranslation(float x, float y);
|
nuclear@0
|
367 void SetRotation(float angle);
|
nuclear@0
|
368 void SetScaling(float x, float y);
|
nuclear@0
|
369
|
nuclear@0
|
370 // row and column accessors
|
nuclear@0
|
371 void SetColumnVector(const Vector3 &vec, int columnindex);
|
nuclear@0
|
372 void SetRowVector(const Vector3 &vec, int rowindex);
|
nuclear@0
|
373 Vector3 GetColumnVector(int columnindex) const;
|
nuclear@0
|
374 Vector3 GetRowVector(int rowindex) const;
|
nuclear@0
|
375
|
nuclear@0
|
376 // other operations on matrices
|
nuclear@0
|
377 void Transpose();
|
nuclear@0
|
378 Matrix3x3 Transposed() const;
|
nuclear@0
|
379
|
nuclear@0
|
380 void OrthoNormalize();
|
nuclear@0
|
381 Matrix3x3 OrthoNormalized();
|
nuclear@0
|
382
|
nuclear@0
|
383 //float Determinant() const; // NYI
|
nuclear@0
|
384 //Matrix3x3 Adjoint() const;
|
nuclear@0
|
385 //Matrix3x3 Inverse() const;
|
nuclear@0
|
386 };
|
nuclear@0
|
387
|
nuclear@0
|
388 ///////////////// ray /////////////////
|
nuclear@0
|
389
|
nuclear@0
|
390 class Ray {
|
nuclear@0
|
391 public:
|
nuclear@0
|
392 Vector3 Origin;
|
nuclear@0
|
393 Vector3 Direction;
|
nuclear@0
|
394 float Energy;
|
nuclear@0
|
395 float CurrentIOR;
|
nuclear@0
|
396
|
nuclear@0
|
397 Ray();
|
nuclear@0
|
398 Ray(const Vector3 &origin, const Vector3 &direction);
|
nuclear@0
|
399 };
|
nuclear@0
|
400
|
nuclear@0
|
401 // a coordinate system basis
|
nuclear@0
|
402 class Base {
|
nuclear@0
|
403 public:
|
nuclear@0
|
404 Vector3 i, j, k;
|
nuclear@0
|
405
|
nuclear@0
|
406 Base();
|
nuclear@0
|
407 Base(const Vector3 &i, const Vector3 &j, const Vector3 &k);
|
nuclear@0
|
408 Base(const Vector3 &dir, bool LeftHanded=true);
|
nuclear@0
|
409
|
nuclear@0
|
410 void Rotate(float x, float y, float z);
|
nuclear@0
|
411 void Rotate(const Vector3 &axis, float angle);
|
nuclear@0
|
412 void Rotate(const Matrix4x4 &mat);
|
nuclear@0
|
413 void Rotate(const Quaternion &quat);
|
nuclear@0
|
414
|
nuclear@0
|
415 Matrix3x3 CreateRotationMatrix() const;
|
nuclear@0
|
416 };
|
nuclear@0
|
417
|
nuclear@0
|
418
|
nuclear@0
|
419
|
nuclear@0
|
420 float frand(float range);
|
nuclear@0
|
421
|
nuclear@0
|
422
|
nuclear@0
|
423 #include "n3dmath.inl"
|
nuclear@0
|
424
|
nuclear@0
|
425 #endif // _N3DMATH_H_ |