设为首页 加入收藏

TOP

VC中借助DirectDraw实现水波的模拟(二)
2014-11-23 19:52:44 】 浏览:540
Tags:借助 DirectDraw 实现 水波 模拟
) < stonesize*stonesize)
     buf1[BACKWIDTH*posy+posx] = -stoneweight;
     ……
}

   虽然在前面的推导中多处采用了看似过分的非常近似的处理,但是完全不必担心,事实证明,用这种方法,在速度和图象上都可以获得非常好的效果。下边就是从其中截取的一帧画面,很逼真的再现了水波的产生过程。



   这种用数据缓冲区对图象进行处理的方法的最大的好处就是:程序运算和显示的速度与水波的复杂程度是无关的,用类似的方法完全可以对其他一些物理、自然现象如烟雾、云彩、阳光等进行逼真的模拟。
三、 利用DirectDraw完成对图形的加速

   从前面可以看出,我们一直在处理速度上比较严格。竭尽所能来提高数据的处理速度,不仅在算法上如此,在显示上更是如此。普通的GDI函数的处理速度在这里是无法容忍的,对此采用了DirectX系列技术中的DirectDraw技术来对图形进行加速处理。

   DirectDraw是DirectX SDK系列中的一员,也是其中最主要的一个部件。它允许程序员直接的操作显存、硬件位图映射以及硬件覆盖和换页技术。它在提供直接访问显示设备的同时,与GDI相兼容,它只是一个软件接口,提供了一种与设备无关的途径,以获得访问特定的显示设备的某些高级特性的能力。大体上DirectDraw可以提供了以下几个功能,而这些功能以前只有那些专为特定显示设备所写的软件中才能使用:

   支持双缓冲和换页图形

   访问、控制显示卡的位图映射

   支持3D z-buffers (z缓存)

   支持z方向(z-ordering)硬件辅助覆盖。

   访问图形缩放硬件

   仿真访问标准的和增强的显示设备内存空间

   下面就对DirectDraw的在图形加速方面中的具体应用结合本程序的具体实例来进行介绍,为方便起见,本工程采用Microsoft SDK编码,先要对DirectDraw环境进行初始化,完成设置并在其中对主页面和各离屏页面进行创建并初始化之:

BOOL InitDDraw(void)
{
  DDSURFACEDESC ddsd;
  HRESULT ddrval;
  ……
  //创建DirectDraw对象
  ddrval = DirectDrawCreate( NULL, &lpDD, NULL );
  ……
  //取得全屏独占模式
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Visual C++ 入门精解-第一部分 下一篇Visual C++ 入门精解-引言

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目