排列地形块(菱形算法)

时间:2012-04-15 20:28:14

标签: java terrain procedural-generation

我正在编写一个使用Minecraft-esque块的地形引擎。使用Diamond-square algorithm单独生成块。

问题是这些块没有排成一列,它们完全是分开的。我已经尝试了很多东西让它们这样做,但到目前为止还没有任何工作可行。

编辑:此外,我正在努力创造的世界并非无限;它生成一个33x33的数组块,每个块都有一个由另一个Diamond-square生成器分配的全局高度值。

是否有一种(简单的,最好的)方式来修改菱形方形引擎以使块排成一行?

2 个答案:

答案 0 :(得分:0)

因此,您将菱形平方算法的每个顶级平方生成为一个单独的块?

你必须与周围的块共享该块的四个角点。

有很简单的方法可以做到这一点。您只需要一个带有两个参数的噪声函数(假设您在2D中生成地形) - 一个函数返回相同种子的相同伪随机数(对于整个地图保持不变)和两个参数。因此,如果您在坐标[-100,500]上询问函数的值,您将始终得到相同的数字(这可确保周围的块排列)。

此类功能的示例如下:

function Noise1(integer x, integer y)
    n = x + y * 57
    n = (n<<13) ^ n;
    return ( 1.0 - ( (n * (n * n * 15731 + 789221) + 1376312589) & 7fffffff) / 1073741824.0);    
end function

Source

修改

我的不好 - 你不应该只依赖于四个角点的参数化噪声函数,你必须将它用于菱形平方算法中生成的所有随机数。

如果这不起作用,那么你就是在做错事。

答案 1 :(得分:0)

看到这个答案: Making the diamond square fractal algorithm infinite

你最好的选择是要么完全是噪音,要么使用我漂亮的无限菱形平方算法。只是截断它,在你的边缘。如果你想把一个区域称为一块,那就这样吧。在这样一个无限的领域中查找任何一点都很容易。

或者我的解释和实施示例: http://godsnotwheregodsnot.blogspot.com/2013/11/field-diamond-squared-fractal-terrain.html