# HG changeset patch # User John Tsiombikas # Date 1438307968 -10800 # Node ID 9fbbc96e6fbe08486a55df2dbbd882d03ed59537 # Parent 2ce58d5309f0795a7d26b5f9555b46f1b229d3b7 foo diff -r 2ce58d5309f0 -r 9fbbc96e6fbe src/gmath/quat.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/gmath/quat.h Fri Jul 31 04:59:28 2015 +0300 @@ -0,0 +1,19 @@ +#ifndef QUATERNION_H_ +#define QUATERNION_H_ + +namespace gph { + +class Quaternion { +public: + float x, y, z, w; // w + xi + yj + zk + + Quaternion() : x(0), y(0), z(0), w(1) {} + Quaternion(float x_, float y_, float z_, float w_) : x(x_), y(y_), z(z_), w(w_) {} + Quaternion(const Vector3 &v, float s) : x(v.x), y(v.y), z(v.z), w(s) {} + + // TODO more +}; + +} // namespace gph + +#endif // QUATERNION_H_ diff -r 2ce58d5309f0 -r 9fbbc96e6fbe src/gmath/vector.h --- a/src/gmath/vector.h Sat Jul 25 17:19:27 2015 +0300 +++ b/src/gmath/vector.h Fri Jul 31 04:59:28 2015 +0300 @@ -13,6 +13,7 @@ class Vector3; class Vector4; class Matrix4x4; +class Quaternion; class Vector2 { public: @@ -96,6 +97,14 @@ inline Vector3 distance_sq(const Vector3 &a, const Vector3 &b); inline Vector3 faceforward(const Vector3 &n, const Vector3 &vi, const Vector3 &ng); +inline Vector3 major(const Vector3 &v); +inline int major_idx(const Vector3 &v); +inline Vector3 proj_axis(const Vector3 &v, const Vector3 &axis); + +inline Vector3 rotate(const Vector3 &v, const Quaternion &q); +inline Vector3 rotate(const Vector3 &v, const Vector3 &axis, float angle); +inline Vector3 rotate(const Vector3 &v, const Vector3 &euler); + } #endif /* GMATH_VEC_H_ */ diff -r 2ce58d5309f0 -r 9fbbc96e6fbe src/gmath/vector.inl --- a/src/gmath/vector.inl Sat Jul 25 17:19:27 2015 +0300 +++ b/src/gmath/vector.inl Fri Jul 31 04:59:28 2015 +0300 @@ -197,6 +197,42 @@ return dot(ng, i) < 0.0f ? n : -n; } +inline Vector3 major(const Vector3 &v) +{ + int m = major_idx(v); + Vector3 res; + res[m] = v[m]; + return res; +} + +inline int major_idx(const Vector3 &v) +{ + return fabs(v.x) >= fabs(v.y) && fabs(v.x) > fabs(v.z) ? 0 : + (fabs(v.y) >= fabs(v.z) ? 1 : 2); +} + +inline Vector3 proj_axis(const Vector3 &v, const Vector3 &axis) +{ + return axis * dot(v, axis); +} + + +inline Vector3 rotate(const Vector3 &v, const Quaternion &q) +{ + return v; // TODO +} + +inline Vector3 rotate(const Vector3 &v, const Vector3 &axis, float angle) +{ + return v; // TODO +} + +inline Vector3 rotate(const Vector3 &v, const Vector3 &euler) +{ + return v; // TODO +} + + GPH_VEC3_SWIZZLE // ---- Vector4 ----