掀起Directx的盖头来 樊一鹏 1997-01-01   不知大家最近有没有注意到,Windows 95下的好游戏突然多了起来,且有疯狂蔓延之势,另有消息表明,绝大多数著名的PC游戏软件开发商都已经、正在、或者将会把Windows 95作为他们产品的主要运行平台。甚至不少过去只为专用游戏机制作软件的开发商,也把他们的视线投向了Windows 95。   记得昔日Windows 95刚发布之日,尽管MicroSoft极力鼓吹Windows 95是最好的游戏开发平台,然而始终应者寥寥,也不见有何惊人佳作。为何时隔不久,Windows 95就突然变得如此惹人喜爱了呢?   这一切都是因为Bill Gates下令推出了MicroSoft DirectX之故。   那么到底什么是MicroSoft DirectX?MicroSoft DirectX又有何厉害之处呢?   为了掀起DirectX的盖头,且让我们先来看一看PC机常用的几个操作系统(因为它们是PC GAME开发平台的最底层):   DOS、Windows 3.1、Windows 95。   在MicroSoft DirectX推出之前,绝大多数的PC游戏一直采用的是DOS。   在应用软件纷纷由DOS到Windows 3.1,又由Windows 3.1到Windows 95的大形势下,游戏开发却干嘛非要背道而驰呢?   我们不妨假设有一位经验丰富(除了做游戏)的应用程序员,现在突发奇想,想要开发一只PC GAME了。以他的经验,无疑会选择Windows,原因很简单,在Windows下写这种程序很简单,一切几乎都是现成的,不像在DOS下,一无所有,图形、声音、内存……每一个问题都足以成为他放弃DOS的理由。   然而,可以保证,程序写到一半,他就不会再想用Windows了,因为他已经发现,他将写出的游戏(不管好不好玩),都需要100倍地提高机器性能才会流畅。   怎么会这样呢?   原来,Windows接管了所有的系统资源,你对设备的操作,实际上都变成了对Windows的功能调用。这样一来,就可以很容易地实现设备无关性。对应用程序来说,这当然是极大的好处。不要重写代码,你的软件就可以轻易地在不同环境下顺利运行了。   不过在得到这种好处的同时当然也要付出代价——效率。比起直接操作硬件来说,调用Windows功能当然要多花点时间。这对于一般的应用程序,不会有太明显的影响。   不幸的是,游戏软件通常都要求大量的图形、声音等各种操作,如果每次操作都去调用Windows功能来完成,当然会奇慢无比。   那好,我们来直接操作硬件行了吧?别忘了,Windows接管了所有的系统资源,直接操作硬件又会很容易导致系统崩溃。   这样一来,难怪大家一直都爱(不得不爱)写DOS GAME了(注:还有一个原因是,DOS下已有许多优秀的游戏开发平台。)。   看来,Windows不是(本来就不是)专为编写游戏准备的。   这些问题,MicroSoft不是不知道。早在Windows 3.1的时代,就推出了WinG,试图通过允许直接操作缓存来提高Windows的图形性能以满足此类需要,不过由于硬件的限制,WinG还是没能很好地发挥出其威力。   Windows 95出现以后,这些问题依然存在。而且随着硬件的飞速发展,DOS和那些DOS下的开发平台也已经越发显得跟不上时代了。在DOS下,明明有很好的硬件,但由于缺乏一个统一标准,各种硬件加速特性根本就不敢用,人们迫切需要一种既能够实现硬件无关性、又能够充分利用硬件加速特性的方式。   终于,在WinG的基础上,MicroSoft DirectX诞生了。   MicroSoft DirectX实际上是一个API的集合。具体说来,DirectX的功能就是允许游戏开发者去访问硬件的特殊功能,却不需要编写任何一点同硬件相关的特殊代码。   很明显,用DirectX开发的软件可以充分地利用各种硬件的加速特性,又可以省掉大堆繁琐的代码,同时还可以获得Windows 95所带来的其他好处,难怪说它是Windows 95游戏开发的终极武器。   可以这样说,DirectX把Windows 95变成了超级游戏平台,DirectX也给硬件业界提出了一个不错的标准,现在市面上能见到的各种硬件,大都已经支持它了。随着今后硬件技术的进一步发展,DirectX的优势将会越来越明显。   到目前为止,MicroSoft DirectX已经发展到了5.0版本,不过,眼下最常用和最常见的还是2.0和3.0版本。   早在DirectX 1.0时,MicroSoft就提出,MicroSoft DirectX的主要目标是使得那些基于Windows平台的应用程序之性能足以达到或者超过基于DOS或者其他平台的应用程序。而它的另外一个目的就是为游戏开发者开发Windows的游戏准备一个功能强大的标准化平台,并提供有良好的文档。   在这个时候,MicroSoft DirectX共由五个部分组成:   DirectDraw,通过它可以充分利用硬件加速来实现动画,以及直接对显存实现位图的存取,包括图块传送、缓冲区卷轴等等。   如果你有写游戏程序的经验,你马上就可以意识到它能够作出些什么了,随便举个例子,《DIABLO》玩过吧?它的游戏画面,就是用DirectDraw来生成的,效果如何?不过它用的不是1.0版本就是了,但实际上,DirectDraw在DirectX的后继版本中一直没多大变化。   DirectSound,利用软件和硬件的特性来实现声音的混音和回放等等。这是做游戏必不可少的部分,它可以让声卡同时发出几个不同的声音,比如在枪声响起时听到敌人发出的惨叫,这样的效果更真实。现在几乎所有的游戏都用到了这一点,不管它是for DOS还是for Windows的。   DirectPlay,借助Windows 95的强大网络功能,使游戏者能够轻易地通过MODEM或者网络进行联网游戏。这可是一个好宝贝,现在的游戏很注重联网功能的,有DirectPlay现成可用,实在是好爽!   DirectInput,提供游戏杆为主的各种输入设备的标准接口,甚至可以支持各种未来的输入设备,但这时还不支持键盘和鼠标。   AutoPlay,自动播放(实际上是Windows 95的功能),一插入光碟,就自动开始运行它。   MicroSoft在实现DirectX这些部分的时候,其最主要的目标是速度,而不是什么高级功能。因为速度才是追求高性能游戏的开发者所最感兴趣的。说真的,一个有经验的游戏开发者是不会太在意系统是否提供什么高级功能(有当然更好),他首先只会关心系统是否提供高性能,如果确实需要什么高级功能而系统没提供的话,自己写一个就是了。实际上,往往有为了提高运行效率,放弃现成的高级功能不用,而从底层重写的情况。   具体在使用DirectX的过程中,你会惊奇地发现,即使你的硬件不支持某些功能,但它照样能够通过软件模拟来实现这些功能。一旦今后换上了新的硬件,它就能工作得更好,效率更高。   原来,DirectX在这里提出了两个概念:HAL和HEL,其全称是hardware-abstraction layer和hardware-emulation layer,即硬件抽象层和硬件仿真层。借助于HAL和HEL,开发者完全与硬件隔绝。当应用程序工作时,如果使用硬件支持的功能,那么,应用程序将会调用HAL,否则,应用程序将会调用HEL来完成这些硬件不支持的功能。而这种过程,开发者完全不用操心,DirectX会为你完成一切。   到了DirectX 2.0,除了进一步完善这几个组成部分外,最重要的是引入了 Direct3D。这一下,3D功能的实现变得非常简单了。   Direct3D从高层提供了保留模式的界面,使用它,直接可以做出一个十分完整的三维图形系统。不过,Direct3D同一般的三维图形系统比起来,更看重的是速度,而不是生成图形的质量。Direct3D这样做的目的,显然是为了即时生成三维图形,牺牲一点图形质量是完全可以理解的。但是,请放心好了,用它即时生成的三维图形,效果也不坏。   另外,Direct3D还从低层提供了立即模式的界面,为应用程序以设备无关的方式同硬件加速打交道准备了低层接口,从而可以获得更好的性能。事实上,保留模式就是建立在立即模式基础之上的。   DirectX 3.0同DirectX 2.0相比,又有了不少改进。   DirectX 3.0在DirectSound中,增加了DirectSound 3D功能。换句话说,使用DirectX 3.0可以实现三维音效。   在DirectSound3D中,你可以把一个声音定义为点音源,这样的话,无论观察者位于何处,它都能被听到。而且声音的传播范围是可控的,在这个范围内,离音源越近,听到的声音越大,离音源越远,听到的声音越小,非常逼真,超出这个范围,声音就听不到了。如果你把一个声音定义为按圆锥体发射的音源,则情形就略微有些不同了,只有当你位于这个圆锥体内,你才能听到音源发出的声音。   到DirectX 3.0为止,DirectPlay已不仅仅是应用程序之间实现设备无关通 信的一种方式,它已经变成了一种技术,被看作是独立的媒体服务器。包括支持 Internet、直接连线等许多新特性、新技术正是在此时被加入其中。   在新的DirectInput中,加入了对键盘和鼠标的支持,毕竟它们更为常用。   DirectSetup是新加入的组成部分,用来帮助应用程序进行安装、注册等工作。   总的说来,DirectX 3.0已经是一个相当完善的游戏开发平台了。   在它之后,MicroSoft将跳过4.0版本直接推出5.0版本(这好像是MicroSoft的老习惯了)。   了解了DirectX概况,让我们再来看看它具体是如何使用的。   MicroSoft DirectX被分为了运行库和开发包这两个部分。对于游戏者来说,为了玩一个使用DirectX的游戏,他只需要在他的Windows 95下装载相应版本的DirectX运行库就行了。一般说来,用到DirectX的游戏在安装的时侯都会提醒你(或自动)装载它的运行库,而这个运行库通常会随游戏一起提供给你。也许有人还会担心,DirectX的运行库安装起来是否很麻烦。其实这个过程很简单,启动它的安装程序,再等一会儿就完工了。在整个过程中,不要你针对自己的硬件作任何一点复杂的设置,够容易吧。(DirectX的运行库在电脑报配套光盘第一期里也可以找到)   如果你是想用DirectX来进行开发的话,你应该使用DirectX的开发包,即MicroSoft DirectX SDK,它由MicroSoft免费提供。有三种途径可以得到: #3  1.从WWW上下载,大约共八十兆,地址是:   http:∥www.microsoft.com/msdownload/directx3.htm #3  2.购买MicroSoft Visual C++系列产品   这是因为在Visual C++ 4.X中就包含有MicroSoft DirectX SDK 2,不过它被称为GAME SDK。而在新的Visual Studio 97里,Visual C++ 5.0就干脆包含了MicroSoft DirectX SDK 3。 #3  3.订购电脑报配套光盘第二期   它提供了完整的MicroSoft DirectX SDK 3。   在MicroSoft DirectX SDK里,提供有完整的头文件、链接库、帮助文件,还有丰富的例程可以帮助你快速入门。不过这些例程都是C/C++形式提供的,所以你应该去找一个Visual C++ 2.0以上的版本来用。   除了C/C++,现在连Delphi甚至Basic都能使用DirectX了。而且也不是只能使用Visual C++,WATCOM C++和BC++也已经能用它。   DirectX的盖头已然掀开,想写出新一代游戏程序的朋友们,赶快去试一试!