xna - 运动的柏林噪声?

标签 xna motion perlin-noise

我成功地使用柏林噪声来生成地形、云和其他一些漂亮的东西。但是,我现在正在尝试为一群飞虫(特别是 Firebug )制作动画,有人建议我为此也使用 Perlin 噪声。但是,我不确定如何解决这个问题。

我想到的第一件事是,给出这样的噪声图:


  • 为每只 Firebug 分配一个随机的初始位置、速度和角加速度。
  • 在帧上,按照其方向矢量推进苍蝇的位置。
  • 读取新位置的噪声图,并用它来调整角加速度,导致
    飞向更亮的像素“转向”。
  • 通过靠近其他苍蝇再次调整角加速度,以避免它们聚集在局部最大值附近。

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

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

    最佳答案

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

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

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

    如果您对其他类型的运动感到好奇,我建议您使用 布朗运动 .这与灰尘颗粒漂浮在您的房间周围时所表现出的运动相同。本文最后介绍了一些更有趣的数学,但如果您完全熟悉 Matlab,那么前几组指令应该很容易理解。如果没有,只需在谷歌上搜索函数,并为您的环境找到它们的原生等效项(或自己创建它们!)这将更现实一点,并且比柏林噪声计算速度更快

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

    快乐飞翔!

    关于xna - 运动的柏林噪声?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7516810/

    相关文章:

    c++ - 不需要的常规 Perlin 噪声

    c# - 在 C# 窗体中使用 XNA 内容管道

    c# - XNA 4.0 免费电子书

    用于运动传感器的 Android Doze 模式

    java - 减慢 Java For 循环中对象的移动速度

    testing - 如何为 Perlin 噪声库编写单元测试?

    c# - XNA Game Studio 在 2013 年过时了吗?

    c# - 跳跃比。重力

    ios - 检测 iPhone 底部的凹凸

    javascript - 将经典的 Perlin Noise 移植到 JavaScript : Getting periodic pattern. 为什么? (JsFiddle 示例)