Interlocking Tile LOD算法演示(包括部分代码)

最近做的一个3D的LOD四叉树地形,众所周知,现有的知名LOD算法包括CLOD、ROAM等,但是这些算法普遍具有比较变态的特点就是每帧都必须要改变顶点的数据。对于Direct3D而言,锁存解存是不可避免的,虽然可以使用Dynamic存储器来提升锁存解存的速度,但是Dynamic渲染速度就比较慢。一句话,这些算法都不适于现在这种硬件的体系结构,即瓶颈在AGP存储器的体系结构,或者更加明确的说,就是瓶颈在锁存和解存的体系结构。

InterlockingTiles算法给出了一个比较简单的实现,这个算法的本质是,一开头就将Vertex数据填好,然后就不再动了,变动的只是Index数据。比如,刚开始以9X9为一个Tile,那么一个Tile的Vertex数据就是81个,怎么都不变。然后,9X9就有4级LOD:把9X9全画出来是一个,9X9隔一个点画,就是画5X5,是一个,然后是2X2和1X1。这样就可以为每一个LOD编制Index表。而对于不同LOD的联系,由于刚上来都知道是什么,也可以为连接部分编制Index表。

这样一开始,所有的Vertex和Index都将在最开始就被建立起来,不需要运行时锁存解存,顶点运算。

Gems2中对本算法有更多介绍,后面附有一部分代码,均使用了9X9Tile,17X17和33X33Tile均没有实现,可参考阅读。

Interlocking Tiles LOD部分的代码- -

只是相关部分的代码,可以当作伪代码来读。

四叉树管理部分写得有点糟糕,所以还是不要看了,就看LOD部分就可以了。


<!-- <A href="http://localhost/diary/h/e/l/hellobkgs1/inc/code.rar ">code.rar </A>-->http://noslopforever.blogchina.com/inc/code.rar

你可能感兴趣的:(数据结构,算法)