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

3 篇文章 0 订阅

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


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


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

osg::Timer_t	l_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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值