osgGA::AnimationPathManipulator动画触发时间异常的解决方法

来源:互联网 发布:mysql 建立索引语句 编辑:程序博客网 时间:2024/05/16 09:09

关于osgGA::AnimationPathManipulator的使用,各种教材、帖子中已经介绍的比较详细了,这里只介绍一下如何设置动画操作器的时钟。


实践中发现,对于触发型动画,即程序运行了一段时间后,通过鼠标、键盘事件触发的动画,如果不设置动画操作器的时钟,动画可能出现异常,甚至根本不触发动画。分析认为操作器默认的起始时间是软件的启动时间,如果软件启动后一段时间再触发动画,osg很可能会认为动画是在过去(即软件启动时间)触发的。为了解决此问题,我们需要设置动画操作器的时钟,方法如下:


首先在软件启动时记录当前的时间:

osg::Timer_tl_llStartTime;l_llStartTime = osg::Timer::instance()->tick();

然后在执行动画时获取当前时间,并用两个时间差home操作器:

osg::ref_ptr<osgGA::AnimationPathManipulator> l_oAPM = new osgGA::AnimationPathManipulator;l_oAPM->setTimeScale(1);l_oAPM->setAnimationPath(this->CreatePath(l_ptOldEye, l_ptNewEye, l_stuOldRotation, l_stuNewRotation));osg::Timer_t l_llTime = osg::Timer::instance()->tick();double l_dDuring = osg::Timer::instance()->delta_s(l_llStartTime, l_llTime);l_oAPM->home(l_dDuring);




0 0
原创粉丝点击