(这条文章已经被阅读了 114 次) 时间:2001-02-08 21:18:33 来源:鲁晓明 (木木) 原创-IT
DirectX(8.0)完全接触
作者:鲁晓明
二、关注——DirectX 8.0的功能特性
DirectX 8.0是Windows操作系统下的最新的多媒体系统链接库。透过DirectX 8.0,其它软件能够尽情发挥系统的效能,并且带给我们最棒的多媒体体验和震撼效果。早在DirectX
8.0正式发布以前,就有很多关于它的传闻了。有人甚至预言说DirectX 8.0极有可能再次改写游戏业界的许多标准。随着时间的推移,并且经过多个测试版的考验之后,Microsoft微软公司终于正式推出了这款具有多项令人兴奋功能特征的最新的DirectX
8.0(2000年11月9日发布)。新的DirectX 8.0可以获得更好的图像显示质量,以及更棒的音频效果,使多人游戏具备可伸缩性。它强化了针对DirectDraw和Direct3D的接口,简化了应用扩展,提升性能;改善了图形创作工具,更易于做出最佳的3-D角色和环境;点光源式光影和像素式光影使图象更逼真;强化了Direct
Sound和Direct Music,简化了其应用扩展;DLS2音频合成功能提高了乐器音频的真实感;Direct Input的设备影射功能令对设备的支持更简单;Direct
Play使多人游戏的性能和可扩展性得到了提高;Direct Play提供了IP声音通讯;Direct Show的应用编程接口提供了音频/视频的实时合成和即时编辑,支持Windows媒体音频和视频(WMA和WMV)的读写;Microsoft
TV技术可以支持数字电视节目。
大家都知道,图形图像是DirectX中最为重要的一个部分。这一部分的工作是由两个函数集来完成的—-DirectDraw主管2D图形,Direct3D则用来生成3D场景。在最新的DirectX
8.0版本中微软把这两个函数集合成为一个实体。并且在实际的应用中,DirectX 8.0可以提供最新的3D技术、更快的画面更新率、并且支持市面上大多数的联机游戏。它也能够在同时执行和显示充满多媒体元素的软件时提供极生动的音效,这些元素包括:全彩画面、影像、3D动画、以及环绕音效。关于这种改变,微软自己的说法是为了尽可能的让全屏的3D游戏有更好的表现。当然这并不是说窗口模式下的3D游戏不在考虑,而是微软认为在这方面它们已经做的足够好,用不着花更多的力气来改进了。对于3D
API的改进,我们认为是微软感受到巨大压力之后的举动。的确,虽然依靠其开放的开发环境以及不断的升级换代才在3D
API的大战中勉强没有被抛在后面,但总是给人低人一头的感觉。不断的有使用Quake系列引擎的游戏不支持D3D的消息传出,这的确是对微软的巨大打击。偏偏这又是未来游戏发展的方向所在,所以此次微软对DirectX
8.0下一番大力气是可以理解的。
在新的DirectX 8.0身上应该注意一个非常重要的概念,这就是“可编程光影”概念的引进。它有两种方式:点光源式光影和像素式光影。点光源式光影可以用在非常复杂环境下的贴图、程序实现的几何变换(就是我们在电影中常看到的那种网眼一样的3D模型的骨架)和矩阵式调色版皮肤贴图(这可以创造出更加逼真的角色造型)中。像素式的可编程光影则可以实现很多有趣的效果,比如说非常真实的带光线反射的凸凹贴图等等。虽然可编程光影不是什么新的概念,但是是微软第一个提出来要把这一步放在硬件中实现。这是微软帮助显卡的硬件厂商定出的一个新标准,同时也使得程序员可以在不需要知道太多硬件细节的情况下进行光影特效的编写,和T&L有着异曲同工的效果。理论上可以实现由程序实时计算的贴图,而不是像现有游戏那样先把贴图效果计算好,以BMP的方式放在内存或显存中。
DirectX 8.0被划分为覆盖不同技术的API(Application Programming
Interface 应用编程接口),这些技术对游戏和视听多媒体相当重要。与以前版本不同的又一个地方是,新的DirectX
8.0中有专门的API实现反锯齿的功能。它通过支持现有的API来实现,比如3dfx的T-buffer系统,会由软件来控制这些效果的开和关。同样的,还有其他一些多采样的API,能实现像运动模糊和软件光反射一类的效果。此外还有按份量贴图的支持,这可以非常真实的再现光亮随着距离而衰减的情况,以及更真实的雾化效果。
DirectX 8.0的诸多强大功能和特性可以带来游戏与视听多媒体方面更为强大的功能,它可以让游戏在3D真彩模式下运行的更为流畅,在电脑上看VCD或者是欣赏音乐的时候能够看见更为绚丽的画面,也能够体验到环绕音乐的魅力。而且它依然保证了很好的向下兼容性,也就是说以前版本的DirectX已有的特性在新的版本中都可以找到。在DirectX
8.0中,主要包含五大方面内容:DirectX 8.0 Graphics、DirectX Audio、DirectX 8.0 DirectPlay、DirectX
8.0 DirectInput以及DirectX 8.0 DirectShow。现在就让我们来好好看看:
1、DirectX 8.0 Graphics
图形是DirectX中最重要的一个方面,我们在DirectX 8.0中看到了一个令人非常兴奋的新增功能:将DirectDraw和Direct3D完整的结合在一起。一直以来DirectX中的图形都被分为两个部分:用于2D图形处理的DirectDraw
和用于3D图形处理的Direct3D。这两个部分一直以来都在发挥着十分积极的作用。以前DirectDraw曾是Directx中非常重要的部分。它担任着图形处理的关键。以往在实地址的dos下设计游戏时,为了游戏速度的考虑,都让程序直接操作硬件。而在windows98及更高平台的保护模式下,所有图形的访问动作都必须GDI这个图形处理中心来处理,不能直接对硬件下命令。可是GDI对连续的画面处理效果并不是很好,游戏一旦通过GDI来处理的话,效果有时甚至不堪设想。DirectDraw就是来解决这个问题的。在它的帮助下,windows程序也能直接进行硬件操作,更进一步还能加速显卡的速度,使游戏更为流畅。另外DirectDraw还支持Mmx、3dNow、AGP等技术,还能处理多屏幕显示,让窗口环境的游戏更加多姿多采。以前版本的Directx中还有另一个也十分重要的部分就是Direct3D了。Direct3D是一个低级的3D应用程序接口,但是其它的硬件开发人员可以在这个基础上很方便的编写出具有高性能的显卡驱动程序。对现在的游戏来说,Direct3D的地位实在是太重要了!由于3d游戏的兴起,各大厂商纷纷推出3d加速卡为了避免重蹈声卡的覆辙,微软从Directx3.0后加入了Direct3D这个API,让3d游戏有了一个共同的开发标准。这样当游戏再执行时若需要绘图时就会通过D3D向显卡驱动程序提出要求从而完成绘图。(上面的这副图片就是DirectX
8.0中新Direct3D的结构示意图。)
在DirectX 8.0推出以前DirectDraw和Direct3D都是相互独立分开的两部分,这种情况有一个不足之处就是增加了内存的数据交换时间。在微软DirectX
8.0中,这种情况得到完全的改变,微软将DirectDraw 和Direct3D合并为一个单一的整体。它的改变大大减少了内存数据交换的时间,提升了游戏和程序的性能,并且对全屏3D游戏提供了更好的支持。
硬件功能方面新的DirectX 8.0支持许多新增的3D特性,包括shader光影等。我们做了一个简单的测试,在Quake3测试中,DirectX
8.0比起DirctX 7.0在优化游戏运行方面效果比较明显,提升了系统中3D图形的性能。此次测试的硬件配置为:
CPU – Celeron 466MHz
主板- MSI BxMaster
内存- 128mb Apacer PC100
显卡- ASUS v7700 GF2 32mb DDR
[3DMark 得分] |
[Q3A 得分] |
在DirectX 8.0中还有一些诸如多抽样技术、微点技术等新增功能。多抽样技术能够在全屏模式下利用模糊技术和色深处理达到更好的显示效果;微点技术能够将闪电、爆炸、下雨、下雪等场景显示的栩栩如生。原来在DirectX
7.0下已经很好地解决了的窗口化3D问题,在新的DirectX 8.0中窗口内的3D仍然得到了保持。此外“可编程光影”概念的引进在DirectX
8.0上是一个非常重要的变化。“可编程光影”的两种方式——点光源式光影和像素式光影——虽然并不是什么新的概念,但是却是微软首次提出把它放在硬件中实现。微软帮助显卡厂商定出了这么一个新的标准,使得程序员可以在不需要知道太多硬件细节的情况下进行光影特效的编写,和T&L有着异曲同工的效果。它可以实现由程序实时计算贴图,而不是像现有游戏那样先把贴图效果计算好,以BMP的方式放在内存或显存中。点光源式光影可以用在非常复杂环境下的贴图、程序实现的几何变换和矩阵式调色版皮肤贴图中。像素式的可编程光影则可以实现很多有趣的效果。(下图为DirectX
8.0的图形传递途径。)
DirectX 8.0中还有一些不能不提的其他新增图形特性。像容量纹理、多样本渲染、多重数据流、粒子系统、镶嵌装置模型等很多以前DirectX中很少见的特性这次在DirectX
8.0中都出现了。DirectX 8.0凭借这些功能,已经可以和OpenGL并驾齐驱并成为电脑游戏设计的两大API之一。
1. 容量纹理
新版本的DirectX 8.0可以对游戏的图形纹理进行2维以上的地址定位。以前的Directx
7.0版本中已经引入类似的概念,只不过当时它是用来单一地渲染游戏中的立方体。而现在的DirectX 8.0可以对容量纹理中的三角形进行三维地址定位了,之后这些被定位的三角形可以继续用于游戏的纹理之中。这样经过三维处理的纹理可以被用来反映游戏中纹理的不同“容量”效果,例如三维空间的雾化和光照。
2. 多样本渲染
多样本渲染可以说是3dfx的T-buffer技术在DirectX 8.0中的体现,这种新特性可以让游戏设计人员通过DirectX
8.0实现T-buffer的全部效果,也就是说在所有非3dfx的显示卡上都可以实现全屏幕T-buffer效果,只是实现的方式不同罢了,但是在
T-buffer效果的流畅程度还是由显示芯片本身的硬件象素填充率来决定的,软件层面上是无法改变象素填充率的。多样本渲染通过对一副图象进行多帧渲染,在显示图象的最后关头,多样本渲染把这几幅帧画面合组合成最终画面并显示在屏幕上,下图就很好的解释了多样本渲染的整个过程。
3. 多重数据流
新版本的DirectX 8.0开始支持多重数据流了。例如,一个数据流包含了模型的顶点三维信息,一个数据流包含了模型的顶点颜色信息,而另一个数据流则包含了模型的顶点纹理信息。DirectX
8.0的多重数据流处理能力加速了游戏中动态模型的实时渲染工作。例如,如果游戏物体根据一定的算法在每一帧中不断变换自己的纹理位置,那么游戏设计者只要单独设定一个专门的数据流,来指定物体每帧中的纹理位置供DirectX
8.0处理。
4.粒子系统
新版本的DirectX 8.0加入了对粒子系统的支持。粒子系统可以渲染输出尺寸从1个象素开始固定的粒子,或者输出尺寸不定的粒子,这些粒子的数量可以逐渐变大或者逐渐减少,视它们离开产生粒子表面的距离远近和游戏的需要。粒子系统可以用来很好地描绘游戏中的爆炸、下雨、下雪等场景。
5. 镶嵌装置模型
对镶嵌装置模型的支持现在已经逐渐成为Directx发展的另一个方向了。它类似于Quake3 Arena在游戏中对弯曲表面的支持。镶嵌装置模型的实现方式可以是贝赛尔曲线、B样条函数、三角形测量或者是顶点插补。下图就阐明了标准物体前行时(即镶嵌装置模型后退时)纹理的局部改变,这样的改变不需要新的纹理加入。
2、DirectX Audio
DirectX Audio的功能并不只是用于播放音乐,它能够充分调用硬件的加速功能、系统可下载功能以及3D特效环境来更好的营造出一个立体氛围的音乐环境:脚步声从后面慢慢逼近,蜻蜓的嗡嗡声在您头边环绕,一辆火车从左边飞驰而来……DirectX
Audio能够让您感受到空间的声音效果,它能够制造出声音从您身边发出的幻觉效果。声音也可以和动作相匹配,这样您就可以知道身后是不是正有人在爬行——或者追踪的车辆是否已放弃了行动。DirectX
Audio也支持多种音乐,它能够制造出一个现实的听觉环境,当您翻越高山或是穿过恐怖的墓地时会有一种身临其境的感觉。
像我们平常播放MIDI、WAV或者是用麦克风来进行录音都是建立在DirectX Audio基础之上的。在DirectX 8.0中也对DirectX
Audio也进行了一些功能方面的增强,其中可以实现合声、扭曲、均衡等一些声音方面的特效;使用16声道以上来播放MIDI文件,并增加了对于MIDI文件播放的控制;可以让音乐设计者便捷的控制和修改所制作的音乐片段。(右图为DirectX
8.0 Audio的结构图)
和图形一样,微软在声音处理上也想采用合并的策略。由于主要的两个声音API(DirectSound和DirectMusic)在某些方面可以互补,合并很有意义。(例如,你可以对DLS2
MIDI样本进行3D音频处理。)这意味着 DirectMusic可以被当作一种高级音频API用于多种音频流。只不过在DirectX
8.0中,DirectSound和DirectMusic这两个名字仍然会继续使用,尽管实际上DirectSound和DirectMusic之间的区别已经很小了。
在声音效果方面,一个新特性是通过DLS2可下载样本的音响效果。这使得游戏开发人员能够利用所有的硬件加速MIDI表现来加强声音效果。另外一个有趣的新特性是数字音轨(WAV文件)和MIDI样本的混合能力,它能够使数字音轨和MIDI同步合成,可以预见这将有可能提供引人入胜的效果。它还将能够执行音频原稿,这将使游戏开发组中的声音设计人员能够对声音的处理或声音将如何对交互式输入作出反应进行大量控制,而不再需要通过编程来实现声音设计者的意图。
创新公司的部分EAX混响技术也整合进了DirectX音频体系中。很早微软就已经得到了Creative公司的授权许可使用该公司EAX(环境声音延伸扩充)声音技术中的一些声音特效。这些效果包括边缘处理、和声、环境回响等经由DirectSound和DirectMusic被增加到了DirectX
8.0中。环境混响声音特效的使用将使游戏开发人员能够开发出更为逼真的3D音场。从技术上来说,EAX只是对微软DirectSound3D
API的增强。它可以根据产生声音的游戏环境的变化而产生不同的三维回响效果,例如,在野外或空仓库或金属管道内的枪声听起来将有所不同。由于增加了Creative公司杰出的EAX声音技术,DirectX将可以提供开发者更好的控制游戏中的环境声音参数从而增强游戏的娱乐感受。而对Creative公司来说,EAX技术和DirectX的结合将能巩固EAX作为目前流行的PC声音标准的地位并使之继续前进。
3、DirectPlay
DirectPlay是为了满足近来流行的网络游戏而开发的API,它是一个用于连接传输协议和网络设备之间的接口程序。DirectPlay支持多通信协议,可以运行在采用TCP/IP或者是IPX协议的网络上,甚至也可以使用Modem进行连接,而且DirectPlay还为将来的协议预留了很好的扩展空间。在DirectX
8.0中对DirectPlay重新进行了编写,其中增加了点对点传输、服务器端到客户端等模式的支持,还有语音传输的功能。让玩家可以用各种连网方式来进行对战,此外也提供网络对话及保密措施。可以说DirectX发展到今天已经不再局限简单的影像优化功能,更是往网络方向进军,从中也可以看出微软的“野心”吧。(右图为DirectX
8.0 DirectPlay的结构图)
下面是关于DirectX 8.0 DirectPlay 的一些特性:
·接口完全重新编写
·新增了对声音的传输
·地址的信息由GUID变为URL形式
·加上了更好的内存管理单元
·很好的支持防火墙并增加了对网址的编译
·升级更容易
(上图是在使用DirectPlay Voice时一些组成结构)
4、DirectInput
DirectInput的功能可以支持很多种类的输入设备,用来处理游戏的一些外围装置。一般常见的键盘、鼠标就不用多说了,其他的如游戏摇杆、game
pad、方向盘、vr手套、力回馈的游戏手柄等各种设备都能够得到DirectInput的支持。DirectInput新增一个自动映射功能,这个新功能允许在输入设备按下按键之后来实现相应的动作,而且能够将手柄上原有的一些特殊按键与操纵杆作用激发出来。这样游戏程序不仅可以根据键盘、鼠标的运动而做出变化,而且可以根据独立于输入设备之外的动作做出相应的变化。DirectX
8.0中的DirectInput预先设置了一套标准的游戏动作,涵盖了不同类型的游戏:第一视角设计、实时战略、赛车、角色扮演等等。这样DirectInput就不仅仅把角色的动作限制在游戏代码规定的范围之内,同时游戏设计者就可以专注于在游戏代码中加入DirectInput预设中没有的特殊动作,使得游戏更加引人入胜。因此,如果你有一只游戏手柄但是又苦于没有相应的驱动程序,那不妨试试DirectX
8.0,因为Direct Input可以使这类设备与游戏配合良好,不需要做特别配置。
DirectX 8.0进一布加强了对力量反馈的功能支持,这一特性可以让游戏通过游戏控制器和附件来发送震动波。当您在游戏中遭受虚拟破坏时飞行操纵杆会发出卡塔卡塔声,并产生后坐力,而当您刹车时,方向盘和踏板也会产生震动。反馈也可以很敏锐。您的方向盘可以产生轻微震动以模拟在鹅卵石街道或沙地上驾车的效果。某些特定的飞行操纵杆可以补偿推力和引力效果,使效果更加逼真,而且增加了游戏的难度。当您用这种控制器玩过一个游戏后,您就会对他爱不释手了。
DirectX 8.0 DirectInput的新增特性:
·自动映射功能
·更好的支持国际上流行的各种应用软件
·支持各种最新的接口
·可以方便实现对操纵杆功能的改变
5、DirectShow
DirectShow实际上是脱离DirectX而单独存在的,以前被微软自己称作“DirectX Media”,它和DirectX并列被微软推荐为多媒体和游戏设计介面。而在DirectX
8.0中,DirectX Media 被糅合进去,主管视频、音频流的捕捉和回放,同时也提供各种过滤功能对它们进行实时处理。DirectShow使得我们可以在Windows中能够欣赏高质量的影像文件,比如AVI、MP3
WAV文件等等。随着DVD的推出,DirectX 8.0也增强了这项功能的支持,其中有AC3解码、卡拉OK功能、MPEG2解码以及广播传输技术等。在它提供的DVD浏览程序、杜比音频解码、版权保护和UDF文件支持等功能下,使用DirectX
8.0可以使DVD的回放效果完全达到硬件的播放效果,并得到更为绚丽的画面效果。
除去这五大主要内容之外,在DirectX 8.0中还增加了对于AMD最新的Athlon、Duron等新款CPU的特殊指令的支持,这就使得那些使用AMD最新CPU的朋友能够获得额外的效果。