查看: 1355|回复: 4

求教!!!急,关于包围盒的建立(这次删的很短了,麻烦各位再帮忙看看)

[复制链接]

该用户从未签到

发表于 2011-6-3 02:40:24 | 显示全部楼层 |阅读模式
本帖最后由 whychina 于 2011-6-3 21:30 编辑

我添加包围盒后编译没问题 ,可运行时自动退出,不知道我包围盒的添加出什么问题了

  1. osg::ref_ptr<osg::MatrixTransform> cOSG::DrawModule(int ModuleIndex)
  2. {
  3. //每个杆件开始节点,均为绿色
  4. osg::ref_ptr<osg::MatrixTransform> module=new osg::MatrixTransform;

  5. //***************设置包围盒参数********************//由我添加的第一部分
  6. osg::ref_ptr<osg::Geode> box = new osg::Geode;
  7. osg::ref_ptr<osg::ShapeDrawable> sd = new osg::ShapeDrawable(new osg::Box(osg::Vec3(0.0f,0.0f,0.0f),1));
  8. sd->setColor(osg::Vec4(1.0,1.0,0.0,1.0));//设置颜色绿色
  9. osg::ref_ptr<osg::StateSet> state = sd->getOrCreateStateSet();
  10. osg::ref_ptr<osg::PolygonMode> pm = new osg::PolygonMode(osg::PolygonMode::FRONT_AND_BACK, osg::PolygonMode::LINE);
  11. state->setAttributeAndModes(pm.get());//也设置线框模式
  12. osg::ref_ptr<osg::LineWidth> lw =new osg::LineWidth(2.0);
  13. state->setAttribute(lw.get());//设置线条粗细
  14. box->addDrawable(sd.get());
  15. //***************设置包围盒参数********************//由我添加的第一部分(完)

  16. switch(ModuleIndex)
  17. {
  18. case 1:
  19. {
  20. osg::ref_ptr<osg::MatrixTransform> mtPole1=new osg::MatrixTransform;
  21. mtPole1->addChild(DrawBox(osg::Vec3(0.0,0.0,0.0),0.115,0.115,0.115,osg::Vec4(1.0,1.0,0.0,1.0)).get());////////
  22. module=mtPole1;
  23. //*************** 计算包围盒********************//由我添加的第二部分
  24. osg::ref_ptr<osg::MatrixTransform> boxBounding1=new osg::MatrixTransform;//mtPole1 的包围盒节点
  25. osg::ComputeBoundsVisitor boundvisitor1;
  26. mtPole1->accept(boundvisitor1);//用headTrans节点去接受这个访问器
  27. osg::BoundingBox bb1;

  28. osg::BoundingBox localBB = boundvisitor1.getBoundingBox();
  29. osg::Matrix localToWorld =
  30. osg::computeLocalToWorld( mtPole1->getParent(0)->getParentalNodePaths()[0] );
  31. for (unsigned int i = 0; i < 8; i++)
  32. {
  33. bb1.expandBy(localBB.corner(i) * localToWorld);
  34. }
  35. boxBounding1->setMatrix(osg::Matrix::scale(bb1.xMax()-bb1.xMin(),bb1.yMax()-bb1.yMin(),bb1.zMax()-bb1.zMin())
  36. *osg::Matrix::translate(bb1.center()));
  37. boxBounding1->addChild(box.get());
  38. mtPole1->addChild(boxBounding1);
  39. //*************** 计算包围盒********************//由我添加的第二部分(完)
  40. break;
  41. }
  42. default:
  43. break;
  44. }
  45. return module;
  46. }

复制代码

该用户从未签到

发表于 2011-6-3 07:28:35 | 显示全部楼层
请把您的代码精简一下

该用户从未签到

发表于 2011-6-3 11:15:14 | 显示全部楼层
代码也太长了吧,说点关键的就好了嘛

该用户从未签到

发表于 2011-6-3 13:13:32 | 显示全部楼层
my god!Are you kidding?

该用户从未签到

发表于 2011-6-7 08:25:23 | 显示全部楼层
悉心调试您自己的代码,就可以快速找到问题所在。您现在给出的部分代码我看不出有什么显著的毛病,我想您的问题不一定存在于这个函数当中
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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