查看: 1598|回复: 3

MFC-自定义事件-菜单响应-模型绘制

[复制链接]

该用户从未签到

发表于 2012-9-3 20:30:12 | 显示全部楼层 |阅读模式
根据CWorld老师的自定义事件做的一个对菜单项的响应,想点击菜单项中的球体时,绘制出球体,此为背景。
一步步做,点击菜单项的时候,先试验下调用那个可爱的牛,正常,所以菜单项响应正常。
接下来绘制球体,并将球体结点加入到root结点下,编译通过,但运行时出现了dbgdel.cpp访问冲突,指向了下面这句:
/* verify block type */
            _ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));
0903.jpg
具体代码:
   case SPHERE:
        //root->addChild(osgDB::readNodeFile("cow.osg"));//------正常------//
        root->addChild(drawSphere());
        break;
....
球体的绘制:
osg::Node* DrawGeometry::drawSphere()
{
        osg::ref_ptr<osg::Geode> geode=new osg::Geode;
        osg::ref_ptr<osg::Group> root=new osg::Group();
        float radius=5.0;
        osg::ref_ptr<osg::TessellationHints> hints=new osg::TessellationHints;
        hints->setDetailRatio(2.0f);
        osg::ref_ptr<osg::ShapeDrawable> shape;
        shape=new osg::ShapeDrawable(new osg::Sphere(osg::Vec3(0.0f,0.0f,0.0f),radius),hints.get());
        shape->setColor(osg::Vec4(0.8f,0.8f,1.0f,1.0f));
        geode->addDrawable(shape.get());
        root->addChild(geode.get());
        return (osg::Node*)root;
}
问题出在哪啊?

该用户从未签到

发表于 2012-9-3 23:06:27 | 显示全部楼层
测试了下,问题好像出在最后一句话,改为root.release()试试。
具体的原因,我的c++功底不扎实,解释不太好。

该用户从未签到

发表于 2012-9-4 08:08:56 | 显示全部楼层
析构的问题

该用户从未签到

发表于 2012-9-6 17:15:03 | 显示全部楼层
这个经典的智能指针问题的解答应该可以在市面上的每本书找到。简单来说就是返回裸指针之前必须解除智能指针的管理,否则函数生命周期结束时将释放掉对象的内存,得到的返回值也就成了无用的废物
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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