透过DirectX家史看Direct X9

 

概述:DirectX9时代来临了么?

DirectX是什么?

  今晚的月亮又圆又亮,穿过摇摆的树枝看过去格外的诱人。NVidia的NV30终于诞生了。虽然晚了点,她没有让我们失望,它堪称目前世界上最快的显示卡,各项硬件指标远远超过对手Radeon 9700Pro。DirectX9时代的王者的宝座终于又被Nvidia抢了回去。但是,你是否知道NV30并不是完全意义上的DirectX9显卡。真正的DirectX9显示卡又是谁呢?DirectX9又是什么?他真的那么重要么,真的那么权威么?

  DirectX是一种图形应用程序接口(API),简单的说它是一个辅助软件,一个提高系统性能的加速软件,微软创建开发的。他的意思不难理解,Direct是直接的意思,X是很多东西,加在一起就是一组具有共性的东西,这个共性就是直接。微软定义它为“硬件设备无关性”。
  DirectX由显示部分、声音部分、输入部分和网络部分四大部分组成。

  显示部分又分为Direct Draw(DDraw)和Direct 3D(D3D)前者主要负责2D加速。它包括很多方面:我们用播放mpg、DVD电影、玩雷电、麻将三缺一等等都是用的DDraw,你可以把它理解成所有划线的部分都是用的DDraw,由于显示卡的2D性能基本上已经达到极限,很多显卡都多的很不错,人们一直都把焦点放在了后面的D3D身上。

  后者负责3D加速,比如极品飞车3-6的车身与烟雾,CS中的场景和人物,古墓丽影中劳拉等等,但是经典游戏Quake3除外,它使用了另一种API接口――OpenGL。

  声音部分包括声效和MIDI音乐,不同的声卡表现的效果不同,目前的声卡基本上都支持DirectSound。但最好的声音效果主要有EXA和A3D,如果您的声卡支持这两种特效,您融入到真实的3D游戏世界之中。如果声卡支持更好的波表,通过DirectX的Direct Music会有不俗的表现。

  输入部分:Direct Input不仅支持更多的游戏输入设备,而且对这些设备的识别与驱动上更加细致,充分发挥设备的最佳状态和全部功能。除了键盘和鼠标之外还可以连接手柄、摇杆、模拟器等。
  网络部分:DirectPlay,它为游戏而来。通过它可以让计算机之间互联无障碍,提供多种连接方式,TPC/IP,IPX,Modem,串口等等。

DirectX 8的特技(ps和vs)

   

