三维随机分形地形生成(12)
发布时间:2021-06-07
发布时间:2021-06-07
这与前面的高度图很象,但我已经限定了高、低值以建立清晰有云的天空。
也可以用例子程序生成一幅类似的图像。设置 Select rendering type 下拉菜单为 2D
mesh/clouds 。(默认时看起来有像素感,试试把 Cloud iterations 值设为 8 以上修正之)。试试给这 H 赋不同的值(就是前面刚说过的 Cloud iterations 值),以取得不同的云的效果。 如果回到本文开头,第一幅图结合了许多我在这做的讨论。天空是用一个如上的纹理图作的,沿一个八边金字塔重复排放多次曲面几何体用一个高分辩率纹理图绘制。这个纹理图是通过从一个平行顶视图着色一个高度拼嵌有光照曲面而生成的。然后,这个图被读出用作纹理图。 跟随本文的例子程序被用于生成本文中出现的几乎所有图像。
其它算法
可能会想对曲面生成有比样本代码更多的控制。例如,可能想用自己的值给数组的前几遍初始化种子值,这样,山、谷……可以基本位于你设计的位置。然后用 diamon-square 算法填写其它细节。
修改代码,使之在赋值时略过已有值的数组成员是易于完成的。初始化数组为,例如, -10.0 ,给前几遍指定自己的值作为种子,再增强分形生成代码只给当前值为 -10.0 的赋值。简几遍将不会生成任何值,因为你的种子值已经在那儿了。后续几遍将在种子值在基础上生成新值。 如何取得种子值呢?如果想要的形状遵循某个已知的数学公式,如正弦曲线,就用这个函数生成值。否则,你得找出创造性的方法完成。我见过的一种算法是用灰度值绘制自己的高度图。将灰度映射成高度值并存入数组。再用 diamond-square 算法增加更多细节。
除了 diamond-square 算法,还有许多拼嵌表面的方法。
用连续随机增加, 2D 数组的一个随机部分增高一个很少的量。反复多次,对所选中的数组区域加上一个很小的随机值。这可以生成相当不错的结果,但不是线性计算的。如果计算时间无所谓,那么建议试试这个算法。
一另一个相似的方法,制造一个穿过数组的“折断”,并增加其中的一边,就象地震出现一样。再重复多次。这也不是一个线性算法,要多遍才能取得可以接受的结果。
参考参考文献以了解更多其它途径。
第二部分 关于例子源码
安装