蓝天白云 现在我们知道如何生成表面。我们可以生成并着色大量的三角形,也可以生成一个高分辨率的纹理图并将它应用到低分辩率的表面。不管怎样,效果相当好。那么,我们怎么生成头上的天空呢?它比你想象得要简单。
diamond-square 算法拼嵌完成的数组非常适于表示云天的纹理图。与把数组看作一套高度图上的 y 值相反,把它看成云的不透明度数据。最小数组值代表最蓝天空中最晰的部分,最大的值代表最白,天空中云最重的部分。
分析数组并生成如下的纹理图是相当琐碎的:
这与前面的高度图很象,但我已经限定了高、低值以建立清晰有云的天空。
也可以用例子程序生成一幅类似的图像。设置 Select rendering type 下拉菜单为 2D mesh/clouds 。(默认时看起来有像素感,试试把 Cloud iterations 值设为 8 以上修正之)。试试给这 H 赋不同的值(就是前面刚说过的 Cloud iterations 值),以取得不同的云的效果。
如果回到本文开头,第一幅图结合了许多我在这做的讨论。天空是用一个如上的纹理图作的,沿一个八边金字塔重复排放多次曲面几何体用一个高分辩率纹理图绘制。这个纹理图是通过从一个平行顶视图着色一个高度拼嵌有光照曲面而生成的。然后,这个图被读出用作纹理图。
跟随本文的例子程序被用于生成本文中出现的几乎所有图像。