graphene

annotate src/gmath/vector.h @ 6:9fbbc96e6fbe

foo
author John Tsiombikas <nuclear@member.fsf.org>
date Fri, 31 Jul 2015 04:59:28 +0300
parents 2ce58d5309f0
children
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_ */