首先对我的英语口语感到抱歉。
我正试图用地形创建虚拟世界,就像在simcity2000或交通大亨中一样,地形是由瓷砖制成的,瓷砖之间的高度不能超过一层,所以没有悬崖。
对于地形生成,我使用perlin\simplex噪波,但我会使用它来处理坚硬的斜坡。
我看了一下Open Transport Tycoon的源代码,在生成地形后,地图上的所有瓷砖都会循环并平滑,只为一个单元提供高程。
但这对我来说是行不通的,因为我的地图会大得多,我负担不起循环平滑所有地图的费用。此外,也不可能仅平滑地形的可见部分,因为根据开始平滑瓷砖的位置,地形会有所不同。
我试着写我自己的噪声函数,它在两个点之间返回线性插值,距离等于这些点的最大高度,这样斜率就不会超过45度,它很有效,但直到你尝试将这些函数相加。
我如何伪随机生成最大坡度为45度的地形,并以其他方式进行处理,而不仅仅是平滑之前生成的一些地图
现在我没有主意了,希望Perlin噪音可能有一些可能的选择,比如"最大倾斜角度",但谷歌没有帮我。
由于每个网格单元内的值都是在四个梯度之间插值的,这些梯度的斜率都是1/gridSize(或其他一些固定值,具体取决于您的实现),因此Perlin噪波具有固有的斜率限制。
如果您生成的八度音阶数量有限,且网格相对于瓷砖大小相当宽,那么您应该能够通过实验找到一个比例因子,确保最大斜率为1。