DirectX 入门 第一章 翻译

来源:转载

第一章 DirectX简介

DirectX是一个Windows平台上的初级的游戏开发应用程序接口(API)。几年前,不少游戏开发者还在为硬件的兼容问题争执,因为它很难让每个人都能玩上他们的游戏。此后,微软便推出了DirectX,它提供给了游戏开发者一个能够兼容几乎所有不同硬件平台的独立的、清晰的API。在DirectX发布几年后,Windows平台下的游戏出现了显著的增长。

本章的内容的包括:

  1. 什么是DirectX
  2. 为什么使用DirectX
  3. DirectX API 有哪些模块组成

什么是DirectX?

DirectX是微软给那些Windows下的游戏开发者提供的一套底层的API,当前它的最新版本是9.0。每个DirectX组件提供了对不同硬件的访问,通过一个标准的接口可以访问图像、声音和网络等硬件进行访问。这个接口允许开发者使用一组与硬件无关的函数来开发他们的游戏。

组件

DirectX API 被划分成了一组组件,其中每个组件代表了系统不同的方向,而每个组件都能独立的使用,因此,只需要向游戏中添加你需要的功能性组件即可。以下列出了这些组件:

  1. DirectX Graphics,这个组件是用来处理所有图形输出的。这个API提供了2D和3D图形绘制的函数,而且还能初始化和设置你游戏的分辨率。
  2. DirectInput,这个组件处理所有的用户输入。它提供了对键盘、鼠标、手柄和控制杆等硬件的支持。DirectInput现在也加入了对力回馈设备的支持。
  3. DirectPlay,这个组件提供了游戏的网络支持。网络功能通过与其他机器的通信,能够提供多人的联机游戏。DirectPlay提供给了游戏开发者一个高级接口,使他们能够脱离网络通信的实现。
  4. DirectSound,当你需要添加一些音效或背景音乐的时候,就会需要这个接口。这个接口允许加载和播放一个或多个WAV文件,而且还能提供对他们的播放控制。
  5. DirectMusic这个组件允许你添加一些动态的音轨。使用定位,调速和调整音量等功能可以对音轨进行回放或者调整游戏的设置。
  6. DirectShow通过这个组件你可以访问场景和音频流。AVI、MP3、MPEG和ASF文件只是DirectShow支持的一小部分格式,它还能播放一些其他的格式。使用DirectShow,不需要将整个文件读入内存,可以从硬盘或CD-ROM中流式的读取文件。
  7. DirectSetup在整个游戏开发完成后,你希望向其他人展示,DirectSetup提供一个在用户电脑上安装最新版本的DirectX的功能。
 


小提示

 DirectX Graphics组件包含了DirectDraw和Direct3D所有的功能。DirectX第七版是最后一个将DirectDraw独立出来的版本。


为什么使用DirectX?

在Windows操作系统发布以前,开发者只能给DOS开发游戏。而DOS这个单线程,无图形界面的操作系统只提供给了开发者一个他们代码和硬件间直接路径。当然,这既有好处也有问题。比如说,这个直接路径可以使开发者利用机器的所有潜能来提高游戏的性能,缺点就是开发者需要实现他们游戏所支持的硬件的驱动。这些驱动包含一些常用视频和音频的驱动。而且那时,不是所有的显卡都遵循相同的标准。这使得开发一个320×240分辨率以上的游戏变得尤为困难,因为仅仅是开发一个640×480分辨率的游戏都会让开发者他们自己来直接写显存和处理显卡寄存器的这些复杂的操作。显然,开发者希望找一种更好更简洁的方法来开发游戏。

当Windows3.1发布的时候,它也有着与DOS相同的一些限制,因为当时Windows运行在DOS之上。它严格地限制了游戏的可用资源,而且把开发者依赖已久的直接访问权限也去除了。那时大多数支持Windows的游戏是卡片和棋牌游戏,因此动作游戏只能继续在DOS下运行。