DirectX降生时的社会背景。

  很久很久以前,Windows95刚刚诞生,Win95神奇般的图形化界面让很多人投入了微软的怀抱。Win95诞生以前,3D加速卡市场一片混乱,有很多厂商,他们之间各有各的3D技术标准,而且互不兼容。那时候的游戏制作商也很头痛,为了顾全大局,他们要针对不同显示芯片厂商的标准,达到更好的效果,一个游戏要做出支持不同显示卡的游戏。例如:生化危机、Incoming、Fortest、恐龙猎手刚出来的时候,有很多个主程序,有ATI 的、S3的、Voodoo的等等。就在这个时候Win95出现了,并随着Win95的问世,DirectX1.0也随之降临人世。  

  DirectX为游戏而来――Direct X 1.0问世。

  微软喜欢树立标准,DirectX的建立为计算机多媒体领域做出了不可磨灭的贡献。DirectX标准建立以后,显示卡芯片厂商、声卡芯片厂商、键盘、鼠标、摇杆制造商、网卡制造商等等不得不按照这一标准进行改进。

  这样做对谁来说都是有意义的,微软开发了DirectX标准平台,并且根据硬件制造厂商和游戏厂商合作共同更新升级DirectX的标准。硬件制造商按照此标准研发制造更好的产品,游戏程序员根据这套标准开发游戏。也就是说,无论硬件是否支持某特殊效果,只要DirectX标准中有,写游戏的程序员就可以把它写到游戏中,当这个游戏在硬件上运行,如果此硬件根据DirectX标准把这个效果做到了此硬件驱动程序中,驱动程序驾驭其硬件算出此效果,用户就可以欣赏到此效果。这就是“硬件设备无关性”,是Direct真正意义所在。

  然而DirectX问世后受到了很多方面的挫折。主要敌人是OpenGL,在当时的显示卡领域有一个非常成熟的标准(接口)OpenGL,主要用于图形、影像服务器,制作电影、科教片等等,随着技术逐渐成熟,越来越普及,这是DirectX的天敌。加上DirectX标准刚刚推出,很多硬件不支持,很多主流游戏也不支持,没有游戏、没有硬件,即使再有好的标准也是没有意义的,DirectX的魅力一直没有的到表现。
   
  Direct X 2.0―― 2维游戏的崛起。

  经过各个方面的努力,DirectX升级到了2.0,这个时候标志性的产物诞生了。2.0最大的改善是在Direct Draw ,2D方面。这时候具有划时代意义的两个游戏出世了――红色警戒(RedAlert)和Diable(恐惧),红警的Windows版本和Diable都是在DirectX的标准上开发的。十分可惜的是,很多老显卡由于不能完全支持DirectX2.0,而不能玩Diable。除了2D以外,DirectX2.0的D3D部分的雏形基本完成,由于当时3D游戏较少,很多都是基于DOS开发的。世嘉公司的VR战士的PC版本就是基于DirectX2.0开发完成的,虽然效果粗糙了一些,Direct 3D初起效果可见一斑


  Direct X3.0――D3D站起来了。

  97年微软发布了DirectX 3.0,这个版本真真正正让DirectX站了起来,让D3D有了与OpenGL格斗的勇气。正是因为这个版本,很多人都知道了有DirectX这么个东东,原来Windows95下也能出来3D效果。到了这个时候,真正意义上的第一代3D显示卡纷纷现身。例如:3DFX的Voodoo,Nvidia的Riva128,Intel的I740。这个时候3D游戏越来越多。3D应用程序接口形成了3分天下。分别是专业的OpenGL接口,微软的D3D接口和3DFX的Glide接口。3DFX的Glide是当时最猛的,游戏程序员使用它可以轻松容易的编出复杂、生动的3D效果,3DFX 的VOODOO在全球火爆销售,后来3DFX公司被Nvidia公司收购。

  DirectX 5.0 ――让D3D更加强大了。

  可能是美国也忌讳“4”字,DirectX3.0发布后没多久便支持跳过4.0发布了DirectX5.0。5.0与3.0时间间隔不长,但他的意义可不简单。DirectX5的D3D效果可以与当时的OpenGL平分秋色。引入了雾化的支持,让3D游戏更有空间真是感。除此以外在游戏系统的兼容性方面作了很大改善。

  DirectX 6――彻底击溃3DFX的Glide。

  在DirectX5.0发布不久第二代3D显示卡问世了,这一代3D显示卡借助DirectX6.0的技术争得不可开交。这一代的显示卡主要有:Nvidia的Riva TNT,并连的VooDoo2,VooDoo3。到了这个时代,市场格局已经很清晰,是NVidia与3DFX的斗争。DirectX 6的3D效果更多了,而且借助硬件的强大性能,可以渲染出高分辨率下的32位色的3D效果,这一点采用PCI总线技术的VOODOO系列败下阵来,它只能支持800x600下的16位色渲染,尽管他的800x600x16的效果比1024x768x32的效果还要好,但没有被公认。Nvidia在这方面作的很不错,从一开始就使用先进的AGP总线结构,高指标,严要求,每次发布新品都给用户更高性能的享受,每次成功都为他奠定显卡老大的基础。

  DirectX 7――T&L引擎引发的第二次战争。

  DirectX7 又一次把显卡市场进行重新整合,DirectX7最大的特色就是支持T&L,中文名称是“坐标转换和光源”。此功能为显示卡GPU与CPU之争起这关键作用。3D游戏中的任何一个物体都有一个坐标,当此物体运动时,它的坐标发生变化,这指的就是坐标转换;3D游戏中除了场景+物体还需要灯光,没有灯光就没有3D物体的表现,无论是实时3D游戏还是3D影像渲染,加上灯光的3D渲染是最消耗资源的。在T&L问世之前,位置转换和灯光都需要CPU来计算,CPU速度越快,游戏表现越流畅。使用了T&L功能后,这两种效果的计算用显示卡的GPU(可以理解为显示卡的CPU)来计算,这样就可以把CPU从繁忙的劳动中解脱出来,让CPU做他该作的事情,比如逻辑运算、数据计算等等。换句话说,拥有T&L显示卡,使用DirectX7,即使没有高速的CPU,同样能能流畅的跑3D游戏。T&L成为当时人们关注的焦点。第一个支持T&L功能的显示卡是Nvidia的Geforce 256。

   过渡:你争我夺。

  随后的Geforce 2基本上可以说是Geforce 256的一个提速版本,除了速度快了很多以外,没有很大的效果改善。这个时候ATI的Radeon发布了,一度成为支持T&L功能的效果最好的显示卡。当然这两个显示卡都属于DirectX7显示卡。
  Nvidia刚刚通过收购的方式结束了与3DFX接近3年的战争,但竞争无处不在,这不ATI又和Nvidia干上了,一直打到现在未分胜负。  

