查看: 1587|回复: 7

交运算出错,stack aroud the variable 'iv' is corrupted

[复制链接]

该用户从未签到

发表于 2009-9-3 10:36:41 | 显示全部楼层 |阅读模式
本帖最后由 back 于 2009-9-3 10:38 编辑

void Tabletop::touchJudge(void)
{
   if(touchFlag)                                                          //touchFlag为开启碰撞标志  
   {          
          if(k_flag!=k)
          {
           osgUtil::IntersectVisitor iv;          
           osg::Vec3 a,b;
           a=osg::Vec3(0,-10,-5);
           b=osg::Vec3(0,10,-5);
                                  
           osg::ref_ptr<osg::LineSegment> line = new osg::LineSegment(knife_pos + a,knife_pos + b); // 创建判断线条
          
           iv.addLineSegment(line.get());                                                 // 把线条加入iv中
          
           this->accept(iv);                                                           // 把iv加到被碰撞的模型中          

           if (iv.hits())                                                                 // 如果有线条与被碰模型碰到则为true
           {
                  touch=true;
        //          osg::Vec3 ip = hitlist1.front().getWorldIntersectPoint();
           }
           else
                   touch=false;       
          }
   }
}


关于内存分配,指针调用,堆栈等问题,没学好,不知道这里的问题是什么问题,谢谢~

该用户从未签到

发表于 2009-9-3 12:52:53 | 显示全部楼层
knife_pos是否初始化~~~~

该用户从未签到

 楼主| 发表于 2009-9-3 12:59:35 | 显示全部楼层
已经在类Tabletop的 构造函数中 初始化过了

该用户从未签到

 楼主| 发表于 2009-9-3 13:04:20 | 显示全部楼层
本帖最后由 back 于 2009-9-3 13:06 编辑

ms已经解决:

void Tabletop::update(void)
{
        knife_pos=osg::Vec3(0,0,k);   //这里先设定knife_pos
        k_flag=k;                                 //保证k不变的时候,不用再重新画检测线段。
        this->touchJudge();
        knife->setPosition(knife_pos);
       
}

该用户从未签到

 楼主| 发表于 2009-9-3 13:07:10 | 显示全部楼层
本帖最后由 back 于 2009-9-3 13:40 编辑

还是没解决。。 我再看看吧

这样的update函数中 this->touchJudge()在k_flag=k之后,那么没有执行if里面的内容。

这个碰撞检测函数还是有问题的

该用户从未签到

发表于 2009-9-3 23:43:49 | 显示全部楼层
你的问题主要是你的变量初始化控制的问题~~~~~

该用户从未签到

 楼主| 发表于 2009-9-4 10:05:16 | 显示全部楼层
那请问变量knife_pos的初始化该怎么控制呢?

我定义的是类Tabletop的共有成员,类型是osg::vec3的

该用户从未签到

 楼主| 发表于 2009-9-7 13:14:01 | 显示全部楼层
发现,使用另外一台机器,并且是osg2.9.4-vs2008,就没有此类错误了。
前面用的是个人的笔记本,osg2.8.2-vs2003。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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