查看: 1610|回复: 10

关于nodecallback的一点疑惑

[复制链接]

该用户从未签到

发表于 2012-8-15 09:02:22 | 显示全部楼层 |阅读模式
  8  class RotateCallBack: public osg::NodeCallback
  9 {
  10  public:
  11     RotateCallBack():_rotateZ(0.0) {}
  12
  13     virtual void operator()(osg::Node* node, osg::NodeVisitor* nv)
  14     {
  15         osg:ositionAttitudeTransform* pat =
  16             dynamic_cast(node);
  17         if(pat)
  18         {
  19             osg::Vec3 vec(0, 0, 1);
  20             osg:uat quat = osg::Quat(osg:egreesToRadians(_rotateZ), osg::Z_AXIS);
  21             pat->setAttitude(quat);
  22
  23             _rotateZ += 0.10;
  24         }
  25
  26         traverse(node, nv);
  27     }
  28
  29  private:
  30     double _rotateZ;
  31 };
以这个回调函数为例,main函数中的调用部分为:
osg::ref_ptr pat = new osg::PositionAttitudeTransform();
pat->addChild(model);
pat->setUpdateCallback(new RotateCallBack() );
问题来了,回调函数中traverse(node, nv)应该是用来遍历当前节点(即pat)的回调函数之用,因为nv的默认mode为traverse_none,如何可以让回调运用到pat的子节点model的?

该用户从未签到

 楼主| 发表于 2012-8-15 09:03:47 | 显示全部楼层
请大牛们(如array)帮我,太困扰了。

该用户从未签到

发表于 2012-8-15 09:30:34 | 显示全部楼层
构造函数实现,没什么就是一个MODE

该用户从未签到

 楼主| 发表于 2012-8-15 09:33:08 | 显示全部楼层
什么意思,关键是这个“没什么”不能做到把回调函数运用到pat的子节点model的呢?求救楼主。

该用户从未签到

 楼主| 发表于 2012-8-15 09:52:25 | 显示全部楼层
可能我没说清楚,这个mode是指nv(nodevisitor)的visitormode,求大神明示。

该用户从未签到

发表于 2012-8-15 17:25:01 | 显示全部楼层
zlfaint 发表于 2012-8-15 09:52
可能我没说清楚,这个mode是指nv(nodevisitor)的visitormode,求大神明示。

我觉得,您可以吧节点访问器 和  回调 结合着使用。

该用户从未签到

发表于 2012-8-15 17:34:56 | 显示全部楼层
嗯 啥都没看明白的只能建议你以后贴代码用上面编辑框的《》这个!直接复制粘贴有些变成表情了

该用户从未签到

 楼主| 发表于 2012-8-15 22:53:33 | 显示全部楼层
虽然没有回答我的问题,7楼的建议也不错,我下回会注意的。

该用户从未签到

发表于 2012-8-18 13:22:51 | 显示全部楼层
说实话 我没完全看明白你的问题表述的是什么。。。
我的理解是你觉得 traverse(node, nv);遍历的是Pat,而不是其子节点model,不知道我理解的对不对?
但是这句话是干什么的~:osg::positionAttitudeTransform* pat = dynamic_cast(node);
还有建议你不要使用osg::positionAttitudeTransform,而是使用osg::MatrixTransform

该用户从未签到

发表于 2012-8-21 09:54:34 | 显示全部楼层
我在论坛里已经回答了,调用NodeCallback的是UpdaterVisitor,它本身已经是遍历所有子节点的模式了

该用户从未签到

 楼主| 发表于 2012-8-23 23:26:47 | 显示全部楼层
谢谢array,我懂了谢谢大家的热心帮助!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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