- DirectX 8 -
- DirectX 7 -


  DirectX8.0   ps和vs让我们无奈的等待

  去年年初DirectX8发布了,一场无奈的战争开始了。DirectX8可真是个好东西,它发布没多久,全球知名的显卡测试软件制造商在2001年4月份发布了3Dmark2001,支持DirectX8的全部特效。令人无奈的是当时绝大部分显卡都不能完成此软件的全部测试,其中的4个场景跑不出来。原因是,DirectX8集成了两大特技――VS (Vertex Shader)和PS(Pixel Shading)。通过vs和ps的渲染,可以很容易的宁造出真实的水面动态波纹光影效果。但是这两个效果过滤了一大批主流显卡,第一块支持DirectX8的显示卡是Nvidia的Geforce 3这时,真正的第4代3D加速卡时代来临了,也就是说,完全支持DirectX8.0的显示卡才能称之为第4代3D加速卡。由于DirectX8问世较早,很多显示卡制造商措手不及, ATI的8500落后了半年才发布,SiS的Xavre落后半年才发布。无奈的不仅是硬件厂商,游戏制造商也不好过,因为市场主流都是Direct7的显示卡,他们不得不迁就,否则开发出完全支持DirectX8的游戏,没有硬件来支持,那就死定了。如今的正是DirectX普及的时代。支持DirectX8的显示卡已经普及加上最新的游戏都为directX8做过优化,相信在明年年出发布DirectX9之前,DirectX8的显卡+游戏是您最好的选择。
   

- DirectX 9 -
- DirectX 8 -

  DirectX9.0 期待不负众望。

  说到这里了就不能不说DirectX9。目前它已经到了正式的测试阶段,最新测试版本为RC0,预估正是发布时间为2003年第一季度。

  到目前为止DirectX9的开发进程让我们很满意,它的保守动作是将ps和vs提高到2.0版本(据说到发布的时候会提高到3.0)。Ps的意思是像素渲染效果器,vs的意思是顶点渲染效果器。说白了ps和vs可是让游戏程序设计师们更容易更轻松的创造出更漂亮的效果。由于新一代的显卡的Pixel Shader以及Vertex Shader的执行速度进一步提高,以前许多编程方面的障碍将会消失。下面介绍一下DirectX9的几个新特性。

  首先,DirectX9.0的PS 2.0具备完全可编程的Pixel Shading架构。还有,DirectX 9.0的VS 2.0通过增加Vertex程序的灵活性,显著的提高了老版本(DirectX8)的VS性能。更重要的是:DirectX 9.0支持高精度浮点颜色。他突破了以前限制PC图形图象质量在数学上的精度障碍,它的每条渲染流水线都升级为128位浮点颜色。



  为了充分利用DirectX9的新特点,Nvidia最新推出一套用于3D编程的语言――Cg开发者工具套件。据说,通过这套语言可以直接对DirectX9编程,到时候我们会看到更加真实的场景,更加逼真的人物。

  仅凭借着以上这三大特点,不仅能让3D游戏的编程者更有效率的工作,更重要的是可以让人领略到紧逼电影渲染水准。

DirectX 9的特技(ps和vs)

       通过刚刚发布的NV30可以看出,NV30支持更多的PS和VS,以达到更好的达到支持DirectX9的目的。Nvidia的NV30和ATI的R300都是为DirectX9而来,从他们的规格上看已经达到了难以想象的地步,提高程度远远的把摩尔定律跑在后面,看来此次竞争的意义非比寻常。怪兽电力公司中毛怪那柔软的绒毛、最终幻想电影中女主人公的面部皮肤、及时细腻的动态光影,将一一出现在DirectX9时代。这一时代的组合是以DirectX9为中心,以NV30和R300为硬件代表,以DOOM3为游戏代表,让我们体验新时代的来临。


  在nVidia的官方网站上可以看到NV30支持一大批的采用DirectX9标准的新游戏,分别为:Unreal II,Command & Conque Generals,Sea Dogs II,Splinter Cell,Rallisport Challenge.另外,DirectX9为NV30和R300而来,之前的显示卡仍可以装一个来试试,毕竟是下一代的标准么,未来加速软件超前使用。

 

DirectX版本

标志性技术

标志性硬件

标志性效果

标志性游戏

1.0

――

――

――

――

2.0

D2D成熟

Trident 9680,S3

2D动态效果

红色警戒,Diable

3.0

D3D雏形

Riva128,i740

简单3D效果

摩托英豪,极品飞车3

5.0

基本3D技术

Riva TNT

雾化,阿拉法混合

古墓丽影3

6.0

成熟3D技术

TNT,TNT 2

双/三线过滤

极品飞车5,CS

7.0

T&L

Geforce 256,Radeon

凹凸映射

摩托英豪3,Diable 2

8.0

Ps,vs

Geforse 3,Radeon8500

水波纹

3Dmark2001,魔兽争霸3

8.1

Ps,vs的升级

Geforce 4,Radeon9700

大纹理水波纹

极品飞车6

9.0

高版本的ps,vs

NV30,R300

皮毛效果

DOOM3


  小技巧:查看当前系统的DirectX的版本号:依次点击:开始-运行-键入“dxdiag”便可调出DirectX的诊断程序把DirectX看个明白。

微软 DirectX—昨天,今天,明天

 

现在游戏的种类与数量几乎呈爆炸式增长,游戏的制作水平也不断提高,那么玩家在欣赏游戏中那绚丽的效果时,有没有想过是什么造就了这一切兀空饩褪荄irectX!DirectX这个词对玩家来说似乎并不陌生,现在的很多游戏说明里都有“该游戏需要DirectX….以上版本支持”此类的话,甚至3DS Max启动时的加速模式选项中也有DirectX身影。那么DirectX究竟是什么呢?现在就让我们揭开它面上这层神秘的面纱,一探究竟吧。

一、初识DirectX
DirectX是Microsoft开发的基于Windows平台的一组API,它是为高速的实时动画渲染、交互式音乐和环境音效等高要求应用开发服务的。从Windows 95开始,人们就开始接触DirectX2.0,WindowsNT4.0里面则是DirectX3.0a,但是没有DirectX4的版本。到了Windows98,它就是Windows家族操作系统中不可缺少的核心成员之一。Windows 98中集成了DirectX5,Windows2000中集成了DirectX 6,Windows Me中集成了DirectX 7,而Windows XP天生就带了DirectX 8.1。
微软开发了DirectX标准平台,并且根据硬件制造厂商和游戏厂商合作共同更新升级DirectX的标准。硬件制造商按照此标准研发制造更好的产品,游戏开发者根据这套标准开发游戏。也就是说,无论硬件是否支持某种特效,只要DirectX标准中有,游戏开发者就可以把它写到游戏中,当这个游戏在硬件上运行,如果此硬件根据DirectX标准把这个效果做到了此硬件驱动程序中,驱动程序驾驭其硬件算出结果,用户就可以欣赏到此效果。这就是“硬件设备无关性”,是DirectX真正意义所在。
    通常,Windows对硬件访问的管制非常严格,用通常的办法不易访问,但DirectX通过“硬件抽象层(HAL)”给予了开发人员直接访问硬件的能力,HAL不仅解决了硬件及兼容性问题,而且开发人员可以利用它直接访问计算机的某些硬件设备,例如显示设备的直接显存控制和渲染,键盘、鼠标和游戏杆的控制的直接访问控制,音频设备的直接音频混合与输出能力等等,因此开发人员可以充分利用硬件加速将程序的性能优化到一个新的高度,如果目标机器不支持相应的硬件加速,DirectX还可以仿真加速器以提供强大的多媒体环境。DirectX家族包含的成员有Direct3D、DirectDraw、DirectInput、DirectMusic、DirectPlay、DirectSound和DirectShow。

二、DirectX全家福

    通过上面的介绍,相信读者对DirectX已经有一个大概的了解。下面就让我们逐一认识它们吧。
