查看: 1405|回复: 8

MFC中制作路径漫游并播放,进入之后直接播放到最后一个点

[复制链接]

该用户从未签到

发表于 2012-12-28 08:56:52 | 显示全部楼层 |阅读模式
void CtestOSGMFCView::Oneyefly()
{
        // TODO: 在此添加命令处理程序代码
        osg::Vec3 eye,center,up;
        const osg::Vec3f  hotSpotFirst(87.111,-127.753,33.948);
        m_OSG->getViewer()->getCamera()->getViewMatrixAsLookAt(eye,center,up);//获取当前视点
        osg::ref_ptr<osg::AnimationPath>apath=new osg::AnimationPath();
        m_eyefly=new EyeFly(eye,center,hotSpotFirst,apath);//获取漫游路径,循环模式NO_LOOPING
        osg::ref_ptr<osgGA::AnimationPathManipulator> apm = new osgGA::AnimationPathManipulator(apath.get());
        m_OSG->getViewer()->setCameraManipulator(apm.get());//设置路径漫游器
}

菜单按钮实现取当前视点,并将当前视点为起点,直线运动到一个已知的目标点,以此为漫游路径,按下菜单按钮以后,直接漫游到了最后一个点,没有从起点开始运动到目标点的过程,这是为什么?

该用户从未签到

发表于 2012-12-28 09:09:20 | 显示全部楼层
time 设置了?

该用户从未签到

 楼主| 发表于 2012-12-28 13:07:13 | 显示全部楼层
liuzhiyu123 发表于 2012-12-28 09:09
time 设置了?

设置了,在控制台上运行是可以的

该用户从未签到

发表于 2012-12-28 18:09:44 | 显示全部楼层
您可以尝试在设置后执行以下manipulator的home()

该用户从未签到

发表于 2012-12-28 21:55:35 | 显示全部楼层
你的路径里面估计就只有一个起点一个终点,总共两个点,So。。。。你需要多插入几个点

该用户从未签到

 楼主| 发表于 2012-12-29 09:31:58 | 显示全部楼层
array 发表于 2012-12-28 18:09
您可以尝试在设置后执行以下manipulator的home()

好的,我试试,Thankyou!

该用户从未签到

 楼主| 发表于 2012-12-29 09:33:26 | 显示全部楼层
buaahc 发表于 2012-12-28 21:55
你的路径里面估计就只有一个起点一个终点,总共两个点,So。。。。你需要多插入几个点

呃,我试了一个较长的路径,点也挺多的,但是,播放后还不是起点的位置,已经在漫游的路上了

该用户从未签到

 楼主| 发表于 2012-12-29 11:14:25 | 显示全部楼层
array 发表于 2012-12-28 18:09
您可以尝试在设置后执行以下manipulator的home()

试了一下,加了        m_OSG->getViewer()->getCameraManipulator()->home(0.0);
但是还是不行,请问,home函数的参数,这个时间是什么时间,是当前系统运行时间呢,还是什么?

该用户从未签到

 楼主| 发表于 2012-12-29 11:30:41 | 显示全部楼层
解决问题,在程序初始化位置设置        StartTime=osg::Timer::instance()->tick();
(其中先定义        osg::Timer_t StartTime;osg::Timer_t now;)
然后在        m_OSG->getViewer()->setCameraManipulator(apm.get());//设置路径漫游器
处添加
        now = osg::Timer::instance()->tick();
        double deltaSecs = osg::Timer::instance()->delta_s(StartTime,now);
        double time=apath->getLastTime();
        m_OSG->getViewer()->getCameraManipulator()->home(deltaSecs);
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表