查看: 1447|回复: 2

更新回调的问题

[复制链接]

该用户从未签到

发表于 2010-4-28 02:10:51 | 显示全部楼层 |阅读模式
class UpdateCallback : public osg::NodeCallback
{
public:
     //构造函数
    UpdateCallback(A* a, B* b, C& c, osg::Node* nd)
    {
    }
    ~UpdateCallback()
    {
    }
    virtual void operator()(osg::Node* node, osg::NodeVisitor* nv)
    {}

private:
    A* aa;
    B* bb;
    C cc;
    osg::Node* nod;
};

///////////////////////////////////////////////////////////////////////////
        while(!viewer->done())
        {
                osg->update();        //这个函数里执行更新回调。。

                osg->PreFrameUpdate();
                viewer->frame();
                osg->PostFrameUpdate();
                //Sleep(10);         // 让其它程也占用CPU,放出10MS
        }
请问像上面那样写回调类可以么(给他设了好几个成员变量,因为要对一些对象进行求交运算),执行效率会不会很低?另外后面把执行更新回调的函数放在while循环里可以么,我是在mfc下的。
还有一个小问题,如果需要将一些运动对象让它在地上运动,当对象很多时候,与地形的求交有没有什么好办法,我发现在当对象很多的时候的update要占很长的时间。。。3q

该用户从未签到

发表于 2010-4-28 08:30:39 | 显示全部楼层
给他设了好几个成员变量,因为要对一些对象进行求交运算,执行效率会不会很低

只有4个成员变量,这实现是不值一提的。不知道您为什么要这么问~~

后面把执行更新回调的函数放在while循环里可以么
这说明您恐怕没有理解回调的意义。回调通过setUpdateCallback设置给某个节点之后,它会在每帧中被自动执行,也就是说frame()函数已经包含了对回调类的调用。您这里的做法完全是多余的~~

当对象很多时候,与地形的求交有没有什么好办法
OSG的射线求交算法速度很快,如果您的运动对象没有超过100个的话,我想您不必考虑这个问题;否则的话,您不妨先考虑一下自己的设计方案是否可行?

该用户从未签到

发表于 2010-4-28 09:08:06 | 显示全部楼层
给相关节点对象设置setUpdateCallback就可以回调了,不需要在循环里手动添加代码的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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