1、Direct3D、DirectDraw和DirectGraphics
    DirectDraw是DirectX家族中的元老,它为高速的2D渲染提供了良好的支持,由于其具备直接显存访问和位快传送的能力,使得2D图形的绘制速度相对GDI有了一个质的飞跃,其渲染速度甚至有上百倍的差距。在现在回忆当初玩“红色警戒”和“Diablo”的时候,大家可不要忘了DirectDraw的功劳。

    DirectDraw在DirectX3.0时就已经接近极致,但是随着PC图形技术的飞速发展,人们逐渐不再满足于2D的图形效果,而通过2D技术实现伪3D模拟又非常损失效率,这种需求直接导致了Direct3D的诞生,早期的Direct3D技术不甚完善,相对于2D技术还有一定的差距,直到图形加速卡支持硬件3D特效后,Direct3D才逐渐步入正轨,慢慢显示出它的性能优势来。下面让我们来回顾一下历史,看看

Direct3D的“成长过程”:
DirectX6中的Direct3D添加了如下新特性:
•几何形体的灵活顶点格式定义
•几何形体的顶点缓冲存储
•支持多纹理渲染
•自动纹理管理
•可选深度缓冲(使用Z Buffer或W Buffer)
•通过凹凸环境贴图(BUMPENVMAP)为反光面和水波特效提供逐像素的渲染和贴图能力
DirectX7中的Direct3D添加了以下新特性:
•硬件坐标转换和灯光(T&L)支持
•立方体表面的环境贴图
•几何渲染
•改进的纹理渲染
•自动纹理坐标生成、纹理转换、投影纹理和任意面裁剪
•D3DX实用库
•支持Intel MMX架构、Intel单指令多数据流(SIMD)、SSE®和 AMD® 3DNow®架构。

    DirectX的版本到了8.0的时候,虽然它依然保持着向前的兼容性,但是它的结构发生了巨大的变化,3D图形处理技术逐渐统一在Vertex Shader和Pixel Shader。Vertex Shader被用来描述和修饰3D物体的几何形状,同时也用来控制光亮和阴影;Pixel Shader则用来操纵物体表面的色彩和外观。Direct3D和DirectDraw合二为一,DirectX家族诞生了一个新的成员-----DirectGraphics。同时也增添了很多令人激动的特性:

•完全集成DirectDraw与Direct3D
简化程序初始化过程并提高数据分配和管理的性能,这将减少内存消耗。同时,集成后的图形应用编程接口(API)允许并行的顶点输入流以达到更加灵活的渲染。
•可编程顶点处理语言
允许你编写定制的着色器,如变形和渐变动画,矩阵调色板蒙皮,用户定义的光照模型,一般环境映射,可编程几何体或者任何其他开发者定义的算法。
•可编程像素处理语言
允许你编写定制的硬件着色器,例如通用纹理组合公式,逐像素光照(凹凸贴图),适用于实现照片(真实)级镜面效果的逐像素环境贴图或者任何其他开发者定义的算法。
•支持多重采样渲染
允许全场景反走样和多重采样效果,例如运动模糊及景深(镜头的聚焦效果)。
•点精灵
允许高性能的粒子系统渲染,例如火花、爆炸、雨、雪等等。
•3-D空间纹理
允许范围衰减,实现逐像素级光照及空间大气效果,甚至是更复杂的几何图形应用。
•支持高维图元
对来自主要的3-D创作工具的3-D内容,增强其外观并简化内容映射。
•高级技术
包含了用于输出Direct3D蒙皮网格的三维内容创建工具插件,使用了Direct3D多种不同技术,多分辨率层次细节(LOD)几何,还有高维表面数据。
•索引顶点混合
扩展了几何混合的支持,允许通过指定使用一个矩阵索引把矩阵应用于顶点混合处理。
•扩充了Direct3DX实用库
包含了大量的新函数。Direct3DX实用库是一个位于Direct3D之上的辅助层,用于简化3-D图形开发者的常规工作。它包括了一个蒙皮库,支持对网格的操作,还有组装顶点与像素着色器的功能。
DirectX每一次升级都会有重大的内核结构改变,它会给我们带来巨大的视觉冲击。DirectX7核心的T&L引擎到DirectX9干脆被抛弃了。因此对于图形芯片开发商、游戏开发商以及广大用户而言,DirectX 9的确是一项“绝无仅有的优越图形技术”。DirectX 9“具有多项令人兴奋的全新功能特征”:


    

