单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,游戏编程技术,DirectX,1,DirectX,DirectX,是由,微软,公司建立的游戏编程接口由,C+,编程语言,实现,遵守,COM,约定其影响力已渐渐超越,OpenGL,并被大多数,PC,游戏开发商所采用2,DirectX SDK,简介,当,Windows,系统成为个人计算机的标准操作系统后,多任务与共通的特性让软件工程师不必再为兼容性的问题伤脑筋,但这些特性的副作用就是“慢”,使得直接存取图像、声音与硬件能力受到很大的限制,甚至让高度的声光效果游戏停留在,MS-DOS,阶段直到,DirectX,的前身“,Game SDK”,的出现,程序才可以直接存取硬件,游戏才得以在,Windows,平台上快速发展3,利用,DirectX SDK,开发出来的应用程序,必须在安装有“,DirectX,客户端”的计算机上才能正常运行。
后面的内容将介绍运用,DirectX,设计游戏程序的技巧,读者必须先在计算机上完成,DirectX SDK,的安装,可以到微软的网站“,”,上下载最新版本4,DirectX,的特色,与硬件无关的特性,Windows,的最大优点就是软件与硬件无关软件工程师不需要考虑硬件芯片、制造商或等级,只需要针对,DirectX,来设计,,DirectX,会通过硬件驱动程序把程序转换成硬件所属的相关命令5,直接存取显存,目前的大部分显示卡都已经内建了,8MB,32MB,的显存,而,DirectDraw,可以直接存取这些显存,并且利用“切换页”的方式快速显示图象,实现动画,背景的卷动,而且像镂空、半透明等效果的制作将图形显示的效能发挥得淋漓尽致6,支持硬件加速,DirectX,支持硬件的加速功能,当建立,DirectX,对象时,程序会自行查询可使用的硬件,查询设计师不需要担心玩家使用怎样的计算机配备,不论是显示卡、声卡或者是输入外围设备,若程序查询到可使用的硬件,则有硬件,HAL(Hardware Abstraction Layer),来运行,否则则自动由软件,HEL(Hardware Emulation Layer),来模拟。
关闭硬件加速,采用软件解码,开启硬件加速,采用硬件解码,7,网络联机功能,程序设计者可以使用,DirectPlay,轻松开发多人联机游戏,联机的方式可以是局域网、调制解调器及各种通信协议8,“DirectX”,可视为一种程序设计者与硬件间的接口程序设计者不需要花费心思去构想如何来编写底层的程序代码与硬件打交道,只须巧妙地运用,DirectX,中的各类组件,便可简单地制作出高效能的游戏程序9,Windows win32,应用程序,GDI,Windows DDI,设备驱动程序接口,硬件:音频、视频、输入、存储设备,Direct Draw graphics,Direct input,Direct play,Direct set up,Direct audio,Direct show,HEL,硬件仿真层,HAL,硬件抽象层,10,HAL and HEL,DirectX Graphics,的工作很简单:,如果硬件设备提供相应的硬件加速功能,那就用硬件加速,;,如果没有相应的硬件加速功能,那就软件模拟,;,之后就通知硬件设备的驱动层HAL,:硬件抽象层直接与硬件对话当硬件设备支持您请求的功能时,将使用,HAL,得到硬件加速。
HEL,:当硬件设备不支持您请求的功能时,将使用硬件仿真层,HAL,,使用,HEL,速度较慢,但能保证程序得以正常运行11,DirectX,的内容,组件名称,用途说明,DirectGraphics,DirectX,绘图引擎,负责把影像绘制到屏幕上,DirectSound,控制声音设备以及各种音效的处理,DirectInput,处理各种输入设备(鼠标、键盘、摇杆)的消息能,DirectShow,播放影片与多媒体的方法,DirectPlay,用来建立多人联机的网络功,12,DirectGraphics,在,Direct 7.0,之前,绘图引擎分成,DirectDraw,与,Direct3D,Direct 8.0,则针对游戏,3D,化而将,DirectDraw,与,Direct3D,合并,取名为,Direct Graphics,,专门处理,3D,绘图影像及利用,3D,命令的硬件加速特性来发展更强大的,API,函数到目前为止,大部分在,Windows,操作系统下运行的,3D,游戏,都是由,Direct3D,所发展而来的13,Direct3D,提供了两种,API,模式:,立即模式:,立即模式属于较低层的,API,函数,提供了直接访问硬件并允许熟练的,3D,程序员执行自己的渲染和场景管理。
提供较大的弹性开发,3D,环境,而且所开发出来的游戏在计算机上运行时也能够提供最好的效率表现这种方式在灵活性和执行性能方面都优于保留模式保留模式:,保留模式提供了场景和对象管理服务以及构建几何引擎比立即模式容易学习与使用,它架构在立即模式的上一层14,3D,游戏的构成是由程序代码来建构游戏中的场景、模型、贴图管理、特效及光影效果等技术通常要表现出这些真实的,3D,效果这需要耗费掉相当大的系统资源,如果游戏的架构规则不很明确,往往会表现出令人无法忍受的画面及游戏中较低的运行效率开发,3D,游戏之前,就要考虑其游戏画面品质的呈现与如何节省资源等问题,而,Direct3D,可以在这两者之间做一种良好的抉择,所以,Direct3D,的立即模式运用将是开发游戏时的重心15,DirectDraw,简单易学,在纯,2D,环境的平面绘图上有相当不错的表现在,DirectDraw,时代,只要调用,BltFast,指定几个贴图的位置,就能轻松地把影像文件贴到画面上,也能调用,Blt,来进行简单的影像处理,绘制成想要的结果DirectDraw,除了简单外,要做出相当炫的特效还得自己动手写DirectX 8.0,出现之后,,Direct Graphics,取代了以前,DirectDraw,的工作,“强迫”使用,3D,平台来处理,2D,接口。
16,DirectGraphics,负责处理,2D,和,3D,的图形运算,并支持多种硬件加速功能程序员不必考虑硬件的驱动和兼容问题,即可直接进行各种设置和控制工作,适合开发高互动的,3D,应用程序或多媒体应用程序Direct Graphics,绘图引擎,所谓绘图引擎(,Rendering Engine,)在这里指的是实际的绘图机制,将输入的命令运行后的结果显示在屏幕上17,Direct Graphics,绘图引擎的架构:,坐标转换(,Transform,):参考实际、视角及投射三种矩阵及剪裁参数,做顶点坐标的转换,最好得出实际屏幕绘制位置色彩计算:依照目前空间中的发射光源、材质属性、环境光与雾的设定,计算各顶点最后的颜色平面绘制:贴图、基台操作、混色,加上前面两项计算的结果,实际绘制图形到屏幕上在,Direct Graphics,架构下,不需要了解其内部运算,更不需要知道计算的方法18,DirectSound,DirectSound是DirectXAudio的一个较底层的部件,提供了丰富的接口函数,实现.wav格式的波形声音数据的播放控制与WindowsAPI的声音播放函数不同,DirectSound可实现多个声音的混合播放。
DirectSound可充分使用声卡的内存资源,同时也提供了3D声效算法,模拟出真实的3D立体声DirectSound,是一个声音合成引擎,用系统内存容纳不同的音频流开发者可将数据通过多个音频流直接写入任何,directx,兼容声卡里它支持多种采样频率,且能随意增加以软件为基础的声音特效19,Direct Audio,是,DirectX,的声音组件,但是它仅仅支持数字声音,而不支持,MIDI,,不需要第三方声音系统授权就能完成您的声音处理Directsound3D,可以定位,3D,声音,并模拟,3D,声音效果现在大多数声卡都支持硬件加速,3D,效果,包括多普列变换,折射,反射但是,使用软件仿真,则不需要使用该组件DirectMusic,支持,MIDI,技术,用来创建乐器的数字表示20,DirectInput,是一个输入设备的应用程序接口(,API,),其中就包括鼠标、键盘、游戏杆及其他游戏控制器,如力回馈(输入,/,输出)设备通过操作映射(,Action Mapping,)程序可以获取输入数据,而不需要了解什么样的设备在运行,产生这些数据除了支持,Microsoft Win32 API,不支持的设备服务外,,DirectInput,还能以直接访问硬件驱动的方式提供比,Microsoft Windows,消息更快的访问方式。
DirectInput,在使用键盘进行字符录入,或使用鼠标进行导航方面并不具有优势DirectInput,21,DirectInput最主要的对象 IDirectInput8,,,用来初始化输入系统和创建输入设备对象,IDirectInputDevice8,:,用来表示输入设备的COM对象,,,每种输入设备都与之对应的COM设备对象,IDirectInputEffect,:,用来实现反馈效果的COM对象,IDirectInput8创建各种IDirectInputDevice8,,,然后由IDirectInputDevice8来创建IDirectInputEffect对象,IDirectInput8组件对象包含一组函数用来初始化数据系统,,,获得输入设备接口,,,用的最多的是以下两个函数,:,IDirectInput8:EnumDevices()和 IDirectInput8:CreateDevice(),22,DirectShow,是在,ActiveMovie,和,Video for Windows,基础上推出的基于,COM,的流媒体处理开发包,是,windows,平台上的流媒体框架简化了媒体回放、格式转换和采集工作,为多媒体流的捕捉和回放提供有力支持。
它广泛地支持各种媒体格式,包括,Asf,、,Mpeg,、,Avi,、,Dv,、,Mp3,、,Wave,等等,使得多媒体数据的回放变得轻而易举整合了其它的,DirectX,技术,能自动地侦测并使用可利用的音视频硬件加速,也能支持没有硬件加速的系统直接支持,DVD,的播放,视频的非线性编辑,以及与数字摄像机的数据交换典型应用:,DVD,播放器、视频编辑应用、,AVI,到,ASF,转换器、,MP3,播放器和数字视频采集应用DirectShow,23,DirectPlay,为开发者提供了开发诸如多人游戏或聊天程序的工具,它是,Microsoft DirectX,的组件之一DirectPlay,完成了与用户连接相关的所有复杂工作,使那些后台网络地址转化,(NAT),设备保持一致,并管理会话它允许你创建、查找、连接多人游戏连接以后,,DirectPlay,可以让你向其他玩家发送已验证或未验证的信息这是作为一个网络应用程序最其本的框架,并且还提供了在游戏中传输语音的功能DirectPlay,24,COM,DirectX,提供的所有设备的硬件级控制,都是通过,COM(Component Object Model,组件对象(模型)以及微软公司和硬件供货商所编写的驱动程序集和相应的库文件来实现的,COM,实际上是一套,C+,类实现了许多接口,主要有三个:,IGRAPHICS,、,ISOUND,、,IINPUT,。