花了一段时间实现了一个完全scanline的2d引擎...效率十分的不理想...诸如for(int i = 0; i < 100; i++) Draw(pBitMap,i,i);
这样的绘制速度完全赶不上无任何优化操作的情况...
问问云风...wsxp(好久不来了,有没有换新的版本?)还是分成block的么?是不是scanline只是用来作覆盖算法的?如果只是覆盖,那就是求并集,我自己实现的那个scanline同时也是用来绘图的,这样是并-交...虽然优化了不少..但是实际的求并-交的过程还是非常浪费时间的...
这些问题能不能片面的泛泛的谈谈...呃...在不涉及到诸如版权等等一系列问题的前提下.....
wsxp 里是结合的. 以分块为主, scanline 为辅. scanline 只做覆盖优化用.不需要精确.
scanline 的合并的代码要小心的写, 并且不要多用. 我的做法是 RLE 图片, 『More』 - 回复 | (505) | 云风 | 2004-09-23 08:45:19
确实....精确计算的scanline在某些情况下还没有z-buffer速度快.... 按照ws++的方式...判断某个block上的object是否发生了变化是在client端调用changexxx的辅助下加以计数完成的.... wsxp对这个部分应该有很大的改变了吧...client端调用changexx的函数也是件很麻烦的事情...我觉得这个操作其实可以省略掉..只是得改变下调用得方式...而且在某些情况下并不能很好得区分unchange跟selfchange...这个工作可以交给object自己来完成...canvas告诉object当前绘制得位置..绘制得方式..object结合自己得内部状态就能返回给canvas究竟是何种change...其实也只是把部分得工作由client交到了object手上...但是这样一来..object得大小肯定会变大....我想知道你曾经说用了c++得一个技巧..保证object保持不变..从而省掉了object往canvas得block得队列里面copy得操作...如果能省掉这个copy得话...object大点也无所谓..但是..我却想不出来究竟是个什么技巧能保持他的内容不变化?....并不能限制client去改变object的内容呀...难道copy on write?...... 『More Lines』- 回复 | (506) | thxlp | 2004-09-24 02:52:25
yyyhgdlo'o'lkwd1rfvfdh6e4umrnjf nujmj - 回复 | (1225) | chenguanglin | 2006-08-17 08:14:11