X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fanimation.cpp;h=61c21ce8611c88f40694efedea9a35f2d687a65e;hp=8f7dea03bd90e8c8513c5e2ac77379699072ed16;hb=3d8438922e24b787587d0c8f1883c5567a4af573;hpb=3f7c493e13b7108098539078b729cffc095c304b diff --git a/source/animation.cpp b/source/animation.cpp index 8f7dea03..61c21ce8 100644 --- a/source/animation.cpp +++ b/source/animation.cpp @@ -145,7 +145,7 @@ Matrix Animation::MatrixInterpolation::get(float t) const will be in the range [-1, 1]. */ float w = (axes[i].slope+(1-axes[i].slope)*u*u)*u*0.5f+0.5f; - /* The interpolate vectors will also be shorter than unit length. At + /* The interpolated vectors will also be shorter than unit length. At the halfway point the length will be equal to the cosine of half the angle, which was computed earlier. Use a second degree polynomial to approximate. */ @@ -218,8 +218,8 @@ Animation::UniformInfo::UniformInfo(const string &n, unsigned s): Animation::Iterator::Iterator(const Animation &a): - animation(a), - iter(animation.keyframes.begin()), + animation(&a), + iter(animation->keyframes.begin()), end(false) { } @@ -228,12 +228,12 @@ Animation::Iterator &Animation::Iterator::operator+=(const Time::TimeDelta &t) time_since_keyframe += t; while(time_since_keyframe>iter->delta_t) { - KeyFrameList::const_iterator next = iter; + vector::const_iterator next = iter; ++next; - if(next==animation.keyframes.end()) + if(next==animation->keyframes.end()) { - if(animation.looping) - next = animation.keyframes.begin(); + if(animation->looping) + next = animation->keyframes.begin(); else { end = true; @@ -264,10 +264,10 @@ KeyFrame::AnimatedUniform Animation::Iterator::get_uniform(unsigned i) const if(iter->uniforms.size()>i) return iter->uniforms[i]; else - return KeyFrame::AnimatedUniform(animation.uniforms[i].size, 0.0f); + return KeyFrame::AnimatedUniform(animation->uniforms[i].size, 0.0f); } - unsigned size = animation.uniforms[i].size; + unsigned size = animation->uniforms[i].size; float t = time_since_keyframe/iter->delta_t; KeyFrame::AnimatedUniform result(size, 0.0f); for(unsigned j=0; jarmature) throw invalid_operation("Animation::Iterator::get_pose_matrix"); - if(link>animation.armature->get_max_link_index()) + if(link>animation->armature->get_max_link_index()) throw out_of_range("Animation::Iterator::get_pose_matrix"); if(!iter->prev) @@ -293,7 +293,7 @@ Matrix Animation::Iterator::get_pose_matrix(unsigned link) const // We must redo the base point correction since interpolation throws if off // XXX This should probably be done on local matrices Matrix result = iter->pose_matrices[link].get(time_since_keyframe/iter->delta_t); - const Vector3 &base = animation.armature->get_link(link).get_base(); + const Vector3 &base = animation->armature->get_link(link).get_base(); Vector3 new_base = result*base; result = Matrix::translation(base-new_base)*result; return result;