Direct3D图形渲染管道

•Vertex Shader 2.0和Pixel Shader 2.0

    在DirectX9中,Vertex Shader和Pixel Shader的版本升级到了2.0,它们都支持64或甚至128位浮点色彩精度。浮点色彩在动态和精度上的增加给图像质量带来质的飞跃,这样在DirectX9中你可以轻易实现电影级别般逼真的效果!
DirectX8和DirectX9的对比参数:

  
    Vertex Shader 2.0引入了流程控制,增加了条件跳转、循环和子程序。Vertex程序现在最多可以由1024条指令组成(之前只能用128条指令),增加的指令带来更加复杂和强大的表现,新的操作如正弦、余弦及其他强大的函数运算大大简化了代码的编写,并且能够表现更加复杂的效果。


    
        Vertex Shader 1.0                           VertexShader 2.0
强大的可编程Pixel Shader是实现具有电影质量级别效果的真正精华所在。Pixel Shader 2.0可以支持高级程序语言和汇编语言,开发人员还可以将其汇编代码嵌入较高级的程序语言中。前一版的Pixel Shader语言被限制为只能使用最多6个材质和28条指令,而2.0版则将这一上限提升至最大16材质和160条指令,也新增了很多强化的运算和操作。


Pixel Shader 1.4

      
Pixel Shader 2.0

此外各种Shader工具的大力协助,如nVidia的Cg语言和ATI的RenderMonkey,使得实时图形渲染的质量飞速提高,nVidia和ATI官方的Demo就足以说明这一点。DirectX9中也改进了部分接口定义,Vertex Shader和Pixel Shader分别单独提供了一个接口,而且提供了常见图形的绘制接口,如线段的绘制等,这进一步减轻了开发人员的负担。

•浮点型色彩和32位帧缓冲格式

    目前大多数色彩表示法(如RGB)用8位整数表示红、绿、蓝色,也许对于显示来说这已经足够了,但在运算中似乎还远不够。由于整数没有小数部分,因此当它们经过Pixel Shader极其复杂的数学运算后,就会产生较大的误差,这可能导致色彩明显失真。而DirectX9支持数种浮点色彩格式,使得其精度有了很大提高。同时DirectX9支持精确到每像素32位的帧缓冲格式,能够表现出4倍于目前亮度等级的数量,这使得图像看上去更加清晰和自然。

    除此以外,DirectX9还提供位移贴图(displacement maps)以及改进的设备模拟等特性的支持,并且毫无意外地,DirectX9 SDK中也进一步扩展了Direct3DX实用库,提高了开发效率。


2、DirectSound、DirectMusic和DirectX Audio

    在DirectX中DirectSound和DirectMusic可以统称DirectX Audio。一个好的游戏是不能没有声音的,DirectX Audio负责了游戏中的音效控制。不仅仅是游戏,很多需要高质量音效的地方都有它们的影子,我们经常在一些播放软件的设置面板中看见是否使用DirectSound支持的选项。

    DirectX Audio做的不仅仅只是简单地对声音的回放。它提供了一个完整的系统,能够利用硬件加速的功能动态地操纵控制音轨和声道(soundtrack)。

    如果你想在你的程序中使用DirectMusic和DirectSound,你就能够获得以下功能:
•读入且播放例如MIDI, WAVE, 以及DirectMusic Producer run time等格式的声音文件。
•同时对多个声音资源进行混音播放。
•对播放的声轨进行高精度时间控制。
•可以动态地变更播放节拍与节奏,甚至实时地动态控制一些MIDI事件。
•使用DLS合成器(DirectX Audio自带的波表合成器),你的程序就可以确保在不同的计算机上听到相同的MIDI声音。你的程序能够播放不受类别限制,各试各样乐器的声音,使用DirectX Audio,你甚至还能够创造出独一无二的乐器声音类别并将它发布。
•把声音做3D定位,创造出3D的环境声响。
•可以非常容易地实现例如变调、回响,以及别的声音特效。
•能使用数量超过16个的MIDI音轨。DirectX Audio突破了从前只能使用16个MIDI音轨的限制,它把同时回放大数量的音轨变成为了可能,而这个数量仅仅只是受到了你的声音硬件合成器能力的限制。
•播放位于不同的Audiopaths上的声音段(segments),效果就可以各自实现在每一段声音里。
•实现在不同的端口(port)之间捕捉MIDI数据及流("thru")。
•从话筒或者别的输入设备中捕捉声音数据。

    如果使用DirectMusic Producer或类似程序中的源文件,你还能够做到
