撰写了文章 发布于 2020-03-10 09:39:58
【奇幻地图程序生成(四)】森林与海洋
上一篇中,我们已经知道森林应该在哪里生成了,但究竟应该生成什么样子的森林?现在我们第一个目标是生成下面这种森林。
根据上一篇的结果,我们已经知道了哪里的降水量会多一些,于是就在降水量多的地方生成这些森林。如下图的深绿**域。
先用线把深绿**域框起来
把这些直线弄弯成如下形状,具体算法请自己思考。
避开山脉,缩小边界,这些被曲线圈出的地方就是森林了。
需要注意的一点是,如果我们先绘制山脉再绘制森林的话,森林可能把山脉遮住。因此我们可以先绘制森林再绘制山脉,这样会出现山脉坐落在森林中的景象,还挺好看。
再扯回来,目前我们只是为这些森林确定了边界,现在得给它们弄上纹理了。如果只使用一种颜色,比如下图,显然有些单调。
因此我们可以在森林内部随机生成一些点,使用Delaunay三角形将它们连接起来。如果搞不定Delaunay,用普通的三角形的最终效果也并不差。
然后给不同三角形绘制不同的颜色,颜色虽然多变了,但仍然看出来三角形的边界。
于是高斯模糊大法好。
然后,加上阴影
最后,加上边界线,河流,以及半圆,大功告成。
当然,我们也可以尝试另外形状的森林。
效果如下:
或是加上树干
效果如下:
以及其他不同风格的树:
最后是草,一种植物,注意这些草的头部和尾部各成弧形。
加点颜色
或者不用画草,之间使用几个点代表也行
接下来是海洋。海洋的颜色与森林的颜色逻辑是一样的。
海岸线仍然太单调,再多来些形式吧。
要实现下图的效果可能会遇到一些坑,特别是处理相邻不同岛屿的相交的波浪线时。因此可以粗暴地像下图左那样直接裁剪,裁剪痕迹很明显,但最终效果不错。
往海洋里添加纹理:
加一只怪兽。
至此,奇幻地图已经生成完成了。但是,我们生成的那一湾湖泊,一片树林叫什么名字好呢?