从发上一篇文章搞出地形程序框架之后,就一直在看《Focus On 3D Terrain》的四叉树部分,感觉这个办法最经典最可靠,当然,顺应我的低智商,也最容易实现:D于是努力了两天,把QuadTree地形渲染给实现了,虽然时间不长,收获和启发还是不少。
和那些CLOD,Geomipmap,ROAM相比,QuadTree的实现确实是比较简单了,对一个完整的网格进行四叉分割,选那些需要细化的地块继续分割,直到细节效果达到要求为止,最后画出来,大概的描述就是这样。具体实现还是有不少要注意的地方,数据和参数太多了,一不小心就错的很离谱。最后的实现是自己参考了很多资料独立完成的,感觉有不少细节都可以改进。有以下几点:
1.看了《Focus On 3D Terrain》,作者是从整个地块开始分割的,判断摄像机所在的地块,然后用顶点距摄像机的水平距离和高度作为参数,整出了一个复杂的公式,作为判断是否分割一个地块的依据,我感觉这样计算实在麻烦了,把这个判断改为视距判断,直接计算地块中点到摄像机的距离,判断是否达到某个精度等级。这样的好处是地块细节的变化只和观察距离相关,比如视点在高空观察时(比如飞行或俯视的战略游戏),所有突起的山顶都会有高一些的细节,而不是只有摄像机下方区域有高细节。
2.补洞。正好工作比较空闲,花了一天时间研究了各种填补裂缝的方法,期间除了这本经典著作,还看了叶志军的《Visual C++/DirectX9 3D游戏开发导引》(我学D3D的入门书),上了GameRes论坛,找到了程东哲牛人写的一篇《地形制作全攻略》