我正在编写一个使用 Minecraft-esque 块的地形引擎。使用Diamond-square 算法单独生成块。
问题是这些块没有排列,它们是完全分开的。我已经尝试了很多事情来让他们这样做,但到目前为止,没有任何事情能起到应有的作用。
编辑:另外,我试图创造的世界不是无限的;它生成一个 33x33 的块数组,每个块都有一个由另一个菱形正方形生成器分配的全局高度值。
有没有一种(简单的,最好的)方法来修改菱形引擎以使块对齐?
我正在编写一个使用 Minecraft-esque 块的地形引擎。使用Diamond-square 算法单独生成块。
问题是这些块没有排列,它们是完全分开的。我已经尝试了很多事情来让他们这样做,但到目前为止,没有任何事情能起到应有的作用。
编辑:另外,我试图创造的世界不是无限的;它生成一个 33x33 的块数组,每个块都有一个由另一个菱形正方形生成器分配的全局高度值。
有没有一种(简单的,最好的)方法来修改菱形引擎以使块对齐?
因此,您将菱形正方形算法的每个顶级正方形生成为单独的块?
您必须与周围的块共享该块的四个角点。
有很简单的方法可以做到这一点。您只需要一个带有两个参数的噪声函数(假设您在 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
来源。
编辑:
我的错 - 你不应该只依赖四个角点的参数化噪声函数,你必须将它用于菱形正方形算法中生成的所有随机数。
如果这不起作用,那么你做错了什么。
看到这个答案: 使菱形方形分形算法无限
你最好的选择是要么完全噪音,要么使用我漂亮的无限菱形平方算法。在你的边缘截断它。如果您想将某个区域称为块,那就这样吧。在这样那样的无限领域中查找任何点都很容易。
或者我在这里的解释和实施示例:http: //godsnotwheregodsnot.blogspot.com/2013/11/field-diamond-squared-fractal-terrain.html