查看: 1323|回复: 7

节点绑定疑惑,这段代码何解?

[复制链接]

该用户从未签到

发表于 2010-7-7 12:57:38 | 显示全部楼层 |阅读模式
本帖最后由 allen 于 2010-7-7 19:12 编辑

  1. struct transformAccumulator
  2. {

  3. //联系组节点
  4. bool attachToGroup(osg::Group* g);
  5. //得到矩阵
  6. osg::Matrix getMatrix();
  7. protected:
  8. //定义组节点智能指针
  9. osg::ref_ptr<osg::Group> parent;
  10. //Node节点
  11. osg::Node* node;
  12. };

  13. bool transformAccumulator::attachToGroup(osg::Group* g)
  14. {
  15. //定义bool 型变量
  16. bool success = false;
  17. //判断父节点非空
  18. if (parent != NULL)
  19. {
  20. //得到所有子节点数
  21. int n = parent->getNumChildren();
  22. //for循环,从父节点中去掉特定条件的node节点
  23. for (int i = 0; i < n; i++)
  24. {
  25. if (node == parent->getChild(i) )
  26. {
  27. parent->removeChild(i,1);
  28. //成功去掉返回true
  29. success = true;
  30. }
  31. }
  32. //否则返回false
  33. if (! success)
  34. {
  35. return success;
  36. }
  37. }
  38. //把特定节点赋给g,g是另一个新的组节点对象,用于
  39. g->addChild(node);
  40. return true;
  41. }
  42. ……
  43. transformAccumulator* tankWorldCoords = new transformAccumulator();

  44. //节点和组节点依附,followPAT节点是视点位置
  45. //矩阵
  46. tankWorldCoords->attachToGroup(followerPAT);

复制代码
看不明白attachToGroup函数的意思,想来应该是模型节点与视点“绑定”,节点矩阵已跟随视点矩阵更新。
这是依据海军教程代码改写。去掉路径生成,改为漫游操作方式。有兴趣的可以一快研究。

FollowNodeCamera.rar

14 KB, 下载次数: 140, 下载积分: 威望 1

程序有问题,未完成,有兴趣的可继续

该用户从未签到

发表于 2010-7-7 13:10:08 | 显示全部楼层
就是清空组节点,然后把当前节点加到组节点下

该用户从未签到

发表于 2010-7-7 13:35:47 | 显示全部楼层
这个函数似乎只是判断node是否在parent的子节点中,然后将其取出并设置给输入的节点g作为子节点。至于它具体有什么应用,就要结合整个程序来看了。海军教程本身已经比较老旧了,很多方法和思路都不符合现在的OSG架构,您在学习时需要注意避免受到其影响

该用户从未签到

 楼主| 发表于 2010-7-7 19:37:39 | 显示全部楼层
2# tianxiao888
不过node节点似乎没有指定任何值。这里是不是要指定下?node=tankNode;

该用户从未签到

 楼主| 发表于 2010-7-7 19:44:06 | 显示全部楼层
parent似乎也没初始化。那getnumchildren得来的n为几呢?似乎就知道g为followPAT。这个代码写的^

该用户从未签到

发表于 2010-7-8 09:40:17 | 显示全部楼层
片段代码,大概意思是那样了。
如array说的,教程太老了,跟现在的osg有点不太适应

该用户从未签到

 楼主| 发表于 2010-7-10 16:13:32 | 显示全部楼层
6# tianxiao888 那NodeTrackerManipulator如何实现节点跟随,不会用这个函数,节点跟随是不是很多实现方法?
新方法真的没思路啊

该用户从未签到

发表于 2010-7-12 08:29:24 | 显示全部楼层
可以直接参看NodeTrackerManipulator的源代码,osgGA库
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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