|
|

楼主 |
发表于 2007-5-25 00:48:00
|
显示全部楼层
Re:lod地形贴图有了进展,有效果图,nostopforever和各位朋
我才换了双核,速度又快了不少,不过显卡是集成6100的,能凑合支持sm3.0,没钱买好显卡了,呵呵。。。
现在加载我的程序,几秒的时间就把整个1025x1025的地图打开了,现在的CPU速度真的提高了很多啊。
说到正题上,地图无限大的情况,我也考虑了,有了一个也许不周全的的思路,是我坐车的时候想的,我的想法大致是这样:
整个游戏的高度图可以做的很大很大,大的可以装下整个游戏地图外景的顶点信息,也就是所谓的世界地图。(具体多大根据游戏的需要,不限制)
然后把世界地图做拆分,拆分的单位可以是513x513,考虑每个区域加载速度,和频繁释放和加载的效率,不易过大或过小,我觉得513这个规格应该不错,每个513就是一个地形区块,这个区块是内存管理的最小单位,要么一次加载一个513x513的单位,要么一次释放一个513x513的单位,而且,由于这些区块是由世界地图拆分的,彼此之间接缝是绝对没问题的,这也就是所谓的无缝连接地形吧。
下面最精彩的部分开始了:
一个角色一般都在某一些活动范围比较频繁的,不管多频繁吧。思路这样:
我设置一个队列,里面放区块的编号,假设现有的区块编号为1,2,3,4,5,...100...
假设这个队列最多只放9个编号(具体多少个,自己去设置,表示内存里面驻留多少个区块)
每当角色的视锥进入一个区块的时候,首先看队列里面有没有这个编号,如果有的话把编号重新排在队列的begin处,没有这个编号,表示角色从没进入过这个区块,不用重排了,直接创建该区块,并把编号加到begin处,当队列的长度超过9的时候再有新的编号加入head的时候,最后的end也就要出队列了,这就表示要从内存中release最后一个编号所对应的区块了,其实我的意思就是队列里面只保留最近访问的9个区块,当然不一定是9,可以去调整。
而且这些区块一定是按照访问的先后排序的,出队列的被释放,新加入队列的,重新加载
内存占用多少和频繁加载释放频率是成反比的,你自己来调整这个值就好
另外四叉分割只在以角色为中心范围的4个区块也就是1025x1025的范围去计算,而且永远都是在这样的规格下去分割,效率自然有保证。
也许还有我没考虑周全的地方,我要具体去实现了才知道,现在只是有个初步的想法
|
|