程序生成的地形中的降雨+河流创建算法


52

最近,我对程序化地形可以完成的事情着迷,并开始尝试一些构建世界的尝试。我希望能够通过将各种地图网格化而创建的生物群系来制作像矮人要塞这样的世界。

因此第一步已经完成。使用菱形平方算法,我创建了一些不错的hieghtmaps。下一步是我要添加一些水特征,并根据降雨实际生成它们。我已经读过几种不同的方法,例如从地图的最高点开始,然后“逐步”下降到最低的相邻点,在其下降到海平面时进行合并/腐蚀。

是否有任何记录在案的算法,还是袖手旁观?

会喜欢任何建议/想法。


我已经实现了本文描述的算法中的点点滴滴。
chaosTechnician 2012年

Answers:



35

早在1990年代末我尝试这种类型的东西时,我读了一些论文和书籍来了解水的流动,​​但是我没有记录看过哪些东西。我最终做了自己的事,因为我想处理侵蚀。我希望河流产生峡谷和洪泛区。我希望大坝水库中充满泥沙。我希望河流产生蜿蜒曲折的湖水和牛弓湖。我想要运河进行灌溉和引水。我希望洪水能破坏平原上的农场和房屋。

我在此页面的“地理位置”部分保留了一些注释(链接)。有一篇必须读的Jos Stam论文。不幸的是,我从未整理过笔记。同样不幸的是,该游戏是针对OS / 2的,因此我无法轻松地为您提供可运行的可执行文件。同样不幸的是,我的代码很糟糕,但是如果您想看一看,请参见源代码(zip)中的water.cpp

我在模拟中玩过的事情(并非全部是现实的):

  • 河流附近地区土壤潮湿;远离河流的地区土壤干燥。受水分影响的植被。植被减慢了水流。
  • 有时,雨水在所有地方产生水。然后它下坡。然后它蒸发并被地面吸收。雨使河道畅通无阻。
  • 温泉一直在造水,但仅在少数几个地方。泉水使河道充满。我没有模拟岩石层或地下水流;我只是在山上随机放置弹簧。
  • 流动的水有动力。如果我没记错的话,这对于使河流蜿蜒很重要。
  • 快速流动的水会吸收沉积物;缓慢移动的水在其前面沉积沉淀物。这雕刻出河谷。
  • 在最初的地图创建过程中,我加速了水流和侵蚀;在游戏过程中,它以正常速度运行。

总的来说,我的经验是,所有这些都非常有趣,但是要使其发挥作用,需要进行大量的试探和调整。我从来没有说过,如果不进行调整,河流的创造就自然而不可避免。(无论是作为程序员还是作为玩家)这是如此的有趣,以至于我花了很多年时间,却没有完成游戏的其余部分。:)


12
只需说出他的名字,他便会到达。
MichaelHouse

3
@ Byte56他就像stackexcha的Candlejack ....
DampeS8N

2
您启发了我根据您的六边形网格文章写了一篇论文,现在您再次激发了我的灵感!
亚当·阿罗德

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.