如何使用python获得类似于地图的二维地形

2024-05-14 10:52:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图得到一个自然的景观,像游戏Terraria。我使用细胞自动机为表面生成洞穴和一维柏林噪声。结果如下:my prototype

但这对我来说并不令人满意,因为最初的目标是得到这样的东西: what i want to get

我知道在第二种情况下,也会使用柏林噪声,但我完全不知道如何做到这一点。有人可以建议我如何实现第二种情况下的柏林噪声或不和/或给出适当的链接在这个主题


Tags: to游戏目标自动机my情况噪声表面
1条回答
网友
1楼 · 发布于 2024-05-14 10:52:08

我要做的是:

  1. 对2D噪波使用单纯形而非柏林。Simplex避免了柏林的许多可见网格对齐特性。你可以在this image中看到,顶部的柏林墙通常遵循45度和90度方向。我创建/使用/推荐的噪音应该是this,特别是Noise2_XBeforeY函数,因为它旋转了三角形网格,以尽量寻找最适合Terraria风格的游戏。(编辑:因为您使用的是Python,所以可以使用this

  2. abs(noise(frequency*x, frequency*y)) < threshold ? cave : leave_solid开始。调整频率阈值,直到产生所需的大小/分布

  3. 利用分形噪声改善洞穴的形状和变化abs(noiseA(frequency*x, frequency*y) + noiseB(2*frequency*x, 2*frequency*y)*0.5 + ...) < threshold ? cave : leave_solid

  4. 与高度进行比较,使洞穴在上升时变小。将threshold替换为地下距离的函数,例如threshold = f(height(y) - y),其中f(t) = 类似t / (t + 1)。注意height(y) - y是如何随着你在地下越深而变大的(假设你往下走时Y变成负值),以及t / (t + 1){a4}f(t) = t / (t + 1)可能无法单独工作,因此您可能需要像f(t) = thresholdMax * t / (thresholdIncreaseRate * t + 1)一样对其进行泛化。为thresholdMax和thresholdIncreaseRate选择最适合您的目的的值

相关问题 更多 >

    热门问题