查看: 956|回复: 5

关于运动实现问题

[复制链接]

该用户从未签到

发表于 2011-10-22 17:16:40 | 显示全部楼层 |阅读模式
大家好;我想做一个起重机的主臂的绕Z轴转动一定角度后再做绕Y轴的转动,应该怎么实现啊?(主臂节点的父节点我设置了一个PositionAttitudeTransform节点用来做位置变换)
我单独做一个运动。可以用节点更新回调实现,同时做两个就不会了。 谢谢各位!

该用户从未签到

发表于 2011-10-22 23:17:45 | 显示全部楼层
回复 1# knightlixiao


    你把另一个相变动的节点通过参数传到更新回调中试试,应该可以。

该用户从未签到

 楼主| 发表于 2011-10-24 22:06:32 | 显示全部楼层
回复 2# osg_student


    您好,我是派生了两个节点回调做的,一个是实现回转,一个实现变幅。
然后怎么把这两个运动联系起来,先做完一个,再做另外一个。谢谢!
  1. // 申请一个节点回调类,完成转台节点的回转运动
  2. class DOF1NodeCallback : public osg::NodeCallback
  3. {
  4. protected:

  5. double rotation; // rotation 参数,用于控制回转角度

  6. public:
  7. DOF1NodeCallback( ): rotation(0.0){}

  8. virtual void operator()(osg::Node* node, osg::NodeVisitor* nv)
  9. {
  10. osg::PositionAttitudeTransform* DOF1 =
  11. dynamic_cast<osg::PositionAttitudeTransform*>(node);
  12. if(DOF1)
  13. {
  14. if( rotation < 50 )
  15. rotation += 0.1;
  16. else
  17. rotation -= 0.1;
  18. osg::Quat quat(osg::DegreesToRadians(rotation),osg::Z_AXIS);
  19. DOF1->setAttitude(quat);
  20. }
  21. traverse(node,nv);
  22. }
  23. };


  24. //申请一个节点回调类,完成主臂的变幅运动
  25. class DOF2NodeCallback : public osg::NodeCallback
  26. {
  27. protected:

  28. double elevation; //elevation参数,控制变幅角度
  29. bool up; //up 用来控制是否进行回转

  30. public:
  31. DOF2NodeCallback() : elevation(0.0){}

  32. virtual void operator()(osg::Node* node, osg::NodeVisitor* nv)
  33. {
  34. osg::PositionAttitudeTransform* DOF2 =
  35. dynamic_cast<osg::PositionAttitudeTransform*>(node);
  36. if(DOF2)
  37. {
  38. if(elevation > 20)
  39. up = false;
  40. if(elevation < -15)
  41. up = true;
  42. if(up)
  43. elevation += 0.05;
  44. else
  45. elevation -=0.05;
  46. osg::Quat quat1(osg::DegreesToRadians(elevation),osg::Y_AXIS);
  47. DOF2->setAttitude(quat1);

  48. }

  49. traverse(node,nv);
  50. }

  51. };
复制代码

该用户从未签到

发表于 2011-10-25 08:36:48 | 显示全部楼层
回复 3# knightlixiao


    你可以使用动画控制类,AnimationPath,可以压入运动路径的关键点来控制。最主要的是,可以通过设置时间点来控制两个运动的先后顺序。仅仅两个更新回调的话,没法保证运动先后顺序,会使得两个运动同时执行。

该用户从未签到

 楼主| 发表于 2011-10-25 09:34:24 | 显示全部楼层
回复 4# yugang2010


    哦,好的,我去试试看看!非常感谢!

该用户从未签到

 楼主| 发表于 2011-10-25 17:07:27 | 显示全部楼层
回复 4# yugang2010


    多谢!我用osg::AnimationPath类实现了我需要的运动!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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