6

我成功地使用 Perlin 噪声来生成地形、云和其他一些漂亮的东西。但是,我现在正在尝试为一群飞虫(特别是萤火虫)制作动画,并且建议我也为此使用 Perlin 噪声。但是,我不确定该怎么做。

我首先想到的是,给定这样的噪声图:

  1. 为每只萤火虫分配一个随机的初始位置、速度和角加速度。
  2. 在帧上,按照其方向向量推进苍蝇的位置。
  3. 读取新位置的噪声图,并使用它来调整角加速度,使苍蝇“转向”向较亮的像素。
  4. 通过其他苍蝇的接近度再次调整角加速度,以避免它们聚集在局部最大值附近。

但是,这不包括苍蝇到达地图边缘的情况,或者它们可能最终只绕一个点运行的情况。第二种情况可能没什么大不了的,但我不确定让它们转向以避免与地图边缘碰撞的可靠方法。

建议?教程或论文(请用英文)?

4

2 回答 2

6

这是 2D perlin 噪声的一个很好的来源。您可以遵循完全相同的原则,但您可以创建一维渐变数组,而不是创建 2D 渐变网格。您可以使用它为特定轴创建噪声。

只需按照这个食谱,您也可以为其他每个轴创建类似的 perlin 噪声函数!结合这些动作,你的手上应该会有一些好看的噪音。(您也可以将这些噪声函数用作随机加速度或速度。由于 Perlin 噪声函数是全局单调的,因此您的苍蝇不会飞到疯狂的距离。)

http://webstaff.itn.liu.se/~stegu/TNM022-2005/perlinnoiselinks/perlin-noise-math-faq.html

如果您对其他类型的运动感到好奇,我建议您使用Brownian Motion。这与灰尘颗粒在您的房间周围漂浮时所表现出的运动相同。本文最后会介绍一些更有趣的数学,但如果您完全熟悉 Matlab,前几组指令应该很容易理解。如果没有,只需 google 函数,并为您的环境找到它们的本地等效项(或自己创建它们!)这将比 perlin 噪声更现实一点,计算起来也快得多

http://lben.epfl.ch/files/content/sites/lben/files/users/179705/Simulating%20Brownian%20Motion.pdf

快乐飞翔!

于 2013-05-27T06:19:23.350 回答
1

也许你正在寻找boids?

维基百科页面

它在原始概念中没有 Perlin 噪声,也许您可​​以使用噪声来生成吸引子或排斥子,就像您尝试使用“飞到更轻”行为一样。

PS:上面链接的页面有一个与萤火虫算法相关的链接,也许你会对那个感兴趣?

于 2011-09-22T15:00:28.520 回答