查看: 2357|回复: 3

viewer可以设置两次setcameraManipulaor吗?

[复制链接]

该用户从未签到

发表于 2010-7-10 17:29:11 | 显示全部楼层 |阅读模式
如题:想做漫游跟随节点设置,用NodeTrackerManipulator跟随节点,要用
viewer->setcameramanipultor(tm);// osgGA::NodeTrackerManipulator* tm
然后视点上实现漫游,viewer->setcameraManipulator(camera);
//camera为自定义的视景类。
实现漫游效果,这样做的话,把tm放前面,就不起作用了,把tm放后面,就报错内存冲突。不知如何组织了。大家说的用NodeTrackerManipulator实现节点漫游如何组织的呢?菜死

该用户从未签到

发表于 2010-7-10 22:45:57 | 显示全部楼层
如此切换即可:


  1.     // set up the camera manipulators.
  2.     {
  3.         osg::ref_ptr<osgGA::KeySwitchMatrixManipulator> keyswitchManipulator = new osgGA::KeySwitchMatrixManipulator;

  4.         keyswitchManipulator->addMatrixManipulator( '1', "Trackball", new osgGA::TrackballManipulator() );
  5.         keyswitchManipulator->addMatrixManipulator( '2', "Flight", new osgGA::FlightManipulator() );
  6.         keyswitchManipulator->addMatrixManipulator( '3', "Drive", new osgGA::DriveManipulator() );
  7.         keyswitchManipulator->addMatrixManipulator( '4', "Terrain", new osgGA::TerrainManipulator() );

  8.         std::string pathfile;
  9.         char keyForAnimationPath = '5';
  10.         while (arguments.read("-p",pathfile))
  11.         {
  12.             osgGA::AnimationPathManipulator* apm = new osgGA::AnimationPathManipulator(pathfile);
  13.             if (apm || !apm->valid())
  14.             {
  15.                 unsigned int num = keyswitchManipulator->getNumMatrixManipulators();
  16.                 keyswitchManipulator->addMatrixManipulator( keyForAnimationPath, "Path", apm );
  17.                 keyswitchManipulator->selectMatrixManipulator(num);
  18.                 ++keyForAnimationPath;
  19.             }
  20.         }

  21.         viewer.setCameraManipulator( keyswitchManipulator.get() );
  22.     }

复制代码

该用户从未签到

 楼主| 发表于 2010-7-11 08:17:21 | 显示全部楼层
2# FlySky 谢谢flysky,我没说明白,各种操作器间的切换我知道,现在是要用NodeTrackerManipulator来跟踪目标,又要实现你写的例子中的漫游效果,这样viewer要两次setcameraManipulator了,不知道是不是思路错了。貌似好多人都已经用NodeTrackerManipulator实现了节点跟随相机运动的效果

该用户从未签到

发表于 2010-7-12 08:30:15 | 显示全部楼层
这种时候您需要实现一个自定义的漫游器,单纯地叠加两个已有的是不可能的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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