查看: 1383|回复: 5

利用MatrixTransform平移节点 为何会出现两个图像?

[复制链接]

该用户从未签到

发表于 2012-11-25 10:41:32 | 显示全部楼层 |阅读模式

  1. void TestMTN(osg::ref_ptr<osg::Node> node)
  2. {
  3.         osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer();
  4.         osg::ref_ptr<osg::Group> group = new osg::Group();
  5.         osg::ref_ptr<osg::MatrixTransform> mt = new osg::MatrixTransform();

  6.         mt->addChild(node.get());
  7.         mt->setMatrix(osg::Matrixd::translate(osg::Vec3(20.0f,0.0f,0.0f)));

  8.         group->addChild(mt.get());
  9.         group->addChild(node.get());

  10.    
  11.        
  12.        
  13.         viewer->setSceneData(group.get());
  14.         viewer->realize();
  15.         viewer->run();

  16.        
  17. }
  18. void main()
  19. {
  20.        
  21.        
  22.        
  23.         osg::ref_ptr<osg::Node> node = osgDB::readNodeFile("cow.osg");
  24.        
  25.         TestMTN(node);
  26.        
  27.        
  28. }
复制代码
无标题.png

该用户从未签到

 楼主| 发表于 2012-11-25 10:42:33 | 显示全部楼层
本帖最后由 lanbomegp 于 2012-11-25 10:43 编辑

请问怎么样才能只保留一个图像?
就是说平移后的那个牛

该用户从未签到

发表于 2012-11-25 11:11:24 | 显示全部楼层
lanbomegp 发表于 2012-11-25 10:42
请问怎么样才能只保留一个图像?
就是说平移后的那个牛

  mt->addChild(node.get());
  group->addChild(mt.get());
  group->addChild(node.get());

该用户从未签到

发表于 2012-11-25 20:58:58 | 显示全部楼层

该用户从未签到

发表于 2012-11-26 08:10:28 | 显示全部楼层
        group->addChild(mt.get());
        group->addChild(node.get());

该用户从未签到

发表于 2012-11-26 10:10:21 | 显示全部楼层
在osg中,节点的组织是Composite设计模式的典型的应用,它的场景组织是一个树状结构,你在绘制场景之前可以先把节点树构造好,再根据你所构造的树构造场景就是了。
在这里你构造的树如下:
|group
|------mt
|        |----node
|------node

所以当然会出现两个牛了....
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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