以前,微软已经尝试过通过一个名为WinG的库给开发者提供一个访问显卡的快速方法。它是DirectX的雏形,但是只提供了少量有限的功能。WinG是一次不错的尝试,但是他并没有提供给开发者太多的像DOS一样的系统访问需求。

伴随着DirectX 1的发布,微软解决了大量开发者提出的问题。DirectX 1 又被称作游戏软件开发套件(SDK),它提供了一个独立的库给开发者进行开发,定义了介于游戏与硬件的一个中间层。从此,在屏幕上进行绘制图形变得简单起来。第一版的DirectX并没有支持所有的硬件,但是它仍然给那些有所期待的开发者们一个好的开始。多年过去,现在DirectX已经升级到了第九版,在提升原始功能的同时也加入一些如联机游戏,音频视频流媒体和对新的输入设备的支持。

DirectX是怎样组织的?

DirectX让那些Windows下的开发人员的生活变得简单。微软意识到了游戏的重要性和潜在的市场,便给开发者提供了一组更清晰的库集。

这些年以来,DirectX得到了提高和改进,在老版本的基础上,进行了更新和对新硬件的支持。同时微软也希望新版本的DirectX能够完美地支持旧版本开发的游戏。为了解决此问题,微软在COM基础上构建了DirectX。

组件对象模型(COM)

DirectX API是基于组件对象模型(COM)的。COM对象包含了一组用于揭示开发者用于访问DirectX的方法的接口集。COM通常是一些已经在操作系统上注册了的DLL文件。对于DirectX COM对象,注册通常发生在DirectX的安装中。尽管它们与C++对象很类似,但是COM对象需要使用一个特定接口去访问它们中的方法。这实际上是对标准对象的一个改进,因为一个接口的多个版本能够在同一个COM对象中出现,而且允许向上兼容。

例如,每个版本的DirectX都包含一个可以通过API访问的新的DirectDraw接口,同时仍然包含了旧版本的DirectDraw,而且不会破坏已存在的代码。所以那些用DirectX 7 创建的游戏依然可以完美的地运行在DirectX 9 下。

COM对象的另外一个优点就是它不光能在C++下工作,它还支持多种其他语言。开发者可以使用Visual Basic,C++和C#来调用DirectX库。

体系结构

DirectX基于两个层面:一个是API层,另一个是硬件抽象层(HAL)。API层通过与HAL的交流来和硬件进行通信。HAL提供了对DirectX的一个标准化的接口,而且通过它特殊的设备驱动可以直接访问硬件,因为HAL需要知道硬件和设备驱动是怎样工作的,所以它由硬件厂商来开发。开发者不需要与HAL进行直接的交互便可以开发他们的游戏,但是仍然可以用DirectX提供的函数对它进行间接地访问。图1.1显示了Direct3D、HAL和硬件设备驱动的层次结构。

图1.1 DirectX层次结构

在过去的版本中,DirectX被划分成了HAL和另一个名为硬件仿真层(HEL)或RGB设备的层次。HEL仿真了一些硬件缺失的功能。这就允许低端和高端的显卡可以无缝地提供一些相同的功能给DirectX API。尽管HEL的功能相同,但是性能不同。因为HEL完全通过软件进行渲染,通常的帧数肯定显著的低于硬件加速。

HEL后来被即插软件设备所替代了。这种设备可以表现出软件渲染但是必须有应用程序开发者来编码。大多数在售游戏都不再使用软件渲染了而是使用一块支持3D的显卡,因为现在大多数机器已经支持它了。


小提示

Direct3D设备驱动套件(DDK)提供了对即插软件设备编程的信息。


本章小结

现在你已经掌握了一些DirectX的背景知识。下一章我们会深入了解怎样创造你的第一个DirectX应用程序。


分享给朋友:
您可能感兴趣的文章:
随机阅读: