我一直在使用柏林噪声来生成基于图 block 的等距景观。到目前为止,我一直使用噪声值作为图 block 本身的高度图:Math.floor(noise * 10)
, 基本上。这会生成看起来非常漂亮但线性的 map 。然而,我发现“山”看起来很无聊,所以我应用了一个指数:Math.floor(Math.pow((noise / 4), 2.3))
。这会将较高的值推高,生成附加的图像。
这些高度值存储在二维网格中,给我 x
, y
和z
我需要将 map 绘制到屏幕上。
缺点很明显:我的山上有一些空隙需要填补。我只是不确定从哪里开始,因为我无法再将这些信息存储在二维网格中。我想我可以使用“更长”的瓷砖进行作弊,但这有点蹩脚。有什么建议吗?
如果您需要更多信息,我很乐意为您解释。也许我找错了树。
最佳答案
在后面绘制第一个图 block 之前,请查看左侧和右侧距离观看者较近的两个相邻图 block 。获取它们的最低高度,并检查该高度是否低于您的后瓦减去一高度。 (因为这会造成间隙)。现在,您可以从这个“低高度”开始在后面的堆上绘图,并在上面堆叠瓷砖,直到达到您想要的高度。然后,您可以使用相同的算法绘制下一个距离观看者更近的图 block 。
编辑:但我只是想知道这么多堆叠的瓷砖是否看起来会很尴尬。也许最好只是拉伸(stretch)土层直到“低高度”。
关于javascript - 修复等距柏林噪声中的高度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21669076/