rev |
line source |
nuclear@0
|
1 #ifndef GMATH_VEC_H_
|
nuclear@0
|
2 #define GMATH_VEC_H_
|
nuclear@0
|
3
|
nuclear@0
|
4 #include <math.h>
|
nuclear@0
|
5
|
nuclear@2
|
6 namespace gph {
|
nuclear@0
|
7
|
nuclear@3
|
8 class Vector4;
|
nuclear@4
|
9 class Matrix4x4;
|
nuclear@3
|
10
|
nuclear@2
|
11 class Vector3 {
|
nuclear@0
|
12 public:
|
nuclear@0
|
13 float x, y, z;
|
nuclear@0
|
14
|
nuclear@2
|
15 Vector3() : x(0), y(0), z(0) {}
|
nuclear@2
|
16 Vector3(float x_, float y_, float z_) : x(x_), y(y_), z(z_) {}
|
nuclear@3
|
17 Vector3(const Vector4 &v);
|
nuclear@0
|
18
|
nuclear@4
|
19 inline void normalize();
|
nuclear@4
|
20 inline float &operator[] (int idx);
|
nuclear@4
|
21 inline const float &operator[] (int idx) const;
|
nuclear@0
|
22 };
|
nuclear@0
|
23
|
nuclear@3
|
24
|
nuclear@3
|
25 class Vector4 {
|
nuclear@3
|
26 public:
|
nuclear@3
|
27 float x, y, z, w;
|
nuclear@3
|
28
|
nuclear@3
|
29 Vector4() : x(0), y(0), z(0), w(0) {}
|
nuclear@3
|
30 Vector4(float x_, float y_, float z_, float w_) : x(x_), y(y_), z(z_), w(w_) {}
|
nuclear@3
|
31 Vector4(const Vector3 &v);
|
nuclear@3
|
32
|
nuclear@4
|
33 inline void normalize();
|
nuclear@4
|
34 inline float &operator[] (int idx);
|
nuclear@4
|
35 inline const float &operator[] (int idx) const;
|
nuclear@3
|
36 };
|
nuclear@3
|
37
|
nuclear@3
|
38 // ---- Vector3 functions ----
|
nuclear@4
|
39 inline Vector3 operator +(const Vector3 &a, const Vector3 &b);
|
nuclear@4
|
40 inline Vector3 operator -(const Vector3 &a, const Vector3 &b);
|
nuclear@4
|
41 inline Vector3 operator *(const Vector3 &a, const Vector3 &b);
|
nuclear@4
|
42 inline Vector3 operator /(const Vector3 &a, const Vector3 &b);
|
nuclear@4
|
43 inline Vector3 operator *(const Vector3 &v, float s);
|
nuclear@4
|
44 inline Vector3 operator *(float s, const Vector3 &v);
|
nuclear@4
|
45 inline Vector3 operator /(const Vector3 &v, float s);
|
nuclear@4
|
46 inline Vector3 operator /(float s, const Vector3 &v);
|
nuclear@4
|
47 inline Vector3 &operator +=(Vector3 &a, const Vector3 &b);
|
nuclear@4
|
48 inline Vector3 &operator -=(Vector3 &a, const Vector3 &b);
|
nuclear@4
|
49 inline Vector3 &operator *=(Vector3 &a, const Vector3 &b);
|
nuclear@4
|
50 inline Vector3 &operator /=(Vector3 &a, const Vector3 &b);
|
nuclear@4
|
51 inline Vector3 &operator *=(Vector3 &v, float s);
|
nuclear@4
|
52 inline Vector3 &operator /=(Vector3 &v, float s);
|
nuclear@3
|
53
|
nuclear@4
|
54 Vector3 operator *(const Vector3 &v, const Matrix4x4 &m);
|
nuclear@4
|
55 Vector3 operator *(const Matrix4x4 &m, const Vector3 &v);
|
nuclear@0
|
56
|
nuclear@4
|
57 inline bool operator ==(const Vector3 &a, const Vector3 &b);
|
nuclear@4
|
58 inline bool operator !=(const Vector3 &a, const Vector3 &b);
|
nuclear@0
|
59
|
nuclear@4
|
60 inline float dot(const Vector3 &a, const Vector3 &b);
|
nuclear@4
|
61 inline Vector3 cross(const Vector3 &a, const Vector3 &b);
|
nuclear@4
|
62 inline float length(const Vector3 &v);
|
nuclear@4
|
63 inline float length_sq(const Vector3 &v);
|
nuclear@4
|
64 inline Vector3 normalize(const Vector3 &v);
|
nuclear@0
|
65
|
nuclear@4
|
66 inline Vector3 reflect(const Vector3 &v, const Vector3 &n);
|
nuclear@4
|
67 inline Vector3 refract(const Vector3 &v, const Vector3 &n, float ior);
|
nuclear@4
|
68 inline Vector3 refract(const Vector3 &v, const Vector3 &n, float from_ior, float to_ior);
|
nuclear@0
|
69
|
nuclear@4
|
70 inline Vector3 distance(const Vector3 &a, const Vector3 &b);
|
nuclear@4
|
71 inline Vector3 distance_sq(const Vector3 &a, const Vector3 &b);
|
nuclear@4
|
72 inline Vector3 faceforward(const Vector3 &n, const Vector3 &vi, const Vector3 &ng);
|
nuclear@0
|
73
|
nuclear@0
|
74 }
|
nuclear@0
|
75
|
nuclear@0
|
76 #endif /* GMATH_VEC_H_ */
|