查看: 941|回复: 4

求救更新回调问题:如何批量更新一些相互关联的运动物体

[复制链接]

该用户从未签到

发表于 2014-7-11 09:09:03 | 显示全部楼层 |阅读模式
目标:通过更新回调,控制10辆(或更多)车的运动
问题:如果是独立的控制某辆车的运动,通过回调类内部函数进行计算即可。但是,通过:10辆车之间相互关联,包括碰撞检测/超车等行为,所以需要统一控制,这该如何解决呀?求救……
失败的,错误的尝试:在PreFrameUpdate( ) 或 PostFrameUpdate() 函数内计算/控制---这是错误的!


更新回调示例源码:(来自flysky的源码)
//从osg::NodeCallback继承一个新类,实现spaceship的回调
class SpaceShipCallback :public osg::NodeCallback
{
public:
        SpaceShipCallback():angle(0)
        {
                //
        }

        virtual void operator()(osg::Node* node ,osg::NodeVisitor* nv)
        {
                //创建矩阵变换节点
                osg::ref_ptr<osg::MatrixTransform> mtCow = dynamic_cast<osg::MatrixTransform*>(node);
                //创建矩阵
                osg::Matrix mr ;
                //旋转,绕Z轴,每次旋转angle角度
                mr.makeRotate(angle,osg::Vec3(0.0f,0.0f,1.0f));
                //设置矩阵
                mtCow->setMatrix(mr);

                angle+= 0.01 ;

                //继续传递参数,执行其他设置回调的节点
                traverse( node, nv );
        }

public:

        //旋转角度
        double angle ;
};

该用户从未签到

 楼主| 发表于 2014-7-11 10:47:06 | 显示全部楼层
本帖最后由 caoyishi 于 2014-7-11 10:56 编辑

到群里请教了,给出了方法(正在试做),贴出来,供各位分享。多谢array/马风:
阿Ray
要统一控制的话,就用一个vector存储所有车的数据,然后在一个UpdateCallback或者EventHandler中统一处理喽
风马
2014/7/11 10:40:17
这个是控制逻辑问题,可以写个事件,在事件里统一更新吧
阿Ray
2014/7/11 10:40:47
都可以的,与场景图无关的操作,本来就是自己怎么喜欢怎么来

该用户从未签到

发表于 2014-7-11 11:26:37 | 显示全部楼层
我也是vector实现的

该用户从未签到

 楼主| 发表于 2014-7-11 21:49:05 | 显示全部楼层
taylor66 发表于 2014-7-11 11:26
我也是vector实现的

谢谢! 基本实现了!

该用户从未签到

发表于 2014-8-19 11:41:59 | 显示全部楼层
有代码学习一下吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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