在CB中进行DirectX编程(1)
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作 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |