typename Interpolate::SplineValue<float, N>::Type value;
if(extract(*i->keyframe, value))
{
+ typename Knot::Value dvalue = value;
float x = i->time/Time::sec;
if(i->control)
{
if(n_control==1)
{
typename Knot::Value cv = knots.back().y;
- knots.back().y = (knots[knots.size()-2].y+cv*2.0f)/3.0f;
- knots.push_back(Knot(x, (value+cv*2.0f)/3.0f));
+ knots.back().y = (knots[knots.size()-2].y+cv*2.0)/3.0;
+ knots.push_back(Knot(x, (dvalue+cv*2.0)/3.0));
}
else if(n_control==0 && !knots.empty())
{
typename Knot::Value prev = knots.back().y;
- knots.push_back(Knot(knots.back().x, (prev*2.0f+value)/3.0f));
- knots.push_back(Knot(x, (prev+value*2.0f)/3.0f));
+ knots.push_back(Knot(knots.back().x, (prev*2.0+dvalue)/3.0));
+ knots.push_back(Knot(x, (prev+dvalue*2.0)/3.0));
}
n_control = 0;
}
template<unsigned N>
Animation::ValueCurve<N>::ValueCurve(CurveTarget t, int c, const vector<Knot> &k):
Curve(t, c),
- spline(Interpolate::BezierSpline<float, 3, N>(k))
+ spline(Interpolate::BezierSpline<double, 3, N>(k))
{ }
template<unsigned N>
void Animation::ValueCurve<N>::apply(float x, KeyFrame::AnimatedUniform &uni) const
{
uni.size = N;
- typename Interpolate::Spline<float, 3, N>::Value value = spline(x);
+ typename Interpolate::Spline<double, 3, N>::Value value = spline(x);
for(unsigned i=0; i<N; ++i)
uni.values[i] = Interpolate::SplineValue<float, N>::get(value, i);
}
class ValueCurve: public Curve
{
public:
- typedef typename Interpolate::SplineKnot<float, N> Knot;
+ typedef typename Interpolate::SplineKnot<double, N> Knot;
private:
- Interpolate::Spline<float, 3, N> spline;
+ Interpolate::Spline<double, 3, N> spline;
public:
ValueCurve(CurveTarget, int, const std::vector<Knot> &);