我已经阅读了一些关于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实施很好,很简单。
答案 0 :(得分:0)
定义“太多的性能”任何类型的插值都应该适用于2D数据。如果你真的担心性能,你可能会尝试实现Simplex Noise,但这很难理解和实现,而且3D和更高版本真的变得更好。在2D中,它们在某种程度上具有可比性。
此外,perlin噪声通常作为x参数的函数实现,其中x是维数,函数具有随机值的内部数组,可以根据参数的整数值进行访问。你应该尝试研究original source code。