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@5
|
5 #include "swizzle.h"
|
nuclear@0
|
6
|
nuclear@2
|
7 namespace gph {
|
nuclear@0
|
8
|
nuclear@5
|
9 #define GPH_SWIZZLE2(T, a, b) inline Vector2 a##b() const;
|
nuclear@5
|
10 #define GPH_SWIZZLE3(T, a, b, c) inline Vector3 a##b##c() const;
|
nuclear@5
|
11 #define GPH_SWIZZLE4(T, a, b, c, d) inline Vector4 a##b##c##d() const;
|
nuclear@5
|
12
|
nuclear@5
|
13 class Vector3;
|
nuclear@3
|
14 class Vector4;
|
nuclear@4
|
15 class Matrix4x4;
|
nuclear@6
|
16 class Quaternion;
|
nuclear@3
|
17
|
nuclear@5
|
18 class Vector2 {
|
nuclear@5
|
19 public:
|
nuclear@5
|
20 float x, y;
|
nuclear@5
|
21
|
nuclear@5
|
22 Vector2() : x(0), y(0) {}
|
nuclear@5
|
23 Vector2(float x_, float y_) : x(x_), y(y_) {}
|
nuclear@5
|
24 Vector2(const Vector3 &v);
|
nuclear@5
|
25
|
nuclear@5
|
26 inline void normalize();
|
nuclear@5
|
27 inline float &operator[] (int idx);
|
nuclear@5
|
28 inline const float &operator[] (int idx) const;
|
nuclear@5
|
29
|
nuclear@5
|
30 GPH_VEC2_SWIZZLE
|
nuclear@5
|
31 };
|
nuclear@5
|
32
|
nuclear@2
|
33 class Vector3 {
|
nuclear@0
|
34 public:
|
nuclear@0
|
35 float x, y, z;
|
nuclear@0
|
36
|
nuclear@2
|
37 Vector3() : x(0), y(0), z(0) {}
|
nuclear@2
|
38 Vector3(float x_, float y_, float z_) : x(x_), y(y_), z(z_) {}
|
nuclear@3
|
39 Vector3(const Vector4 &v);
|
nuclear@0
|
40
|
nuclear@4
|
41 inline void normalize();
|
nuclear@4
|
42 inline float &operator[] (int idx);
|
nuclear@4
|
43 inline const float &operator[] (int idx) const;
|
nuclear@5
|
44
|
nuclear@5
|
45 GPH_VEC3_SWIZZLE
|
nuclear@0
|
46 };
|
nuclear@0
|
47
|
nuclear@3
|
48
|
nuclear@3
|
49 class Vector4 {
|
nuclear@3
|
50 public:
|
nuclear@3
|
51 float x, y, z, w;
|
nuclear@3
|
52
|
nuclear@3
|
53 Vector4() : x(0), y(0), z(0), w(0) {}
|
nuclear@3
|
54 Vector4(float x_, float y_, float z_, float w_) : x(x_), y(y_), z(z_), w(w_) {}
|
nuclear@3
|
55 Vector4(const Vector3 &v);
|
nuclear@3
|
56
|
nuclear@4
|
57 inline void normalize();
|
nuclear@4
|
58 inline float &operator[] (int idx);
|
nuclear@4
|
59 inline const float &operator[] (int idx) const;
|
nuclear@5
|
60
|
nuclear@5
|
61 GPH_VEC4_SWIZZLE
|
nuclear@3
|
62 };
|
nuclear@3
|
63
|
nuclear@3
|
64 // ---- Vector3 functions ----
|
nuclear@4
|
65 inline Vector3 operator +(const Vector3 &a, const Vector3 &b);
|
nuclear@4
|
66 inline Vector3 operator -(const Vector3 &a, const Vector3 &b);
|
nuclear@4
|
67 inline Vector3 operator *(const Vector3 &a, const Vector3 &b);
|
nuclear@4
|
68 inline Vector3 operator /(const Vector3 &a, const Vector3 &b);
|
nuclear@4
|
69 inline Vector3 operator *(const Vector3 &v, float s);
|
nuclear@4
|
70 inline Vector3 operator *(float s, const Vector3 &v);
|
nuclear@4
|
71 inline Vector3 operator /(const Vector3 &v, float s);
|
nuclear@4
|
72 inline Vector3 operator /(float s, const Vector3 &v);
|
nuclear@4
|
73 inline Vector3 &operator +=(Vector3 &a, const Vector3 &b);
|
nuclear@4
|
74 inline Vector3 &operator -=(Vector3 &a, const Vector3 &b);
|
nuclear@4
|
75 inline Vector3 &operator *=(Vector3 &a, const Vector3 &b);
|
nuclear@4
|
76 inline Vector3 &operator /=(Vector3 &a, const Vector3 &b);
|
nuclear@4
|
77 inline Vector3 &operator *=(Vector3 &v, float s);
|
nuclear@4
|
78 inline Vector3 &operator /=(Vector3 &v, float s);
|
nuclear@3
|
79
|
nuclear@4
|
80 Vector3 operator *(const Vector3 &v, const Matrix4x4 &m);
|
nuclear@4
|
81 Vector3 operator *(const Matrix4x4 &m, const Vector3 &v);
|
nuclear@0
|
82
|
nuclear@4
|
83 inline bool operator ==(const Vector3 &a, const Vector3 &b);
|
nuclear@4
|
84 inline bool operator !=(const Vector3 &a, const Vector3 &b);
|
nuclear@0
|
85
|
nuclear@4
|
86 inline float dot(const Vector3 &a, const Vector3 &b);
|
nuclear@4
|
87 inline Vector3 cross(const Vector3 &a, const Vector3 &b);
|
nuclear@4
|
88 inline float length(const Vector3 &v);
|
nuclear@4
|
89 inline float length_sq(const Vector3 &v);
|
nuclear@4
|
90 inline Vector3 normalize(const Vector3 &v);
|
nuclear@0
|
91
|
nuclear@4
|
92 inline Vector3 reflect(const Vector3 &v, const Vector3 &n);
|
nuclear@4
|
93 inline Vector3 refract(const Vector3 &v, const Vector3 &n, float ior);
|
nuclear@4
|
94 inline Vector3 refract(const Vector3 &v, const Vector3 &n, float from_ior, float to_ior);
|
nuclear@0
|
95
|
nuclear@4
|
96 inline Vector3 distance(const Vector3 &a, const Vector3 &b);
|
nuclear@4
|
97 inline Vector3 distance_sq(const Vector3 &a, const Vector3 &b);
|
nuclear@4
|
98 inline Vector3 faceforward(const Vector3 &n, const Vector3 &vi, const Vector3 &ng);
|
nuclear@0
|
99
|
nuclear@6
|
100 inline Vector3 major(const Vector3 &v);
|
nuclear@6
|
101 inline int major_idx(const Vector3 &v);
|
nuclear@6
|
102 inline Vector3 proj_axis(const Vector3 &v, const Vector3 &axis);
|
nuclear@6
|
103
|
nuclear@6
|
104 inline Vector3 rotate(const Vector3 &v, const Quaternion &q);
|
nuclear@6
|
105 inline Vector3 rotate(const Vector3 &v, const Vector3 &axis, float angle);
|
nuclear@6
|
106 inline Vector3 rotate(const Vector3 &v, const Vector3 &euler);
|
nuclear@6
|
107
|
nuclear@0
|
108 }
|
nuclear@0
|
109
|
nuclear@0
|
110 #endif /* GMATH_VEC_H_ */
|