我正在编写一个使用Minecraft风格的块的地形引擎。使用Diamond-square algorithm分别生成块。
问题在于这些块没有排列在一起,它们是完全分开的。我已经尝试了很多方法来使它们这样做,但是到目前为止,没有任何事情可以正常进行。
编辑:另外,我要创建的世界不是无限的;它会生成一个33x33的块数组,每个块都有一个由另一个Diamond-square生成器分配的全局高度值。
有没有一种(简单的,最好的)方法来修改菱形方块引擎以使块对齐?
最佳答案
那么您将菱形平方算法的每个顶级平方生成为单独的块吗?
您必须与周围的块共享该块的四个角点。
有一个很简单的方法可以做到这一点。您只需要一个带有两个参数的噪声函数(假设您正在以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。
编辑:
不好的是-您不应该仅对四个角点依赖参数化噪声函数,而必须对菱形平方算法中生成的所有随机数使用它。
如果这不起作用,则说明您在做错事。