查看: 1905|回复: 9

osg画轨迹的问题

[复制链接]

该用户从未签到

发表于 2011-5-14 16:31:01 | 显示全部楼层 |阅读模式
本帖最后由 chenwei2007gs 于 2011-5-15 10:05 编辑

我按下面的方法画轨迹,怎么画不出来,其中_body为一个运动的节点,继承自osg::MatrixTransform

  1. osg::ref_ptr<osg::Node> Parent::setdot()
  2. {
  3. osg::ref_ptr<osg::Geometry> geom= new osg::Geometry;
  4. osg::ref_ptr<osg::Vec3Array> track= new osg::Vec3Array;
  5. osg::ref_ptr<osg::Geode> geode=new osg::Geode;

  6. geom->setVertexArray(track.get());
  7. bb=_body->getBound();
  8. track->push_back(bb.center());
  9. if(track->getNumElements()>1) {
  10.   geom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::LINE_STRIP,0,track->getNumElements()));
  11.   osg::ref_ptr<osg::Vec4Array> c = new osg::Vec4Array();
  12.   geom->setColorArray(c.get());
  13.   geom->setColorBinding(osg::Geometry::BIND_PER_VERTEX);
  14.   c->push_back(osg::Vec4(1,0,0,1)); // 标记红色
  15. }
  16. geode->addDrawable(geom.get());
  17. track->dirty();
  18. return geode.get();

  19. }
  20. void Parent::update(void)
  21. {
  22. _body->addChild(setdot());
  23. }
复制代码

该用户从未签到

发表于 2011-5-14 17:22:27 | 显示全部楼层
参看osgGeometry例子

该用户从未签到

 楼主| 发表于 2011-5-14 20:04:39 | 显示全部楼层
回复 2# oman


    还是不行阿,我这个是动态的,麻烦您帮我看看,到底哪出错了,语句没毛病,就是轨迹画不出来,添加颜色后还是没画出来

该用户从未签到

发表于 2011-5-15 13:07:23 | 显示全部楼层
track->push_back(bb.center());
我大致看了一下,你就push了一个点怎么画线?

该用户从未签到

 楼主| 发表于 2011-5-15 19:13:32 | 显示全部楼层
回复 4# wangjunchao


    我把parent::setdot()放在parent::Update()下面了,然后在nodecallback里调用update(),这样相当于每帧更新都会调用setdot(),从而每次都会执行track->push_back(bb.center()),,这样track里面不是有很多点吗?难道这样不行????在线等。。。

该用户从未签到

发表于 2011-5-16 11:01:14 | 显示全部楼层
setdot()每帧都在添加新的几何体?我想这个疯狂的程序很快会把您的系统吃干净……

该用户从未签到

 楼主| 发表于 2011-5-16 18:31:00 | 显示全部楼层
回复 6# array


    没有,setdot()只是用来画_body中心的轨迹,每次更新,都会把这一时刻_body的中心push到track中,然后画轨迹,但我不知道哪里错了,轨迹就是画不出来,程序运行没提示错误!

该用户从未签到

发表于 2011-5-17 10:34:24 | 显示全部楼层
您的代码本身已经很明确的指出了这个疯狂的行为:

  1. osg::ref_ptr<osg::Node> Parent::setdot()
  2. {
  3.     osg::ref_ptr<osg::Geometry> geom= new osg::Geometry;
  4.     ...
  5.     geode->addDrawable(geom.get());
  6. }
复制代码

该用户从未签到

 楼主| 发表于 2011-5-17 18:54:46 | 显示全部楼层
回复 8# array


    看不大出来,我只是个初学者,还请array指点

该用户从未签到

发表于 2011-5-17 21:12:06 | 显示全部楼层
您应该记录一定数量的点,在更新第一个点的位置之后,后续的点(一定数量)进行位置的后传赋值,如果总是添加新的Geom那么系统肯定受不了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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