当前位置:   article > 正文

osg 自动漫游_osg::nodetrackermanipulator

osg::nodetrackermanipulator

介绍两种漫游方式,都是操作器的方式,但是都有所不同。

第一种为节点跟踪漫游器(NodeTrackerManipulator),主要是当前视点跟随这个节点的包围盒中心点,所以只要设置这个节点一个路径动画,那么当前视点就跟着节点一起漫游了。

第二种为路径漫游器(AnimationPathManipulator),主要是提前设置路径(AnimationPath),可以设置这个路径上的每个位置上的时间和旋转量,但是在漫游过程中不能修改当前的视点距离,只能按照提前设置好的视角和位置进行观察。

下面给出这两种方式的简单示例代码:其中的路径设置函数可以参考我前面文章关于路径动画的介绍,也可以自己写。

其中main2使用的节点跟踪漫游器(可以一直跟者飞机移动视点),main使用的路径漫游器(当前视点会从牛屁股里出来)。

  1. int main2()
  2. {
  3. osgViewer::Viewer viewer;
  4. viewer.addEventHandler(new ChangeWindow);
  5. osg::Group *pGroup = new osg::Group;
  6. osg::MatrixTransform* mt = new osg::MatrixTransform;
  7. osg::Node*glider = osgDB::readNodeFile("glider.osg");
  8. mt->addChild(glider);
  9. osg::Vec3 ptS = osg::Vec3(0,0,0);
  10. osg::Vec3 ptE = osg::Vec3(-1000, 0, 0);
  11. osg::AnimationPath* path = createAnimationPath(ptS, ptE, 0, 1000);
  12. osg::NodeCallback* nc = new osg::AnimationPathCallback(path);
  13. mt->setUpdateCallback(nc);
  14. osgGA::NodeTrackerManipulator *tm = new osgGA::NodeTrackerManipulator;
  15. osgGA::NodeTrackerManipulator::TrackerMode trackerMode = osgGA::NodeTrackerManipulator::NODE_CENTER_AND_ROTATION;
  16. osgGA::NodeTrackerManipulator::RotationMode rotationMode = osgGA::NodeTrackerManipulator::TRACKBALL;
  17. tm->setTrackerMode(trackerMode);
  18. tm->setRotationMode(rotationMode);
  19. tm->setTrackNode(glider);
  20. pGroup->addChild(mt);
  21. pGroup->addChild(osgDB::readNodeFile("cow.osg"));
  22. viewer.setCameraManipulator(tm);
  23. viewer.setSceneData(pGroup);
  24. viewer.run();
  25. return 0;
  26. }
  27. int main()
  28. {
  29. osgViewer::Viewer viewer;
  30. viewer.addEventHandler(new ChangeWindow);
  31. osg::Group *pGroup = new osg::Group;
  32. osg::MatrixTransform* mt = new osg::MatrixTransform;
  33. osg::Node*glider = osgDB::readNodeFile("glider.osg");
  34. mt->addChild(glider);
  35. osg::Vec3 ptS = osg::Vec3(0,0,0);
  36. osg::Vec3 ptE = osg::Vec3(-1000, 0, 0);
  37. osg::AnimationPath* path = createAnimationPath(ptS, ptE, 0, 1000);
  38. osg::NodeCallback* nc = 0;
  39. nc = new osg::AnimationPathCallback(path);
  40. osgGA::AnimationPathManipulator *pAn = new osgGA::AnimationPathManipulator(path);
  41. pGroup->addChild(mt);
  42. pGroup->addChild(osgDB::readNodeFile("cow.osg"));
  43. viewer.setCameraManipulator(pAn);
  44. viewer.setSceneData(pGroup);
  45. viewer.run();
  46. return 0;
  47. }


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/314924
推荐阅读
相关标签
  

闽ICP备14008679号