查看: 1201|回复: 4

回调嵌套问题

[复制链接]

该用户从未签到

发表于 2011-6-23 21:30:10 | 显示全部楼层 |阅读模式
本帖最后由 zhoujiajun2010 于 2011-6-23 21:49 编辑
  1. virtual void operator()(osg::Node *node, osg::NodeVisitor *nv)//更新回调二
  2. {
  3. osg::PositionAttitudeTransform *zhutuiqi = dynamic_cast<osg::PositionAttitudeTransform*>(node);
  4. if(zhutuiqi)
  5. {
  6. zhutuiqi->setPosition(osg::Vec3(0, 0, z ));
  7. z-=1;

  8. }
  9. }
  10. traverse(node, nv);
  11. }

  12. protected:
  13. float x;
  14. float y;
  15. float _angle;
  16. float rot;
  17. //float hudu;
  18. //float z;
  19. float z1;
  20. int _time;

  21. };
  22. /*更新回调1*/

  23. class FaSheDanCallback:public osg::NodeCallback
  24. {
  25. public:
  26. FaSheDanCallback():_angle(osg::PI),rot(osg::PI/6), /*hudu(0.0),*/ /*z(-100.0), */_time(0),x(0.0),y(0.0)/*,zizhu(0.0)*/ {}

  27. virtual void operator()(osg::Node *node, osg::NodeVisitor *nv)
  28. {
  29. osg::PositionAttitudeTransform *matrixfashe = dynamic_cast<osg::PositionAttitudeTransform*>(node);

  30. if(matrixfashe)
  31. {
  32. //直线
  33. if (z < 1000)
  34. {
  35. matrixfashe->setPosition(osg::Vec3(0, 0, z ));
  36. matrixfashe->setAttitude(osg::Quat(zizhu,osg::Z_AXIS));
  37. z += 1;
  38. zizhu+=osg::PI/30;
  39. if(zizhu>=2*osg::PI)
  40. {
  41. zizhu=0.0;
  42. }

  43. }

  44. if((y<200)&&(z>=1000))
  45. {

  46. x = 200+200*cos(_angle);
  47. y = 200+200*cos(_angle);
  48. z =1000+200*sin(_angle);
  49. matrixfashe->setAttitude(osg::Quat(hudu,osg::Vec3(1,-1,0))); //旋转模型
  50. matrixfashe->setPosition(osg::Vec3(x,y,z));
  51. _angle -= osg::PI/200;

  52. hudu -= osg::PI/200;
  53. if(hudu<-osg::PI_2)
  54. hudu=-osg::PI_2;
  55. ZhuTuiQi2->removeChild(ZhuTuiQi1.get());

  56. ZhuTuiQi1->addUpdateCallback(new ZhuTuiQi1Callback());//添加更新回调二

  57. }

  58. traverse(node, nv);
  59. }

  60. protected:
  61. float x;
  62. float y;
  63. float _angle;
  64. float rot;
  65. float z1;
  66. int _time;

  67. };
复制代码

我把三个模型通过PositionAttitudeTransform 连接成一个模型(这三个模型分别是ZhuTuiQi1,ZhuTuiQi2,Dantou),进行回调使其运动,当运动到一段时间后,让ZhuTuiQi1从这个模型分离出来,使ZhuTuiQi1按照另一种方始运动,ZhuTuiQi1->addUpdateCallback(new ZhuTuiQi1Callback());//添加更新回调二
但是发现分离后的模型不出现,这种情况应该怎样解决啊?谢谢

该用户从未签到

发表于 2011-6-24 20:55:01 | 显示全部楼层
请确认脱离后与世界坐标匹配~~~

该用户从未签到

 楼主| 发表于 2011-6-25 20:06:19 | 显示全部楼层
这个怎么理解啊,我的第二个回调里面的坐标,是直接用变量设得啊?比如z,直接对 z进行操作

该用户从未签到

发表于 2011-6-27 11:01:08 | 显示全部楼层
节点级联,后面的节点是相对前面节点的坐标啊

该用户从未签到

 楼主| 发表于 2011-6-30 16:00:20 | 显示全部楼层
哦,谢谢,我再看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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