【问题标题】:C# perlin NoiseC# perlin 噪声
【发布时间】:2014-02-15 20:01:51
【问题描述】:

我已经阅读了一些关于 perlin 噪声的教程(例如 this 一个)以用于我的地形生成,我想确保我理解它并且能够正确地实现它。

我从 1 维开始:

幅度 = 持久性^i // 持久性可以有任何值,但大多数情况下它是 1 或更低。它以更高的频率改变图形的幅度,因为:

频率 = 2^i //两个效果,每个图表反映一个八度音阶,这不是 100% 必要的,但是这个例子恰好是这样做的

'i' 是我们正在查看的八度音阶。

这是我的尝试:

private float[] generateGraph()
{
    float[] graph = new float[output.Width];
    for (int i = 0; i < output.Width; i += 1/frequency)
    {
        graph[i] = random.Next((int)(1000000000000*persistence))/1000000000000f;
    }
    return graph;
}

我将数组想象成一个图形,其中索引为 X,值为 Y。我为每个纹理的倍数搜索一个值。宽度/频率直到数组结束。

我现在使用一些随机值,我必须将它们与线性插值/余弦插值或三次插值连接。 我应该使用哪一个?当我想在 2D 中使用噪波生成地形时,哪个性能最高?

我想在这之后将图形放在一个二维数组中,然后检查每个值,如果它高于 0.5,它应该得到一些材质或纹理。

是这种情况,我该怎么办?我完全走错了吗?

edit1:在我将图形放入二维数组之前,我想生成可能 5 个具有更高“i”的图形并将它们混合(这应该不会太难)。

edit2: this 实现很好而且“简单”。

【问题讨论】:

    标签: c# perlin-noise


    【解决方案1】:

    定义“性能过强”任何类型的插值都应该适用于 2D 数据。如果你真的担心性能,你可以尝试实现Simplex Noise,但这更难理解和实现,而且它在 3D 和更高版本上确实变得更好。在 2D 中,它们在某种程度上具有可比性。

    此外,perlin 噪声通常实现为 x 参数的函数,其中 x 是维数,并且该函数具有内部随机值数组,可根据参数的整数值进行访问。您应该尝试研究original source code

    【讨论】:

    • 2d 中的单纯形噪声较慢 ;)
    猜你喜欢
    • 2014-05-21
    • 2020-06-06
    • 2011-09-20
    • 2021-06-30
    • 2013-07-23
    • 2020-06-22
    • 2011-03-19
    • 1970-01-01
    • 2014-11-20
    相关资源
    最近更新 更多