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@3
|
16
|
nuclear@5
|
17 class Vector2 {
|
nuclear@5
|
18 public:
|
nuclear@5
|
19 float x, y;
|
nuclear@5
|
20
|
nuclear@5
|
21 Vector2() : x(0), y(0) {}
|
nuclear@5
|
22 Vector2(float x_, float y_) : x(x_), y(y_) {}
|
nuclear@5
|
23 Vector2(const Vector3 &v);
|
nuclear@5
|
24
|
nuclear@5
|
25 inline void normalize();
|
nuclear@5
|
26 inline float &operator[] (int idx);
|
nuclear@5
|
27 inline const float &operator[] (int idx) const;
|
nuclear@5
|
28
|
nuclear@5
|
29 GPH_VEC2_SWIZZLE
|
nuclear@5
|
30 };
|
nuclear@5
|
31
|
nuclear@2
|
32 class Vector3 {
|
nuclear@0
|
33 public:
|
nuclear@0
|
34 float x, y, z;
|
nuclear@0
|
35
|
nuclear@2
|
36 Vector3() : x(0), y(0), z(0) {}
|
nuclear@2
|
37 Vector3(float x_, float y_, float z_) : x(x_), y(y_), z(z_) {}
|
nuclear@3
|
38 Vector3(const Vector4 &v);
|
nuclear@0
|
39
|
nuclear@4
|
40 inline void normalize();
|
nuclear@4
|
41 inline float &operator[] (int idx);
|
nuclear@4
|
42 inline const float &operator[] (int idx) const;
|
nuclear@5
|
43
|
nuclear@5
|
44 GPH_VEC3_SWIZZLE
|
nuclear@0
|
45 };
|
nuclear@0
|
46
|
nuclear@3
|
47
|
nuclear@3
|
48 class Vector4 {
|
nuclear@3
|
49 public:
|
nuclear@3
|
50 float x, y, z, w;
|
nuclear@3
|
51
|
nuclear@3
|
52 Vector4() : x(0), y(0), z(0), w(0) {}
|
nuclear@3
|
53 Vector4(float x_, float y_, float z_, float w_) : x(x_), y(y_), z(z_), w(w_) {}
|
nuclear@3
|
54 Vector4(const Vector3 &v);
|
nuclear@3
|
55
|
nuclear@4
|
56 inline void normalize();
|
nuclear@4
|
57 inline float &operator[] (int idx);
|
nuclear@4
|
58 inline const float &operator[] (int idx) const;
|
nuclear@5
|
59
|
nuclear@5
|
60 GPH_VEC4_SWIZZLE
|
nuclear@3
|
61 };
|
nuclear@3
|
62
|
nuclear@3
|
63 // ---- Vector3 functions ----
|
nuclear@4
|
64 inline Vector3 operator +(const Vector3 &a, const Vector3 &b);
|
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 &v, float s);
|
nuclear@4
|
69 inline Vector3 operator *(float s, const Vector3 &v);
|
nuclear@4
|
70 inline Vector3 operator /(const Vector3 &v, float s);
|
nuclear@4
|
71 inline Vector3 operator /(float s, const Vector3 &v);
|
nuclear@4
|
72 inline Vector3 &operator +=(Vector3 &a, const Vector3 &b);
|
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 &v, float s);
|
nuclear@4
|
77 inline Vector3 &operator /=(Vector3 &v, float s);
|
nuclear@3
|
78
|
nuclear@4
|
79 Vector3 operator *(const Vector3 &v, const Matrix4x4 &m);
|
nuclear@4
|
80 Vector3 operator *(const Matrix4x4 &m, const Vector3 &v);
|
nuclear@0
|
81
|
nuclear@4
|
82 inline bool operator ==(const Vector3 &a, const Vector3 &b);
|
nuclear@4
|
83 inline bool operator !=(const Vector3 &a, const Vector3 &b);
|
nuclear@0
|
84
|
nuclear@4
|
85 inline float dot(const Vector3 &a, const Vector3 &b);
|
nuclear@4
|
86 inline Vector3 cross(const Vector3 &a, const Vector3 &b);
|
nuclear@4
|
87 inline float length(const Vector3 &v);
|
nuclear@4
|
88 inline float length_sq(const Vector3 &v);
|
nuclear@4
|
89 inline Vector3 normalize(const Vector3 &v);
|
nuclear@0
|
90
|
nuclear@4
|
91 inline Vector3 reflect(const Vector3 &v, const Vector3 &n);
|
nuclear@4
|
92 inline Vector3 refract(const Vector3 &v, const Vector3 &n, float ior);
|
nuclear@4
|
93 inline Vector3 refract(const Vector3 &v, const Vector3 &n, float from_ior, float to_ior);
|
nuclear@0
|
94
|
nuclear@4
|
95 inline Vector3 distance(const Vector3 &a, const Vector3 &b);
|
nuclear@4
|
96 inline Vector3 distance_sq(const Vector3 &a, const Vector3 &b);
|
nuclear@4
|
97 inline Vector3 faceforward(const Vector3 &n, const Vector3 &vi, const Vector3 &ng);
|
nuclear@0
|
98
|
nuclear@0
|
99 }
|
nuclear@0
|
100
|
nuclear@0
|
101 #endif /* GMATH_VEC_H_ */
|