查看: 4215|回复: 10

粒子系统的问题

[复制链接]

该用户从未签到

发表于 2008-3-26 18:48:42 | 显示全部楼层 |阅读模式
osg::ref_ptr<osgParticle:articleSystem>ps = new osgParticle::ParticleSystem;
    ps->setDefaultAttributes("C:\\Program Files\\OpenSceneGraph\\data\\rain.rgb", true, false,0);
在编译时没有错误,可是在运行时却出错了,为什么呢?

该用户从未签到

发表于 2008-3-26 18:53:20 | 显示全部楼层
原帖由 lawn 于 2008-3-26 18:48 发表
osg::ref_ptrps = new osgParticle:articleSystem;
    ps->setDefaultAttributes("C:\\Program Files\\OpenSceneGraph\\data\\rain.rgb", true, false,0);
在编译时没有错误,可是在运行时却出错了,为什么呢?


这个可能性是很多的,能给出更多的提示信息吗?

该用户从未签到

 楼主| 发表于 2008-3-27 10:30:07 | 显示全部楼层
原帖由 array 于 2008-3-26 18:53 发表


这个可能性是很多的,能给出更多的提示信息吗?


错误信息是这样的:
wrong 1.jpg
wrong2.jpg

是在MFC中使用的
MainFrm.cpp是这样调用的:
Snow * snow=new Snow();
snow->m_bTheRain=false;
snow->m_fTheSpeed=1.0;
snow->m_fTheNum=500;
snow->m_fTheSize=0.75;
osg::ref_ptr<osg::Group> snowm=new osg::Group;
snow->CreateSnow(snowm);
mRoot->addChild(snowm.get());
下面是snow类的原文件,基本上是根据osg2.0里面的粒子osgparticle改的

bardemo.rar (2.81 KB, 下载次数: 138)

该用户从未签到

发表于 2008-3-27 13:37:52 | 显示全部楼层
您提供的代码应该是可以运行的~~如下图,当然我没有用MFC
您可以查看一下是不是其它的部分出了问题,比如mRoot或者其它节点指针的初始化是否正确等等
test.PNG

该用户从未签到

发表于 2008-3-27 17:06:53 | 显示全部楼层

你所说的不是OSG的问题,估计是系统问题而已~~~~~网上不少人碰到这种问题,不过,我还没碰到过,呵呵~~~~

该用户从未签到

 楼主| 发表于 2008-3-27 21:58:30 | 显示全部楼层
原帖由 array 于 2008-3-27 13:37 发表
您提供的代码应该是可以运行的~~如下图,当然我没有用MFC
您可以查看一下是不是其它的部分出了问题,比如mRoot或者其它节点指针的初始化是否正确等等



我重新建了个win32工程
编译没问题,可运行就是有问题,我实在不知道错误在那里
这是那个工程
snow.rar (786.23 KB, 下载次数: 194)

该用户从未签到

发表于 2008-3-27 23:06:54 | 显示全部楼层
原帖由 lawn 于 2008-3-27 21:58 发表
我重新建了个win32工程
编译没问题,可运行就是有问题,我实在不知道错误在那里
这是那个工程
106
帮忙看看吧,谢谢奥,麻烦了


有两个地方需要解决:
1、修改您的工程设置,在链接库->附加依赖库中不要把osgParticle.lib和osgParticled.lib都添加进去,这样会产生混乱以至错误,而且无法预知错误的原因。修改之后可以解决您一开始遇到的问题
2、既然您决定使CreateSnow函数的形参为osg::ref_ptr<osg::Group>类型,那么请把main.cpp的实参root也定义为osg::ref_ptr<osg::Group>而非osg::Group*,否则形参采用内存计数就没有任何意义了,而且可能会造成系统出错。事实上我在解决了第一个问题之后,确实因此遇到了新的内存问题
事实上,ref_ptr的作用之一就是可以替代全局变量和类成员变量的作用,使得我们可以在某个函数中自由地分配新的内存空间,并且不必关心它如何释放的问题,系统会自动在引用计数为0时将其卸载;换句话说,如果您有自己的方案来处理此类状况(例如使用全局量或类成员),就完全不必使用ref_ptr了,以免受其所限

该用户从未签到

 楼主| 发表于 2008-3-28 09:23:45 | 显示全部楼层
原帖由 array 于 2008-3-27 23:06 发表


有两个地方需要解决:
1、修改您的工程设置,在链接库->附加依赖库中不要把osgParticle.lib和osgParticled.lib都添加进去,这样会产生混乱以至错误,而且无法预知错误的原因。修改之后可以解决您一开始遇到的问 ...



多谢,呵呵

该用户从未签到

发表于 2008-3-28 12:16:58 | 显示全部楼层
:L 带d的为debug版,不带d的为release版,两个是不同时放在一起的~~~~~~~~~~~~~否则,链接错误未知~~~~~~~~~~~
  • TA的每日心情
    开心
    2019-11-11 10:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2008-3-28 15:21:29 | 显示全部楼层
    题外话:

    看到四楼的回帖刚注意到:那头著名的牛是母奶牛

    该用户从未签到

    发表于 2008-3-29 21:54:00 | 显示全部楼层
    是不是类型检测出问题了!@
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

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

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

    联系我们

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