•在声音的回放期间能够做更多的控制,例如动态选择不同的音效变化器(variations)或切换不同的和旋级数。
•精确地定时重放音乐。
•利用变化器(variations)播放声音(wave)
•Audiopaths利用Map performance channels可以使相同的声音段在channel的不同部分产生完全不同的播放效果。
•动态地创造出全新的音乐片段,这不需要专门算法库,仅仅需要你的作曲能力而已。
•动态地将存在的音乐片段进行组合过渡。
•在声音回放时端,程序可以获得存在于特殊节拍点的各类声音特效的信息。

    这些功能适用于常常只使用主音频流(mainstream)的程序。如果程序只要实现一些基本简单的功能,开发者将DirectX Audio设计得非常易用,很适合初学者。DirectX Audio也是可扩展的。好的程序可以利用虚函数(virtual)继承设计出新的类,例如:

•支持新的声音格式文件。
•音轨可以包含各类数据。
•处理信息的工具 - 比方说,可以截取记录实现变换,或者将要显示的歌词置入声音片段文件。
•自定义的音序器(sequencer)。
•自定义的合成器(synthesizer)。
•效果过滤器。(Effects filters)。

    值得一提的是,在DirectX9中加入了DirectMP3和DirectCD两个功能模块,它们使得主流的音频播放也能够通过DirectX与其调用程序更好地结合在一起。

3、 DirectInput

    在DirectX这个大家族中,DirectInput掌管着“行为控制权”。与Winodows事件响应相比,DirectInput可以直接访问硬件,直接从输入缓冲区内检索数据,从而获得比响应Windows消息更快的速度。此外DirectInput也对力反馈游戏杆(Force Feedback)提供了良好支持。

4、 DirectPlay

    网络底层程序的开发向来是令开发者头痛的一件事,而DirectPlay似乎兼顾了速度与易用性两个方面,在网络游戏这样一类对速度和效率要求较高的软件来说,针对游戏优化设计的DirectPlay显然是一个比较好的选择。DirectPlay提供了一个额外的层,使你的游戏和网络底层相隔。并且,你的游戏可以非常简单地使用DirectPlay API,并使用DirectPlay管理网络通讯。DirectPlay提供的特性,使多人游戏在开发中得到了很多简化。其中包括:
• 创建和管理点对点、客户/服务会话(Session)
• 在一个会话中管理用户(User)和组(Group)
• 管理在不同网络平台上进行会话的成员之间发送的消息
• 使游戏在大厅(Lobby)中互动
• 使用户可以进行语音交互

5、 DirectShow

    作为DirectX中的又一重要成员,DirectShow提供了Windows平台下高质量的媒体捕获和回放能力,支持很多格式:ASF、MPG、AVI、MP3和WAV。DirectShow支持使用WDM设备或老式视频设备进行视频捕获。当有硬件支持的环境下,它会在使用视频或音频时自动选择是否使用硬件加速。

    DirectShow简化了媒体回放、格式转换和捕获任务。同时,当应用程序需要自定义底层流媒体解决方案时,它也提供直接流访问控制的功能。

    你可以用DirectShow编写DVD播放器、视频编缉程序、AVI到 ASF转换器、MP3播放器和数字视频捕获程序等等。

