⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 g05.htm

📁 一本介绍如何开发游戏,如何进行游戏编程的非常值得一看的好书.
💻 HTM
📖 第 1 页 / 共 2 页
字号:
                HAL(硬件抽象层)是接近硬件的底层。它直接和硬件交流。该层通常有设备生产商提供的设备驱动程序。可以通过常规DirectX调用直接和硬件进行联系。使用HAL要求硬件能够直接支持所要求的性能,这时使用HAL,就能够提高性能。例如,当绘制一个位图时,使用硬件要比软件更胜任该项工作。<br>                当硬件不支持所要求的性能时,使用HEL(硬件仿真层)。我们以使用视频卡旋转一个位图为例来说明。如果硬件不支持旋转动作,则使用HEL,软件算法取代硬件。很明显这样做速度要慢一些,但关键是这样做至少不会中断应用程序,应用程序仍然在运行,仅仅是速度慢一些而已。另外,HAL和HEL之间的切转是透明的。如果要求DirectX做某工作,而HAL直接处理该工作,也就是硬件直接处理该项工作。否则,HEL将调用软件仿真来处理该工作。<br>                你可能认为软件层次太多。这是一个问题,但实际上DirectX非常简单,使用时你要做的可能只是一个或两个额外的函数调用。购买2D或3D图形、网络和音频加速卡花费很少,你能想像为市场上所有视频加速器来编写一个驱动程序吗?请相信我,这将需要无数的人工作无数年,也就是说这根本就做不到。DirectX是Microsoft和所有的软件开发商倾注了大量努力为你提供的高性能的标准。</p>            <p><b>深入DirectX基础类</b></p>            <p>  下面我们快速浏览一下每个DirectX6.0版本的组件,它们是:<br>                <b>DirectDraw</b>——控制视频显示的基本着色和2D图形引擎,是所有图形必须穿过的通道,可能是最重要的DirectX组件。DirectDraw的对象大都是系统中的视频卡。<br>                <b>DirectSound</b>——DirectX中的声音组件,只支持数字声音,不支持MIDI。但是该组件能够使你的工作简化100倍,因为它处理声音时不再需要第三方的声音系统。声音编程是一种黑色艺术,过去没有人想为所有的声卡编写驱动程序。因此,许多生产商目光集中在声音效果库的市场上:Miles               Sound System和DiamandWare Sound Toolkit。这两个系统只能允许从DOS系统或Win32平台下装载和播放数字和MIDI声音。但是随着DirectSound、DirectSound3D以及最新的DirectMusic组件的出现,第三方音效库已经使用得越来越少了。<br>                <b>DirectSound3D</b>——DirectSound的3D声音组件,使得3D声音在房间中环绕。这是一种相当新的技术,但是正快速地成熟着。现在大多数声卡支持硬件加速的3D效果,包括Doppler转换、折射、反射等等。但是如果使用软件仿真的话,这些都不需要了。<br>                <b>DirectMusic</b>——最新的DirectX组件,DirectMusic具有DirectSound不支持的MIDI技术。不只是这些,DirectMusic具有全新的可下载声音(DLS)的系统,使得用户能够创建乐器的数字表示方式,并且能够通过MIDI控制来回放声音。它就像一个波形表合成器,不过是软件合成器。DirectMusic具有各种人工智能系统的全新性能引擎。在实时运行中可以通过支持的模板改变音乐。重要的是该系统能够任意创建音乐。<br>                <b>DirectInput</b>——该系统处理所有的输入设备,包括鼠标、键盘、游戏控制杆、操作杆、控制球等等。现在DirectInput能够支持力反馈设备,该设备具有电机传动设备和应力传感器,以允许人工显示力,因此用户能够感觉到力的存在。它正在真正地将计算机空间的“性”产业置于过载状态。<br>                <b>DirectPlay</b>——这是DirectX的网络方面内容,允许通过Internet、调制解调器、直接连接或任何其他能够进行交流的媒体进行抽象联系。最酷的是DirectPlay使得网络毫无了解的人也能建立连接,不必编写驱动程序、使用接口等等。另外,DirectPlay支持会话的概念(正在发展中的游戏)、休息室的概念(游戏玩家聚集和玩的地方)。DirectPlay不会强制玩家进入任何多人玩的网络结构,它只是为你传递和接收包裹。关于DirectPlay的内容和安全性方面已超出本书范围。<br>                <b>Direct3DRM</b>——Direct3D保留模式,它是高级的、以对象、帧为基础的3D系统,能够用来创建3D程序。它利用3D加速器,但速度并不是最快的。它对于编写预排程序、模型显示或速度极慢的演示是非常有用的。<br>                <b>Direct3DIM</b>——Direct3D即时模式,它是低级的DirectX的3D支持。原来由于和OpenGL存在许多冲突,几乎不能使用。老版本的即时模式被称为执行缓冲器,主要是数据和设备的序列,描述绘制的场景非常困难。但是,从Direct5.0开始,即时模式能够通过DrawPrimitive()函数支持大量的类OpenGL界面。这样就可以将三角胶片和风扇等传递到着色引擎中,使用函数调用而不是执行缓冲器来改变状态。因此现在我非常喜欢Direct3D即时模式。尽管本卷和第二卷都是关于软件支持的3D游戏内容的书,为了完整起见,我们将在第二卷的最后来讨论一下Direct3DIM。实际上,在第二卷的CD上有完整的关于Direct3D即时模式的计算机手册。<br>                <b>DirectSetup/Autoplay</b>——这两种组件是准DirectX组件,允许一个程序从用户计算机上的应用程序安装DirectX,当该CD放入系统中时立即启动该程序。DirectSetup是一组很小的在用户计算机上装载的运行时间DirectX文件,并在注册表上注册这些文件。AutoPlay是标准的CD子系统,在CD根目录上查找AUTOPLAY.INF文件,如果找到该文件,AutoPlay执行该文件中的批处理命令函数。<br>                最后,你可能疑惑DirectX为什么有如此多的版本。DirectX好像每6个月升级一次。因为图形和游戏技术变化得太快了,所以我们从事的工作具有一定的冒险性。然而,因为DirectX是建立在COM技术基础上的,我们为之编写的程序——如在DirectX3.0版本上编写的程序在DirectX7.0版本上也能运行。下面我们看一下DirectX如何工作......</p>            <p><b>COM:这是Microsoft的工作,还是魔鬼的?</b></p>            <p>  当前编写的计算机程序很容易达到几百万行,大一点的系统几乎能达到上亿行程序代码。随着程序不断庞大,编写摘要和体系结构就具有非常重要的意义。否则,将导致全盘混乱。<br>                C++和Java是计算机语言方面两种最新的尝试,即使用更多的面向对象的编程技术。C++实际上是C语言的演变(或者说是回流),在C语言中添加了面向对象技术。而Java则是建立在C++基础上的,但它是完全面向对象的,并且更为简洁。另外,Java更大程度上是一个平台,而C++只是一种语言。<br>                虽然使用哪种语言很重要,但归根到底,决定性的是如何用它。尽管C++已经具有了非常酷的面向对象的技术特征,许多人还是不愿使用,或者错误地使用。因此编写大程序依然存在问题。这就是COM模型碰上的一个困难。<br>                COM很多年前作为一种新的软件范例以简单的白皮书的形式出现,这和计算机芯片或Lego块工作的方式相类似。只要将它们拼到一起,就可以工作了。计算机芯片和Lego块知道如何成为计算机芯片和Lego块,因此什么问题都解决了。要利用软件实现这种技术,要使用非常类似的界面,你所能想像的任何类型的函数集都具有它统一的规格。这就是COM做的事情。<br>                对于计算机芯片而言,最大的好处就是当你添加更多的芯片时,不必通知其他的芯片。但是如你所知,使用软件程序来完成就困难一点。你至少要重新编译形成可执行文件,解决这一问题是COM的另一个目标。你应当能够向COM对象添加新的特征,而不会中断使用旧的COM对象的软件。另外,COM对象改变后不必重新编译原来的程序就能工作,这是其最酷的技术特性。<br>                因为能够不进行重新编译程序就可以升级COM对象,所以不使用修补程序或新版本就能够升级软件。例如,有这样一个程序,使用三个COM对象,分别实现图像、声音和网络化(见图5.3)。现在假设该软件程序已经售出了100000套,但是又不希望发送100000套的升级版!要升级图形COM对象,那就给用户一个新的图形COM对象,程序将自动使用该图形对象。不需要重新编译,不需要连接,一切都不需要,非常简单。当然该技术使用低级语言因而非常复杂,并且需要编写自己的COM对象,但是使用起来则非常简单。<br>                下一个问题是COM对象如何颁或包含,如何体现其即插即用的特性。答案是无章可循,但是在大多数情况下,COM对象都DLL。即动态连接库,随着使用的软件带来或者是下载。这样便于升级和更改。这样唯一的问题是使用该COM对象的软件必须知道如何从DLL中装载该对象。该部分内容我们将在本章“创建一个准COM对象”部分中讨论。             </p>            <p> <b>应用DirectXCOM对象</b></p>            <p>  一个COM对象实际上就是实现大量界面的一个C++类或者是一套C++类(一个界面就是一套函数)。这些界面用于和该COM对象进行联系,如图可以看到一个COM对象,它分别具有IGRAPHICS、ISOUND和IINPUT三个界面。<br>                每一个界面都有大量的函数可以调用(只要你知道如何使用)。因此一个COM对象可以拥有个或多个界面,你可以有一个或多个COM对象。并且,COM技术要求说明用户创建的所有的界面必须从一个指定的基本类界面IUnknown中导出。对于一个C程序员来讲,这就意味着IUnknown就像是一个创建界面的字符串指针。<br>                下面是IUnknown的类定义:<br>                ----------------------</p>            <p>  ---------------------</p>            <p>&nbsp; </p>            <p> COM的前景</p>            <p>&nbsp;</p>            <p> 总结</p>            <p>&nbsp;</p>            <p>[<a href="index.html">目录</a>][<a href="g04.htm">上一页</a>][<a href="g06.htm">下一页</a>]</p>            <p>&nbsp; </p>            <p align="center">&nbsp;</p>            </td>          </tr>        </tbody>      </table>    </td>  </tr></tbody></table><script language="javascript">bottomprint()</script></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -