If you're seeing this message, it means we're having trouble loading external resources on our website.

如果你被网页过滤器挡住,请确保域名*.kastatic.org*.kasandbox.org 没有被阻止.

主要内容

粒子系统简介

1982年, 卢卡斯电影有限公司的研究员威廉·里夫斯正在拍摄电影 《Star Trek II:可汗的怒吼》。影片的大部分内容都围绕着创世纪装置,这是一枚鱼雷,当击中一个贫瘠、没有生命的星球时,它有能力重组物质, 创造一个适合殖民的世界。在这一过程中,存在“地球化”环节,一堵火墙在星球表面荡起波澜:
可汗学院视频播放器
术语 粒子系统,是计算机图形中一种非常常见和有用的技术,是在创造这种特殊的效果时创造出来的。
“粒子系统是许多微小粒子的集合,这些粒子共同代表一个模糊的物体。在一段时间内,粒子被生成到一个系统中,在系统内部移动和变化, 并在系统中死亡。” —威廉·里夫斯,“ 粒子系统—一种模拟模糊对象类的技术”,文献 ACM Transactions on Graphics 2:2 (1983年4月), 92。
自20世纪80年代初以来,粒子系统已被用于无数的电子游戏、动画、数字艺术作品和装置中, 以模拟各种不规则的自然现象,如火灾、烟雾、瀑布、雾、草、气泡等。
本节将专门研究粒子系统编程的实现策略。我们如何组织代码?我们在哪里存储与单个粒子和与整个系统相关的信息?我们将研究的示例将侧重于管理与粒子系统关联的数据。本次针对粒子的练习只使用简单形状,也只应用最基本的行为 (如重力)。但是,通过学习此框架并以更有趣的方式构建来呈现粒子与计算行为,您可以实现各种效果。
如上所述,粒子系统是简单对象的集合。 我们之前已经接触过对象的编程集合 —— 就像模拟弹跳球的Movers数组一样。 但对于粒子系统,我们的集合更复杂。 集合的大小不等:有时候是零个粒子,有时是十粒,有时是一万粒。集合本身将具有行为和属性,而不仅仅是它们构成的粒子。 我们的目标是能够编写一个如下所示的程序:
var ps = new ParticleSystem();

draw = function() {
    background(255, 255, 255);
    ps.run();
};
该代码中没有引用单个粒子,但结果将充满在屏幕上飞来飞去的粒子。我们将创建具有多个对象类型的程序,并跟踪其他对象集合的对象,这将帮助我们创建强大的粒子系统,同时也为我们编写更强大的程序做好准备。
在弄清楚如何编程粒子系统时,我们将使用两种先进的面向对象编程技术:继承(inheritance)和 多态(polymorphism)。 通过我们到目前为止看过的例子,我们总是有一个单一类型的对象数组,比如“移动器 movers ”或“振荡器 oscillators”。通过继承(和多态),我们将学习一种方便的存储方式 ,能够包含不同类型对象的单个数组。 这样,粒子系统将不再只是单一类型粒子的系统。
我们将在本节中讨论粒子系统的最典型用法,但本章中的粒子效果或表现方式的结果,不应该限制你。 仅仅因为这些粒子系统看起来闪闪发光,向前飞,并且在重力作用下坠落并不意味着这些是你学到的一切。这里的重点实际上就是如何跟踪许多元素的系统。 这些元素的作用以及这些元素的外观取决于你的想象力。

想加入讨论吗?

尚无帖子。
你会英语吗?单击此处查看更多可汗学院英文版的讨论.