云风的个人空间 : 脏矩形 demo[DirtyRect]

首页 :: 索引 :: 修订历史 :: 你好, 3.17.76.163
你的足迹: » 脏矩形 demo
这是一个旧版本的DirtyRect于2006-05-21 15:23:36.
FAQ

Q: 这是什么?
A: 这是一个脏矩形技术演示的 demo source code 。

Q: 如何编译?
A: 在 windows 平台选一款 C 编译器,将包内所有的 .c 文件编译链接在一起即可。

Q: 这个 demo 实现了什么?
A: 实现了一个支持分区域以脏矩形方式更新的画布,并以绘制矩形为实例作为演示。

Q: demo 表现出来的东西是什么?
A: 可以说,这个 demo 什么都没有表现,仅仅是一个正方形从窗口飘过。

Q: 这些 source code 有实用价值吗?
A: 价值要看你怎么看待它,如果你不了解脏矩形技术,那么读懂它就是有价值的。如果你想在此基础上发展这些代码,它们或许也有价值。如果你想直接用来做项目,很抱歉,那它太简陋了。

Q: 代码中为什么没有注释?
A: 因为云风已经尽可能的将代码写的简洁清晰,过于详尽的代码注释不是我的风格。

Q: 为什么是 C 写的?
A: 因为这并非一个很复杂的技术,也不需要过于复杂的结构,C 更纯净一些,不需要用 C++ 。而不用汇编,可以让代码更好的被理解,如果真正需要效率的时候,我们可以做汇编优化。

Q: 有哪些地方可以被改进?
A: 代码结构设计的并不理想,函数和变量命名都太过随意。但我已经在我能够掌握的时间内(周末的整整一个晚上)把它写到让自己比较满意了。有些地方设计的并不一定合理,比如,每次刷新 canvas 的时候强制用黑色清屏(见 canvas.c 中的 drawfunc_clear 函数)。test.c 是用一个默认的机器向导生成的 win32 程序框架,并且随便添加了几行代码,显得很不严谨,鉴于这个 demo 只是演示脏举行技术,而非 windows 程序框架,时间有限的情况下一个简陋的 test 代码应当是可以接受的。

Q: 为什么发布这样的 source code?
A: 风魂已经几年没有公开的版本发布,已经流传的版本从现在的眼光看已经非常糟糕。代码组织混乱、C++ 的不正确使用、结构设计不合理等等。云风个人认为,其中还有点价值的只是脏矩形技术的思想,但这些已经混杂在体积臃肿的代码堆里。在《游戏之旅——我的编程感悟》一书第八章,我本来想用出版文字的方式把这部分技术记录下来。但直到今天才有些许空暇编写 demo 演示。

Q: 脏矩形技术在 3d 游戏为主流的今天是否已经毫无用武之地?
A: 即使在 3d 游戏中,我们依然可以用这个技术做 UI 模块,如果设计合理,可以带来极大的便利甚至更高的效率。而制作 2d 休闲游戏更加有用。

Q: source code 中 gdi 部分是可以被替换的吗?
A: 设计上就考虑了将显示部分分离,整个 demo 的代码篇幅已经被压缩到很短,读懂代码后,应该很容易把 gdi 部分替换成 directx 或是其它。比如将 canvas 提交到一个带 alpha 通道的贴图中,以制作 3d 游戏的 UI 用。同样的道理,这个 demo 中使用 16bit 色彩深度,你也可以方便的修改为 32bit 。

Q: 脏矩形技术可以进一步优化吗?
A: 可以。对于经常滚动的情况可以做滚动优化(即让 canvas 跟随场景滚动)。对于大面积的遮挡物,比如不透明的对话框时,可以做覆盖优化,让被覆盖的对象不进入渲染管道。在这个 demo 里都没有实现。或许以后再有时间,我会丰富 demo 的内容。

Q: 如何联系作者?
A: 作者的主页是 [External Link]http://www.codingnow.com 在那里可以找到云风最新的联系方式,而且主页上有留言本,blog 和个人 wiki 也都可以留言。如果主页有一天不能访问,请用 google 搜索“云风”

Q: 这些 source code 有版权吗?
A: 作者云风保留版权,但是你可以自由的使用它,免费用在你想用的任何项目中。如果你在使用之前通知一下我,我将感到高兴,但你不这样做,也不会被指责。不过,云风保留修改和散发这些代码的权利,任何人不允许自己在公开的场合,如你的个人主页,blog,或是公开的 论坛,maillist 等地方散发这些代码。这样做,是为了代码中的 bug 可以得到及时修改,请谅解。如果你对代码做出了大规模的修改增删,那么欢迎你当成你自己的作品发布。


云风,于二○○六年五月廿一日
[External Link]http://www.codingnow.com