15#include <vsg/animation/Animation.h>
16#include <vsg/app/ViewMatrix.h>
17#include <vsg/maths/transform.h>
29 bool operator<(
const time_value& rhs)
const {
return time < rhs.time; }
38 template<
typename T,
typename V>
39 bool sample(
double time,
const T& values, V& value)
41 if (values.size() == 0)
return false;
43 if (values.size() == 1)
45 value = values.front().value;
49 auto pos_itr = values.begin();
50 if (time <= pos_itr->time)
52 value = pos_itr->value;
57 using value_type =
typename T::value_type;
58 pos_itr = std::lower_bound(values.begin(), values.end(), time, [](
const value_type& elem,
double t) ->
bool { return elem.time < t; });
60 if (pos_itr == values.begin())
62 value = values.front().value;
66 if (pos_itr == values.end())
68 value = values.back().value;
72 auto before_pos_itr = pos_itr - 1;
73 double delta_time = (pos_itr->time - before_pos_itr->time);
74 double r = delta_time != 0.0 ? (time - before_pos_itr->time) / delta_time : 0.5;
76 value = mix(before_pos_itr->value, pos_itr->value, r);
Definition time_value.h:24