终极优化你的游戏 —— 使用脏矩形技术
转载: http://dev.gameres.com/articles.asp?style=a&page=1 作者:Kylinx
?
假设A是渲染物体,B,C,D,E是由大到小的脏矩形范围,那么很显然,重叠的部分就被反复画。。。这是在分割脏矩形导致的问题,这样画下来,如果A物体是采用了叠加混合到背景的算法的话,问题就出来了,重画的部分会变得非常亮。所以脏矩形的分割就显得非常重要,也就是说把这些脏矩形还要分割为互相独立的互不相交的矩形,至于分割算法嘛,嘿嘿,各位还是动一下脑筋思考思考吧:)这个也是最值得优化的地方了,哈哈。实在想不出的话,最简单的方法就是把彼此相交的脏矩形都做一个合并,得到更大的脏矩形,虽然没有相交的区域了,但是也许这个脏矩形会变得比较大了哦:)
?????? 最后,大家一定关心的是我会不会提供源代码,很抱歉的说,不能。我在我的引擎中实现的不是以简单的链表去做的,用的是一棵比较复杂的渲染树,牵扯到的东西就比较多了,所以不方便提供代码,不过可以给一个演示吧:)再说大家如果真的明白了我所说的,那就可以自己动手写一下嘛,不要怕失败/P^_^,
?
?????? 好啦,关于脏矩形的技术就介绍到这里啦,用好这个技术你会发现你的游戏会在配置极低的机器上也能运行如飞的:)这种技术如果能用在现在市面上的那么多的游戏中的话,就不必为一个小游戏就强占了您100%的CPU资源而烦恼拉:)
?????? 如果您有更好的方法或者指出其中的不完善的地方还请您不吝赐教,大家多多交流:)
?
关于测试的Demo
该Demo渲染部分由Kylinx花了近半年的时间,全部采用MMX写成,已经成功实现d3d中对2d纹理的操作,速度非常快
?
关于Settings.ini
EnableDirtyRect = 1????? //是否允许脏矩形技术,0=关闭,1=开启
LockFPS = 1???????? //是否锁定FPS,0=关闭,1=开启
哈,这个Demo在不锁定FPS,脏技术开启的的情况下,我的Duron1.8G CPU,FPS达到 31500左右!(没错,是三万一千五百)这个数字吓人吧?如果脏技术未打开,只能在150左右,相差200倍阿!!!
?
如果LockFPS开启,在我机器上(512M DDR)跑30个DEMO,CPU占用还是为0,哈哈!
?
?
例子下载:http://dev.gameres.com/Program/Visual/2D/DirtyRectDemo.rar
?
?
?