master
ブランチ master
ShaderPlayground / deps / glm / glm / gtx / spline.inl
1.8 KB、60行 生 Blame 履歴
1/// @ref gtx_spline
2
3namespace 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