基于四叉树的LOD地形场景的怪异优化探索

长平狐 发布于 2013/03/19 18:40
阅读 137
收藏 0

           基于四叉树的LOD地形场景是开发3D大规模场景地形一个避不开的话题。小弟对此一直耿耿于怀。虽然说号称自已学了几年游戏编程。但实际上真的还不会做四叉树的LOD地形。但眼下要么就干掉他,要么就被他干掉。

          

           所以,解决这个问题,实属无奈。。。。。

 

           大概的看了一些资料,西里糊涂的。

 

           不过明确两点:

          1。通过视野远近调整近地表显示精度。降低渲染顶点数量。

          2。通过将地表平分为四(左上,右上,左下,右下),然后循环调用判定函数对所处范围再进行四平分(左上,右上,左下,右下)然后进行拆分判定。通过判定标准的继续调用函数。最后跟据判定结果来进行逐个正方形绘制。

 

          OK,放下书,往开了想。

 

          先不管怎么LOD还是四叉树。其本质目的是优化场景,也就是减少相对不必要的渲染。提高渲染效率。

 

          其中心思想是强调,近处提高精度,远处降低精度。高度相差不大的就减少顶点数。

 

         ====================================================

 

         那么?我要做的。就是把处于一个面上的顶点尽可能进行删简,然后跟据摄像机所在位置周边范围N米内设为高精显示即可。

        1。 在初始化时先设格子数量BOOL数组 NoArray[mTerrainWidth*mTerrainHeight];

         全清为0,即代表地表上没有不用拆分的格子。然后开始一项计算。

         将地表平分为四(左上,右上,左下,右下),在中点,从左上到右下,计算每个面的法向量,看是否相同。如果相同,将中点所在位置的NoArray元素值设为TRUE。即此范围铁定不用拆分。

         如果发现有不同,返回,对所处范围进行四平分(左上,右上,左下,右下)继续循环调用此函数。看四个平分面是否符合。

                      再设格子数组BOOL数组YesArray[mTerrainWidth*mTerrainHeight];

 

        2。在渲染前,设YesArray都为TRUE,代表进行拆分。

            将地表平分为四(左上,右上,左下,右下),看中点的NoArray元素值是否为TRUE,如果TRUE,YesArray对应元素改为FALSE并返回即可,如果FALSE,对所处范围进行视野判定。看是否符合距离标准,并设定对应的YesArray元素值。四平分(左上,右上,左下,右下)继续循环调用此函数,

 

        3。渲染时 将地表平分为四(左上,右上,左下,右下),看中点的YesArray来进行判定是否渲染此正方形。并四平分(左上,右上,左下,右下)继续循环调用此函数

 

 

                 

 

 


原文链接:http://blog.csdn.net/honghaier/article/details/5509900
加载中
返回顶部
顶部