| 1 | /// @ref gtx_spline |
| 2 | |
| 3 | namespace glm |
| 4 | { |
| 5 | template<typename genType> |
| 6 | GLM_FUNC_QUALIFIER genType catmullRom |
| 7 | ( |
| 8 | genType const& v1, |
| 9 | genType const& v2, |
| 10 | genType const& v3, |
| 11 | genType const& v4, |
| 12 | typename genType::value_type const& s |
| 13 | ) |
| 14 | { |
| 15 | typename genType::value_type s2 = pow2(s); |
| 16 | typename genType::value_type s3 = pow3(s); |
| 17 | |
| 18 | typename genType::value_type f1 = -s3 + typename genType::value_type(2) * s2 - s; |
| 19 | typename genType::value_type f2 = typename genType::value_type(3) * s3 - typename genType::value_type(5) * s2 + typename genType::value_type(2); |
| 20 | typename genType::value_type f3 = typename genType::value_type(-3) * s3 + typename genType::value_type(4) * s2 + s; |
| 21 | typename genType::value_type f4 = s3 - s2; |
| 22 | |
| 23 | return (f1 * v1 + f2 * v2 + f3 * v3 + f4 * v4) / typename genType::value_type(2); |
| 24 | |
| 25 | } |
| 26 | |
| 27 | template<typename genType> |
| 28 | GLM_FUNC_QUALIFIER genType hermite |
| 29 | ( |
| 30 | genType const& v1, |
| 31 | genType const& t1, |
| 32 | genType const& v2, |
| 33 | genType const& t2, |
| 34 | typename genType::value_type const& s |
| 35 | ) |
| 36 | { |
| 37 | typename genType::value_type s2 = pow2(s); |
| 38 | typename genType::value_type s3 = pow3(s); |
| 39 | |
| 40 | typename genType::value_type f1 = typename genType::value_type(2) * s3 - typename genType::value_type(3) * s2 + typename genType::value_type(1); |
| 41 | typename genType::value_type f2 = typename genType::value_type(-2) * s3 + typename genType::value_type(3) * s2; |
| 42 | typename genType::value_type f3 = s3 - typename genType::value_type(2) * s2 + s; |
| 43 | typename genType::value_type f4 = s3 - s2; |
| 44 | |
| 45 | return f1 * v1 + f2 * v2 + f3 * t1 + f4 * t2; |
| 46 | } |
| 47 | |
| 48 | template<typename genType> |
| 49 | GLM_FUNC_QUALIFIER genType cubic |
| 50 | ( |
| 51 | genType const& v1, |
| 52 | genType const& v2, |
| 53 | genType const& v3, |
| 54 | genType const& v4, |
| 55 | typename genType::value_type const& s |
| 56 | ) |
| 57 | { |
| 58 | return ((v1 * s + v2) * s + v3) * s + v4; |
| 59 | } |
| 60 | }//namespace glm |