【发布时间】:2011-08-27 08:50:12
【问题描述】:
我正在尝试在 C++ 中实现 2D Perlin 噪声生成,我发现一些实现根本不使用种子(here、here 或 here)。其他实现采用种子值来根据噪声值获得不同的噪声。
但是我发现example code 将种子值添加到计算每个八度音阶的噪声值的函数参数中(请参阅链接代码中的 PerlinNoise::Total())。另一个使用3D种子函数,将固定的种子值作为z值(刚才找不到例子)。其他文章建议使用其他噪声函数。
所以我的问题是,为 Perlin 噪声生成添加种子值的最佳方法是什么。给定相同的种子值,应该生成相同的噪声值。如果解决方案是使用自定义噪声函数,我会很感兴趣是否可以使用 Boost.Random(或 C++11 的标准 C++ 库类)来实现它。
编辑:用“最佳”方式回答我的意思:什么是给我 Perlin 噪音的最佳方式,就像它应该工作一样,例如梯度噪声函数。
【问题讨论】:
-
所引用的来源都不是真正的 Perlin Noise 的实现。真正的交易可以找到here。
-
您所说的“最佳”是什么意思?最快、最少内存、最有趣的噪音等等......我使用了 libnoise (libnoise.sourceforge.net),它有多种噪音类型和种子值。
-
谷歌搜索单纯噪声。 Simplex Noise 函数看起来很像 Perlin,并且具有一些比 Perlin Noise 更可取的属性。随机性在查找表中,您可以在生成它时播种。
-
如果 boost random 允许您生成伪随机数,我不明白为什么不这样做。重要的是对于一组值,我们每次返回的值总是相同的,否则它是完全随机的,它将不起作用。我做了一个小的 perlin 噪声演示,我生成了随机数(使用其他一些工具)并动态创建了 2d 数组(因为我在 2d 中工作),对于一个位置,我设置了一个随机值(随机),如果该位置尚未初始化。
-
我从原始的 Ken Perlin 代码中破解了一个种子 Perlin,并进行了一些小的调整:stackoverflow.com/questions/7213469/…
标签: c++ perlin-noise random-seed