编程模拟自然(四):粒子系统

  昔者羿请毋死之药于西王母,羿妻姮娥窃服之以奔月,为月精也。后世传毋死之药实为粒子系统,嫦娥用它创造了云雾,这才腾云驾雾到了月宫。

  “去,把你家长叫来。”

  元本想找嫦娥要个说法,却不想不能进入广寒宫百丈之内。

 第一章 第零章去哪了

  “你妈呢,怎么就你出来了?”

  “娘说她出不来宫殿,不过让我把这东西给你,算作毁掉树的补偿。”无名儿回答道。

  “什么东西?”

  “娘说这是粒子系统,对先生一定有用。”

  “好,东西我收下,也算原谅你了。”抬眼看到宫殿上方森冷的三个字,元突然不想在这里再待一刻。

  大人们似乎都被困在某个地方不能脱身,桂林中砍树的男子和这宫中的仙子就是如此,自己又何尝不是呢,只是...元突然想起了无名儿,或许没有什么能困住一个小孩吧。

  ......

  “先生那棵树真是你种的吗?”无名儿跟了上来。

  “当然,我可是至高无上的神,种树还不是小...”

  “你妈有告诉你粒子系统怎么用吗?”

 第二章 成长在于积累

  “娘说不积跬步无以至千里,不积小流无以成江海。”

  “量变是质变的必要准备,量变发展到一定的程度时....”元一边作着自己的理解。

粒子数目:300,呈放射状喷射

编程模拟自然(四):粒子系统_第1张图片

粒子数目:3000,放射状喷射

编程模拟自然(四):粒子系统_第2张图片

粒子数目:30000,放射状喷射

编程模拟自然(四):粒子系统_第3张图片

  当粒子数量足够多的时候就可以模拟许多事物。

 第三章 生命在于运动

  “娘还说五行皆各有藕,藕之中又有藕焉,而万物之变遂至于无穷。”

  “发展是绝对的,矛盾是事物运动变化的根本动力...

粒子数目:30000,环绕动点 粒子大小:1

编程模拟自然(四):粒子系统_第4张图片

粒子数目:30000,环绕动点 粒子大小:2

编程模拟自然(四):粒子系统_第5张图片

  赋予每个粒子加速度,速度,质量,颗粒大小属性即可。

 第四章 新生在于毁灭

  “还说天下之物皆以有为生,以无为本,枯荣代谢而弥见其新。”

  “知道了,事物是必然向前发展的,旧事物则走向衰亡,新事物必将取代旧...”

粒子数目:30000,环绕动点 粒子效果:水纹

编程模拟自然(四):粒子系统_第6张图片

粒子数目:30000,向上喷射 粒子效果:烟雾

编程模拟自然(四):粒子系统_第7张图片

  计算和内存资源都是有限的,粒子源不可能向外无限生成粒子,要及时回收粒子。

  一个方法是给定粒子生命周期,达到时限时就初始化数值。

 第零章 第一章不识循环链表为何物

  “额...还说...要生动写实,嗯,就是这样说的。”

  “这是你说的吧。”

粒子仿真落叶

编程模拟自然(四):粒子系统_第8张图片

粒子仿真飘雪

编程模拟自然(四):粒子系统_第9张图片

  把粒子绘制成指定的图像,并指定运动规则即可。

Imports System.Numerics
Imports Windows.UI
''' <summary>
''' 粒子类,表示一个拥有加速度、加速度和位置矢量的抽象粒子
''' </summary>
Public Class Walker
    Public ParentSpace As BaseSpace '粒子父空间
    Public Property Location As Vector2 '位置矢量
    Public Property Velocity As Vector2 '速度
    Public Property Acceleration As Vector2 '加速度
    Public Property Mass As Single = 10.0 '质量大小
    Public Property Age As Single = 0 '生命周期
    Public Property ImageSize As Single = 1 '粒子图像的大小
    Public Property myColor As Color '粒子颜色
    Dim Rnd As New Random
    ''' <summary>
    ''' 初始化一个粒子
    ''' </summary>
    ''' <param name="nSpace">粒子父空间,该空间初始化所有粒子</param>
    ''' <param name="LocationX">粒子初始坐标X分量</param>
    ''' <param name="LocationY">粒子初始坐标Y分量</param>
    Public Sub New(ByVal nSpace As BaseSpace, ByVal LocationX As Single, ByVal LocationY As Single)
        ParentSpace = nSpace
        Location = New Vector2(LocationX, LocationY)
        Velocity = New Vector2(0, 0)
        Acceleration = New Vector2(0, 0)
    End Sub
    ''' <summary>
    ''' 更新粒子位置,重绘每帧图像前调用该方法
    ''' </summary>
    Public Sub Move()
        Velocity += Acceleration '更新速度
        Velocity.LimitMag(5) '粒子限速
        Location += Velocity '更新位置
    End Sub
End Class
View Code

 

 后记

  ......两日后。

  “先生快跑啊,天狗来食月啦!”无名儿大喊道。

  “别怕,让我与它会会。”

  “汪汪...呜...汪...”

  “汪汪汪...哇呜...”

  半小时后…

  “先生你会和天狗交流诶!”无名儿眼睛里冒着小星星。

  “学着点,这可是程序猿的必备技能。”

预知前情,请看上回分解。原创系列博文,转载请注明出处。

你可能感兴趣的:(编程模拟自然(四):粒子系统)