查看: 1279|回复: 10

自定义刚体运动的更新回调的问题:Stack overflow

[复制链接]

该用户从未签到

发表于 2012-3-28 16:39:22 | 显示全部楼层 |阅读模式
我为刚体运动路径写了一个更新回调,规划好第一个路径运动的时候是可以的,第一个路径完成后连续规划好第二个路径再运动的时候出现如下错误:
Unhandled exception at 0x00677a19 in **.exe: 0xC00000FD: Stack overflow.

代码如下:
void UpdateCallBackxy:perator()(osg::Node* node, osg::NodeVisitor* nv)
{
        if (tip == "x")//路径适合
        {
                for (Ms;Ms<DZs;Ms++)
                {
                        if (CMstyle[Ms] == "1")
                        {
                                if (CH1<glk)
                                {       
                                                                                float q1 = x1;
                                        CD.motion(q1);
                                        Ms=Ms;
                                        break;
                                }
                        }
                        if (CMstyle[Ms] == "2")
                        {       
                                if(CH2<glk)
                                {       
                                        float q1 = x2;
                                        CD.motion(q1);
                                        Ms=Ms;
                                        break;
                                }
                        }
                }
        }

        if (tip != "y")//路径不适合
                      xVx1->reset();    //l回到起始位置

        //继续遍历
        traverse(node,nv);//继续遍历(鄙人猜想:是不是这儿错了呢?满足要求后如何停止遍历呢)
}

这是怎么回事呢?谢谢帮助~!~!

该用户从未签到

 楼主| 发表于 2012-3-28 21:00:19 | 显示全部楼层
还没搞出来,到底怎么回事啊?

该用户从未签到

 楼主| 发表于 2012-3-29 09:06:01 | 显示全部楼层
在线等

该用户从未签到

 楼主| 发表于 2012-3-29 11:17:19 | 显示全部楼层
单步运行时,走过traverse(node,nv)后,还会出现“there is no source code available for the current location”的提示

该用户从未签到

发表于 2012-3-29 18:09:33 | 显示全部楼层
给出的代码不足以帮助判断,traverse()本身不会有问题

该用户从未签到

发表于 2012-3-29 18:22:20 | 显示全部楼层
operator() 函数调用次数过多? 可以考虑打印出来,你调用了多少次 operator() ,在遍历什么类型的节点,等等,来帮助你找到问题所在

该用户从未签到

 楼主| 发表于 2012-3-29 20:37:29 | 显示全部楼层
本帖最后由 glk 于 2012-3-29 20:50 编辑
array 发表于 2012-3-29 18:09
给出的代码不足以帮助判断,traverse()本身不会有问题


我把更新回调里面的内容全部注释掉了,还是出现原来的错误,调用更新回调的程序是:
UC.xVx1->setAnimationPath(path1);
zhuantaiDOF->setUpdateCallback(UC.xVx1);
zhuantaiDOF->addUpdateCallback(&UC);    //glk自定义转台更新回调(UC是定义的更新回调的对象)

该用户从未签到

 楼主| 发表于 2012-3-29 20:46:23 | 显示全部楼层
xuganggm 发表于 2012-3-29 18:22
operator() 函数调用次数过多? 可以考虑打印出来,你调用了多少次 operator() ,在遍历什么类型的节点,等 ...

operator() 每一帧调用一次,遍历添加了更新回调的PositionAttitudeTransform节点,我刚刚把operator() 里的东西都注释了,结果还是原来的错误~~~谢谢帮助

该用户从未签到

发表于 2012-3-30 09:52:01 | 显示全部楼层
信息依然十分不全,请给出完整的两个updatecallback代码

该用户从未签到

 楼主| 发表于 2012-3-30 10:00:13 | 显示全部楼层
解决了,我把addUpdateCallback(&UC)添加到了zhuantaiDOF节点的根节点处就可以了

该用户从未签到

 楼主| 发表于 2012-3-30 10:16:28 | 显示全部楼层
array 发表于 2012-3-30 09:52
信息依然十分不全,请给出完整的两个updatecallback代码

谢谢arry,我把setUpdateCallback(&UC)添加到了zhuantaiDOF节点的根节点处就可以了,addUpdateCallback(&UC)改成了setUpdateCallback(&UC)可以运行,而改成原来的addUpdateCallback(&UC)就不行了,这是怎么回事啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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