graphene

annotate src/gmath/vector.h @ 4:d30e24132b6e

more gmath
author John Tsiombikas <nuclear@member.fsf.org>
date Sat, 25 Jul 2015 07:42:30 +0300
parents d71b4e899e08
children 2ce58d5309f0
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_ */