三、.NET架构的挑战-----Managed DirectX

    不知大家发现没有,安装了DirectX9 SDK后它的文档里似乎悄悄多了一个不小的板块,那就是Managed DirectX。那么这个神秘的家伙究竟是干什么的呢?

    .NET Framework的发表打响了Microsoft .NET战略的第一枪,ASP.NET、Web Service等词也伴随着.NET 技术的普及几乎变得家喻户晓。大家已经知道DirectX是基于COM技术的,而COM技术主要是为本地机服务的,在本地机上DirectX可以尽量把硬件的性能发挥到极限,但是它在.NET的网络时代是不是就无法施展它原有的威力呢?答案肯定是“否”。现在,DirectX已经成为Windows核心API的一部分,而Microsoft表示不会再提供更多的Win32API,今后的Windows API可能将全部集成到.NET Framework中去,那么DirectX到哪里去了呢?原来它早就已经改头换面,与.NET Framework达成了“默契”,这也就是Managed DirectX的由来。

    Managed DirectX 实质上是对DirectX进行了一个轻量级的封装,Microsoft在2003年10月初发布了Microsoft DirectX 9.0 SDK Update (Summer 2003),其中就着重改进了Managed DirectX部分。一方面使它能与.NET Framework紧密集成,可供.NET 平台下的其他语言调用 (如C#);另一方面对DirectX程序编写进行了进一步简化,使得DirectX向RAD开发的方向又迈进了一大步,毕竟ASP.NET、WinForm这些东西是在网络上运行的。如此我们可以试想将来可以在网页上看到有硬件加速支持的绚丽的3D动画实时演示,这将是多么令人激动的事啊!

四、开发环境的支持与配置

    在进行DirectX开发之前,我们需要下载并安装相应版本的DirectX SDK,这个可以从Microsoft的官方站点上免费获得,最新的DirectX 9.0 SDK Update(Summer 2003)大约是185MB,相关的还有DirectX9 SDK for Pocket PC 、DirectX9 Meltdown、DirectX9 SDK Extras等,下载的相关页面http://msdn.microsoft.com/directx

下载了相应的SDK后,我们就可以开始利用它进行DirectX开发了。

1、Microsoft Visual Studio 6.0/.NET/.NET 2003中的配置
因为DirectX是Microsoft的产品,所以在Visual Studio系列中,DirectX开发所需的配置显得格外简单,下面以最新的Microsoft Visual Studio .NET 2003为例说明。

第一步:配置Include和Library的目录,


                         设置包含文件(Include)


                         设置库文件(Lib)

第二步:添加链接所需的库文件
如下图所示菜单操作,添加相应的库文件,如dxguid.lib、d3d9.lib、d3dx9.lib等,不同的程序需要不同的库文件,但是dxguid.lib是必须要包含的。



    其他办法:在设置了Include和Library文件路径后,我们还可以使用在程序首部加入以下语句变相实现相应库文件的链接。

    #pragma comment (lib,"dxguid.lib")

#pragma comment (lib,"d3d9.lib")

........

2、Borland C++ Builder 5/6/X中的配置
    很不幸,自DirectX8.0 SDK起,Microsoft就不再提供Borland编译器支持的库文件。Borland C++ Builder是一款非常优秀的RAD开发工具,它在开发桌面应用程序上的便捷性令人叹为观止,那么是不是就无法在C++ Builder中进行DirectX开发了呢?这似乎有点可惜。但是Borland自有它的高招,既然标准的DirectX SDK中不提供Borland版的库文件,那我就自己做!方法如下:

    首先,在C++Builder安装目录下的bin子目录中,我们可以找到一个名为implib.exe的文件;其次,打开 MSDOS命令行窗口,输入:implib [库文件名] [源DLL文件名],即可成成相应链接所需的库文件。

    例如:从d3d9.dll中导出编译所需的d3d9.lib,并将生成的d3d9.lib保存到C盘根目录下。

implib c:\d3d9.lib c:\windows\system32\d3d9.dll

    这样我们就得到了所需的lib文件,然后将它和原来SDK中所提供的.h文件混合使用,就可以在C++ Builder中进行梦寐以求的DirectX开发了,此方法在C++ Builder X和DirectX9 SDK Update(Summer 2003)环境下测试通过。(在上述环境下似乎不需要dxguid.lib编译也能通过)

五、DirectX的未来

DirectX的基本模型架构:

      
           DirectX9                           DirectX10

    在现有的DirectX 8和DirectX 9中,可编程顶点着色和像素渲染是分开来的两个单元,也就是说,GPU生产厂家需要在GPU中划分两个区域来存放Vertex Shader阵列和Pixel Shader贴图流水线,那么,能否把这两者整合在一起呢?可以!那就是DirectX 10!如图所示,预计DirectX10中的Vertex Shader和Pixel Shader将会合并成一个Integrated Shader单元。

五、结束语

    正如本文所展现的历代DirectX的发展史,及其一步步改进的足迹,DirectX的确在媒体技术上占有至关重要的地位,它是一代又一代媒体技术发展的催化剂。可以预见,未来的DirectX将给我们带来前所未有的、更加震撼的视听冲击,让我们拭目以待!