葛洲坝水电站地址:Direct3D制作二维界面-金桥科普

来源:百度文库 编辑:九乡新闻网 时间:2024/07/07 11:08:31
Direct3D制作二维界面
cyrys gameres 2006-09-30Direct3D制作二维界面总结(原创)

Direct3D制作二维界面总结(原创)

 

因为工作关系,最近用Direct3D中的二维部分制作了一个软件的界面部分,在这里将其中的感受写下来,与大家分享,也欢迎大家讨论!

GDI与Direct3D简单对比
GDI: CPU占用少,但易产生画面闪烁现象,在现成的函数中,可达到画面效果比起Direct3D少的多。可以用现成的控件,处理消息方便,但受一定的系统限制!对硬件要求低。
Direct3D:由于程序结构的关系,CPU占用高,须采用脏矩形技术(但增加程序复杂性),才可有效降低CPU占用率,不会产生画面闪烁,可较之容易地渲染出华丽的画面!界面与用户的交互,完全靠自己来渲染不同的画面,控制比GDI 复杂,但可以精确地进行处理,达到自己想要的任何效果!对硬件有一定的要求,还需要装相应的运行时库,虽然使用脏矩形,可有效提高响应速度,但不同配置的机器,还是有明显的差别!还需考虑设备丢失问题。

    Direct3D制作的界面,实际为二维图形交互程序。我在刚开始写时,没有经验,便想到一点点来,但现在回想起来,程序结构是非常重要的,因为它不像GDI,有确定的处理方式,它没有现成的框架可用,我们的界面是什么样子的,完全由自己来控制。因此设计部分时一定要考虑周全,我觉得最基本的要求就是:程序易于理解、扩展并且效率高!对某个事件,一定要理解清楚,如鼠标点击某个图形,你可以在鼠标按下时进行处理相应的事件,也可以在鼠标按下再弹起时再处理,这就要分清其区别,这也是看出,比起GDI可进行更好的控制。
    在我的程序中,二维渲染,用的最多的是ID3DXSprite接口IDirect3DDevice9::UpdateSurface()方法(将后备缓冲作为参数) ,到后面基本上都用前一种了。为测试其性能,我仿照ID3DXSprite做过一个自己的精灵类,即创建顶点缓冲进行纹理渲染,在每次调用时,将顶点位置拷入,再进行渲染,发现两者差不多,只是在渲染比较小的纹理且每一帧渲染很多张纹理时,自己做的精灵类要快一些,所以就没有改它。不知大家是否认同?它可容易地渲染出透明的图形,再配合好美工,做出漂亮的界面是不难的!
    最终我的程序,使用脏矩形,大大降低了CPU占用率,提高了响应速度。程序很小,不到500K,但装入全部资源后,达到了近20M。

今天就想到这么多了,欢迎讨论,更希望抛砖引玉!
来Gameres.com这么久了,这是第一次发这样的贴子,希望和大家共同进步!:)