查看: 2009|回复: 11

核爆冲击波效果 粒子系统

[复制链接]

该用户从未签到

发表于 2013-1-8 18:20:57 | 显示全部楼层 |阅读模式

本人想做一个核爆冲击波的效果,用粒子系统实现,各位大侠有没有好的建议,或例子供参考一下。

该用户从未签到

发表于 2013-1-8 18:50:29 | 显示全部楼层
好恐怖,怎么样子的

该用户从未签到

发表于 2013-1-9 07:46:15 | 显示全部楼层
osg现有的估计没有这个功能,考虑其他的方案或者成熟的粒子引擎

该用户从未签到

发表于 2013-1-9 09:53:13 | 显示全部楼层
我们来模拟,随便想个简单的算法,控制粒子移动就行了,

该用户从未签到

发表于 2013-1-9 09:53:54 | 显示全部楼层
我们来模拟,随便想个简单的算法,控制粒子移动就行了,

该用户从未签到

发表于 2013-1-9 09:54:25 | 显示全部楼层
不专业的模拟,随便想想就能数学建模吧

该用户从未签到

 楼主| 发表于 2013-1-9 10:14:09 | 显示全部楼层
不专业也行啊,大概要个样子就行,该如何建模呢

该用户从未签到

发表于 2013-1-9 11:49:36 | 显示全部楼层
核爆炸的数学模型肯定是需要您自己去建立的,然后用osgParticle或者Spark这样的库去实现都是可以的

该用户从未签到

 楼主| 发表于 2013-1-10 16:40:06 | 显示全部楼层
d:\1.jpg

该用户从未签到

 楼主| 发表于 2013-1-10 16:44:02 | 显示全部楼层
1.JPG

该用户从未签到

 楼主| 发表于 2013-1-10 16:55:16 | 显示全部楼层
代码如下,但是问题是,好像所有的粒子的运行轨迹一致导致,出现一个个很大的亮点,并没有预想的分散开形成预想的效果,问题到底在哪如何修改呢?项目难点,下周四要完成,各位大侠帮忙瞧一瞧,给个建议。
// apply a vortex-like acceleration. This code is not optimized,
    // it's here only for demonstration purposes.

    void operate(osgParticle:article *P, double dt)
    {
                static osgParticle::Particle *gP = P;
                double existTime = dt;

                //平面角
                static double circulTheta=360;

                //俯仰角
                static double circulPitch = 0;
                //球半径a
                static double circurRadius=30;

                //粒子运行1.5秒后进行球体轨迹运动
                if (P->getAge()>1.5)
                {
                        circulTheta -=0.0045;
                        circulPitch -=0.0045;
                        if (circulTheta>90)
                        {
                                circulTheta = 0;
                        }
                        if (circulPitch>360)
                        {
                                circulPitch = 0;
                        }
                        circulPitch = P->getCurrentAlpha();
                        circulPitch = P->ge;
                        osg::Vec3 tempPos = P->getPosition();               
                       
                        //计算粒子轨迹
                        y = circurRadius*cos((360-circulTheta)*osg::PI/180);
                        z = -(circurRadius*sin((360-circulTheta)*osg::PI/180));
                        x = circurRadius*sin(circulPitch*osg::PI/180);       
               
                        osg::Vec3 newpos;// = P->getPosition() + v * dt;
                        newpos[0] = x;
                        newpos[1] = y;
                        newpos[2] = z;


                        P->setPosition(newpos);  
                }               
        
       
                static double theta=360;

                //俯仰角
                static double pitch = 360;
                //双钮线最大半径a
                static double maxRadius=100;
                if (P->getAge()>5)
                {
                       
                        theta -=0.0045;
                        pitch -=0.0045;
                        if (theta<270)
                        {
                                theta = 360;
                        }
                        if (pitch<0)
                        {
                                pitch = 360;
                        }
                        osg::Vec3 tempPos = P->getPosition();                       

                        ////双钮线半径
                        lou = sqrt(maxRadius*maxRadius*cos(2*theta*osg::PI/180));               

                        y = lou*cos((360-theta)*osg::PI/180);
                        z = -(lou*sin((360-theta)*osg::PI/180));
                        x = lou*sin(pitch*osg::PI/180);                       

                        //  compute new position
                        osg::Vec3 newpos;// = P->getPosition() + v * dt;
                        newpos[0] = x;
                        newpos[1] = y;
                        newpos[2] = z;

                        P->setPosition(newpos);   

                }   
          
    }

该用户从未签到

发表于 2013-1-14 09:32:39 | 显示全部楼层
这可能是您的算法存在问题吧?您可以尝试打印一下Newpos来看看自己的计算是否正确?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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