C#perlin噪音

时间:2014-01-24 17:55:32

标签: c# perlin-noise

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

我从1维度开始:

幅度=持久性^ i //持久性可以有任何值,但大多数是1或更低。由于:

,它会以更高的频率改变图形的幅度

频率= 2 ^ i // 2个效果,每个图形反映一个八度音程,这不是100%必要但是例子发生了这样做

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

这是我的尝试:

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中使用噪声进行地形生成时,哪个性能最高?

我希望在此之后将图形放在2D数组中,然后检查每个值,如果它高于0.5,它应该得到一些材料或纹理。

这种情况,我应该怎么做?我完全走错了路吗?

edit1:在我将图形放入2D数组之前,我想生成其他5个更高'i'的图并混合它们(这不应该太难)。

edit2:this实施很好,很简单。

1 个答案:

答案 0 :(得分:0)

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

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