X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FMoof%2FMath.hh;h=45c6e90b7ee02543df9bed379ac519291529aaaa;hp=05aa9ecf6504d55c0d33f1e3042612480d22df8f;hb=b357615aba1dbde81e3c6999366604e6001010a7;hpb=246d7d6e4386b686327163d621c7c8b398b7d479 diff --git a/src/Moof/Math.hh b/src/Moof/Math.hh index 05aa9ec..45c6e90 100644 --- a/src/Moof/Math.hh +++ b/src/Moof/Math.hh @@ -102,6 +102,47 @@ inline Vector3 promote(const Vector2& vec, Scalar extra = 0.0) } +template +inline R convert(const P& p) +{ + return R(p); +} + +template <> +inline Vector3 convert(const Vector4& vec) +{ + return Vector3(vec[0], vec[1], vec[2]); +} + +template <> +inline Vector2 convert(const Vector3& vec) +{ + return Vector2(vec[0], vec[1]); +} + +template <> +inline Vector4 convert(const Vector3& vec) +{ + return Vector4(vec[0], vec[1], vec[2], SCALAR(0.0)); +} + +template <> +inline Vector3 convert(const Vector2& vec) +{ + return Vector3(vec[0], vec[1], SCALAR(0.0)); +} + +template +struct cast +{ + cast(const P& p) : param(p) {} + template + operator R() { return convert(param); } +private: + const P& param; +}; + + const Scalar EPSILON = SCALAR(0.000001);