Hello, I'm trying to sppeding up/down an animation using AnimationPathCallback. The idea is to pause/speed/up/down the animation using key strokes, for this I have a GuiEventHandler derived class and a NodeVisitor derived class. So far I've playing round with the base clases AnimationPath and AnimationPathCallback methods get/setStartTime, get/setTimeOffset, get/setLastTime and get/settimeMultiplier with no success.
I found http://forum.openscenegraph.org/viewtopic.php?t=10014 but my implementation still jumps around when speeding up/down: Code: void AnimationVisitor::apply(osg::Transform& transform) { osg::AnimationPathCallback* apc = dynamic_cast<osg::AnimationPathCallback*>(transform.getUpdateCallback()); if (apc) { osg::AnimationPath * path = apc->getAnimationPath(); int key = getKey(); double lambda; switch (key) { case osgGA::GUIEventAdapter::KEY_Space: { bool is_paused = apc->getPause(); apc->setPause(!is_paused); std::cout << "Animation time: " << apc->getAnimationTime() << std::endl; std::cout << "\tPause: " << !is_paused << std::endl; std::cout << "---------------------------" << std::endl; break; } case osgGA::GUIEventAdapter::KEY_Right: { double last = path->getLastTime(); double first = path->getFirstTime(); lambda = apc->getTimeMultiplier(); double simTime = last - first; double currOffset = apc->getTimeOffset(); double offset = simTime - (simTime - currOffset) / 1.1; apc->setTimeMultiplier(1.1*lambda); apc->setTimeOffset(offset); std::cout << "Animation time: " << apc->getAnimationTime() << std::endl; std::cout << "\tSpeed up: : " << lambda * 1.1 << std::endl; std::cout << "---------------------------" << std::endl; break; } case osgGA::GUIEventAdapter::KEY_Left: { double last = path->getLastTime(); double first = path->getFirstTime(); lambda = apc->getTimeMultiplier(); double simTime = last - first; double currOffset = apc->getTimeOffset(); double offset = simTime - (simTime - currOffset) * 0.9; apc->setTimeMultiplier(0.9*lambda); apc->setTimeOffset(offset); std::cout << "Animation time: " << apc->getAnimationTime() << std::endl; std::cout << "\tSpeed up: : " << lambda * 0.9 << std::endl; std::cout << "---------------------------" << std::endl; break; } default: break; } } traverse(transform); } Can anyone give some pointers about how to achieve a smooth speeding transition? I look up in the source code of both classes involved (AnimationPath and AnimationPathCallback) but I havent been able to figure out a solution. What can I do? or What am I missing? Thank you! Cheers ------------------ Read this topic online here: http://forum.openscenegraph.org/viewtopic.php?p=75287#75287 _______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org