三维随机分形地形生成(4)
发布时间:2021-06-07
发布时间:2021-06-07
在 Y 方向上随机移动中点一段距离
减小随机数取值范围
}
}
将随机数值域减速小多泊呢?那取决于你想要分形的陡峭程度。每次循环减少的越多,所得山脊线就越平滑。但如果减得太多,则会有明显的锯齿感。可以粗糙度存在一个常量里。后面会解释如何做。
来看个例子。我们以一条 x 从 -1.0 到 1.0 , y 均为 0 的线段开始。开始,我们将随机值范围设为 -1.0 到 1.0 (可任意取)。这样我们在此范围里生成一个数字,并将中点移动这么多。这之后,我们就得到了:
现在第二次经过外圈循环,我们有两段,长度均原来的一半。我们的随机值也减半,即 -0.5 到 0.5 。我们为两个中点都生成一个这个范围内的随机点,结果为:
再次缩减范围,现在是 -0.25 到 0.25 。再以该范围内的数变换四个中点后,我们得到了:
有两件事你可能已经注意到了。
首先,它是递归的。实际上,它可以用一个迭代过程相当自然的实现。对于这种情况,递归或迭代都成。对于表面生成代码,使用迭代实现比递归会有一些好处。所以为保持一致,线和面相应的代码都使用迭代实现。