javascript - 修复等距柏林噪声中的高度问题

标签 javascript canvas perlin-noise

我一直在使用柏林噪声来生成基于图 block 的等距景观。到目前为止,我一直使用噪声值作为图 block 本身的高度图:Math.floor(noise * 10) , 基本上。这会生成看起来非常漂亮但线性的 map 。然而,我发现“山”看起来很无聊,所以我应用了一个指数:Math.floor(Math.pow((noise / 4), 2.3)) 。这会将较高的值推高,生成附加的图像。

这些高度值存储在二维网格中,给我 x , yz我需要将 map 绘制到屏幕上。

缺点很明显:我的山上有一些空隙需要填补。我只是不确定从哪里开始,因为我无法再将这些信息存储在二维网格中。我想我可以使用“更长”的瓷砖进行作弊,但这有点蹩脚。有什么建议吗?

如果您需要更多信息,我很乐意为您解释。也许我找错了树。

isometric perlin noise

最佳答案

在后面绘制第一个图 block 之前,请查看左侧和右侧距离观看者较近的两个相邻图 block 。获取它们的最低高度,并检查该高度是否低于您的后瓦减去一高度。 (因为这会造成间隙)。现在,您可以从这个“低高度”开始在后面的堆上绘图,并在上面堆叠瓷砖,直到达到您想要的高度。然后,您可以使用相同的算法绘制下一个距离观看者更近的图 block 。

编辑:但我只是想知道这么多堆叠的瓷砖是否看起来会很尴尬。也许最好只是拉伸(stretch)土层直到“低高度”。

关于javascript - 修复等距柏林噪声中的高度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21669076/

相关文章:

javascript - 检查对象数组中的值是否适合某个范围?

javascript - 有没有人在 IE 中使用 processing.js?

c# - 类似 Minecraft 的游戏中的悬崖地形生成

java - 使用多个 Perlin 函数如何平滑地形

GLSL 的随机/噪声函数

javascript - 需要简单解释一下javascript执行上下文

javascript - Fabric.js 动态添加/删除元素

javascript - 垃圾收集跟不上 Buffer 的创建和删除

javascript - 将 kendo ui 网格格式化为层次结构

javascript - csscomb 解决 sublime node.js 错误