在CB中进行DirectX编程

2008-02-23 05:35:40来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

C Builder是个可视化的C 编程环境,他为编程人员提供了一种方便高效、简便的C 语言研发工具,因此已为广大C 程式员所青睐,DirectX研发工具包是微软公司提供的一套Windows9X下研发高性能图像、声音、输入输出和网络游戏的接口,其高效的直接硬件访问、程式和硬件设备之间的相对单独等特性,几乎使得DirectX成为唯一能够在Windows操作系统下研发游戏程式的基本工具软件。
虽然C Builder中直接包含了一套DirectX3的研发包,也提供了一些例程,但是这些例程没有系统化的说明,同时也不适合DirectX5以上的程式研发。另一方面,几乎任何关于DirectX研发的书籍和文献均使用Visual C 语言描述,所以作者将自己在C Builder中的一些研发经验介绍给读者。

本文适合具备C Builder面向对象编程经验的读者,实例研发环境为中文Windows98、C Builder4、DirectX6或以上的研发工具包。

一.DirectX简介

1_1.DirectX的特性

1_2.DirectX是一种Windows环境下标准的高性能游戏、多媒体研发工具包,使用DirectX研发的程式能够和操作系统默契地配合成为“真正”的桌面应用程式;能够利用硬件厂商提供的驱动程式接口,充分最好的设备性能;通过直接底层硬件操作,实现最快速、短延时、设备无关的底层接口。

1_3.DirectX采用了组件对象模型(COM)标准,因此对于不同对象的版本能够有不同的接口,这使得用DirectX研发的程式在未来将得到完全兼容和支持的确保。

1_4.DirectX的结构

DirectX需要以设备无关的方法提供设备相关的性能,所以DirectX的结构是由两个驱动程式构成:硬件抽象层(HAL)和硬件模拟层(HEL),当Direct对象创建时,会同时建立一张“兼容表”,其中记录了当前硬件系统支持的功能,当DirectX需要实现某个功能时就查询该表,得到硬件对功能的支持信息,假如功能能够得到硬件支持,则向HAL发出求,以得到硬件的支持,否则向HEL发出请求,以模拟方式实现功能。

1_5.DirectX的主要组成

 

(1)DirectDraw:直接访问图像硬件,管理用于显示的内存(显示内存和系统内存),提供高速图像和页面转换动画;

(2)Direct3D:提供3D硬件接口;

(3)DirectInput:主要支持输入服务,同时支持输出设备;

(4)DirectSound:提供3D声音效果,管理声卡内存;

(5)DirectPlay:提供网络多人游戏的通讯、组织功能;

(6)DirectSetup:自动安装DirectX驱动程式。

本文将按照DirectX的上述组成,分别以实例介绍其在C Builder中的实现方法。

 

 

二.DirectDraw程式设计

 

2.1 DirectDraw实现的基础—显示方式的配置

设计图像程式首先碰到的问题是将屏幕配置成一种合适的图像显示方式,然后把图像绘画到屏幕页面上。假如您在DOS下研发图像应用程式,这将是很简单的事,只要调用DOS的中断服务程式即可实现,但是使用用DirectDraw就比较复杂。由于DirectDraw的设计目标是提供设备无关的编程接口和高效、多功能的硬件访问支持,所以DirectDraw需要考虑更多的问题。

DirectDraw在Windows环境下支持两种图像方式:全屏幕独占方式和窗口方式。这里我先以全屏幕独占方式,介绍DirectDraw配置屏幕显示方式步骤,函数具体使用格式和编程方法将在2.2中介绍:

2.1.1 选择硬件设备

电脑系统不一定只有一个DirectDraw硬件抽象设备,例如,一台电脑可能有两台或更多的显示器,那么DirectDraw对象和哪个HAL对应呢?我们能够使用DirectDrawEnumerate函数来枚举系统任何已安装的设备,以供选择,并返回设备的唯一标识GUID。DirectDraw默认主显示设备的GUID为NULL;

2.1.2 创建DirectDraw对象

由于DirectX是使用面向对象的程式设计技术,因此,使用DirectDraw编程就首先要创建DirectDraw对象。使用DirectDrawCreate函数及将第一步获得的设备GUID作为参数能够创建基于所选设备的DirectDraw对象;

2.1.3 获取DirectDraw更高版本的COM接口

假如您不打算使用DirectX5以上版本提供的功能则能够跳过本步骤,否则必须使用新创建DirectDraw对象的QueryIntrface方法来获得IDirectDraw2或更高的COM接口。在2.2例中将介绍如何获得DirectX5以上版本提供的IDirectDraw2接口;

2.1.4 配置协作级别

协作方式能够控制程式和系统其他应用程式之间的交互关系,典型的例子是:配置为全屏独占方式还是窗口普通方式。配置协作级别能够用DirectDraw对象的SetCooperativeLevel方法;

2.1.5 枚举设备支持的各种显示方式,选择并配置合适的显示分辩率、色彩深度和刷新频率等。

使用DirectDraw的EnumDisplayModes方法能够枚举设备支持的任何图像方式供用户选择,在某些已确定图像显示方式的应用程式中能够通过此枚举功能来检查系统设备是否支持指定的图像显示方式。

使用DirectDraw的SetDisplayMode方法能够配置所需要的图像显示方式。

 

2.2 用DirectDraw配置屏幕图像显示方式的实例

现在我们开始编写第一个示例程式“配置全屏幕独占图像显示方式的程式”dx1,首先我们将在这里讨论C Builder中进行DirectX编程的有关问题,然后再周详介绍实现程式每一步骤的相关技术。

2.2.1 dx1程式运行过程介绍

dx1是根据DirectDraw配置屏幕图像方式的过程设计的,运行界面如图2.1所示。在窗口右边有六个功能按钮,他们按照屏幕图像显示方式配置实现的步骤自上而下排列,程式开始运行时,除第一个按钮“显示设备的枚举”是可用的,其他按钮均不可用。由于用户必需按照固定的步骤操作,所以,当一个按钮任务完成后,dx1程式会将下一步任务的


图2.1 dx1 屏幕显示方式配置程式运行界面

按钮设为可用。

按下“显示设备枚举”按钮后,窗口左上方“运行状态”对应的文本框中将显示任务完成情况,若成功则显示“Enumerate devices OK!”,否则显示“Enumerate devices failed!” ,同时在状态组中的设备枚举下拉框中能够看到枚举的设备(一般系统只有一个”主显示设备—Display);确定设备枚举选择为“主显示设备”后,能够进行“创建DirectDraw对象”、“获得COM的IDIRECT2接口”、“配置协作级别”,每个步骤的运行状态都会显示在“运行状态”右边的文本框中;在执行了“DDraw2显示模式的枚举”后,状态组下方“显示模式DDraw2”下拉框中将列出任何显示设备支持的显示方式,选择需要的图像显示方式,再按“配置DDraw2”的显示方式,屏幕就会立即转换为指定的显示方式。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 使用双缓冲技术绘制曲线图

下一篇: 命令行参数的分析