X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fanimation.cpp;h=a8d9e9698625b027997586745cd71b9c73c1d305;hb=9be04243c92f024327e74ad8d48861581d83b7ed;hp=b1ae1157fac6eeb8bbc64c5431845eef04c4f5a0;hpb=95a6bef6db17089d0eb82b4df005fa5f05b2f6e2;p=libs%2Fgl.git diff --git a/source/animation.cpp b/source/animation.cpp index b1ae1157..a8d9e969 100644 --- a/source/animation.cpp +++ b/source/animation.cpp @@ -267,6 +267,14 @@ void Animation::create_curve(CurveTarget target, int component, const T &extract while(n_control--) knots.pop_back(); + if(knots.size()==1) + { + knots.push_back(knots.back()); + knots.push_back(knots.back()); + knots.back().x += 1; + knots.push_back(knots.back()); + } + curves.push_back(new ValueCurve(target, component, knots)); } @@ -336,12 +344,18 @@ void Animation::ValueCurve<1>::apply(float x, Matrix &matrix) const float value = spline(x); if(target==POSITION || target==SCALE) { - Vector3 vec; - vec[component] = value; if(target==POSITION) + { + Vector3 vec; + vec[component] = value; matrix.translate(vec); + } else + { + Vector3 vec(1.0f, 1.0f, 1.0f); + vec[component] = value; matrix.scale(vec); + } } else if(target==EULER) { @@ -377,7 +391,7 @@ void Animation::ValueCurve::apply(float x, KeyFrame::AnimatedUniform &uni) co uni.size = N; typename Interpolate::Spline::Value value = spline(x); for(unsigned i=0; i::get(value, i); + uni.values[i] = Interpolate::SplineValue::get(value, i); }