三维随机分形地形生成(9)
发布时间:2021-06-07
发布时间:2021-06-07
如果分配更大的数组,我们可以进行更多遍,每一遍加入更多细节。例如, 5 遍之后表面看起来如下所示:
前面提到过,数组维数需要为 2 的整数次方加 1 。这是因为 2D 数组中的浮点数必须等于 (2n+1)2 。 8 次迭代将需要一个 257X257 的浮点数组,对于标准的 32 位 IEEE 浮点数来说超过 256K 内存。
好了,它就是这么大。用 char 取代 floats 会有所帮助。例子程序使用 floats ,但你要真的关注内存使用那么使用 char 。修改例子使用之使用 -128 到 128 的范围是很容易的,但别忘了将你生成的值限定在 -128 到 128 范围里,子序列通过时会生成该范围以外的值,这会导致溢出。这在使用较小的 H 时尤其可能。
例子程序演示了处理尺寸的另外一种方法。用一个大数组依据 diamond-square 算法进行定位及拼嵌。然后从平行投影体顶视图进行绘制。这个图像被读回来并用作已经拼嵌成较小范围的第二个数组上的纹理图。然而,例子程序并没有这样做,一但图像从帧缓冲读回,第一个数组就被释放了。
这有个纹理图的例子:
该图经过人工着色,山峰为白色,山谷为绿色,两者之间为灰色。尽管利用例子程序源码试试自己的配色方案。