gpt4 book ai didi

C# 柏林噪声

转载 作者:太空宇宙 更新时间:2023-11-03 16:01:08 25 4
gpt4 key购买 nike

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

我从 1 个维度开始:

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

频率 = 2^i//两个效果,每个图反射(reflect)一个 Octave 音阶,这不是 100% 必要的,但这个例子恰好是这样做的

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

这是我的尝试:

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。我为 texture.Width/frequency 的每个倍数搜索一个值,直到数组末尾。

我有一些我现在正在使用的随机值,我必须将它们与线性插值/余弦插值或三次插值相关联。我应该使用哪一个?当我想使用噪声生成 2D 地形时,哪个性能最好?

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

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

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

编辑2:this实现很好而且“简单”。

最佳答案

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

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

关于C# 柏林噪声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21339236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com