当前位置: 首页 > 文档资料 > DirectX 中文教程 >

什么是 DirectX?

优质
小牛编辑
132浏览
2023-12-01

什么是DirectX?

现在电脑软件方面的什么Direct,什么X,简直太多了,搞得我每次去书店买书,在一大堆充斥着Director、ActiveX的书籍面前,总是看花了眼。再一次向读者重申,本站只致力于介绍微软的游戏开发引擎——DirectX的开发与利用,与Director或ActiveX或其它什么相类似的名称没有任何关系。
下面,先让本站长为你解释一下DirectX的意思(以下为站长原话)。
Direct嘛,嗯,从字面上理解,它是“直接了当”的意思;X,从它的形状可以看出来,好象是个十字路口,四通八达,那么——,嗯,这个地方肯定有一个大排挡,什么牛肉面、三名治、烤火腿、羊肉串...想吃什么有什么(说话间,哈喇子不知不觉已达半米)...(3/4秒后)...那么,DirectX的意思想必我不说,各位也清楚了吧。“直接了当的大杂烩”(有人发言)。正确!

下面,还是让Microsoft来告诉你什么是DirectX,以及它的特征吧,本章分为以下几节。(如果你实在没有耐心看下去,可以先做一下最后的自测题,如果你已经会的话,你就没有必要看下去了,直接进入下一章吧)

1、什么是DirectX ?

2、DirectX的组成部分

3、关于DirectDraw

4、为什么要使用DirectDraw?

5、DirectX5.0的新特性?

6、什么是部件对象模型(COM)

7、自我检测

1、什么是DirectX ?

微软的DirectX软件开发工具包(SDK)提供了一套优秀的应用程序编程接口(APIs),这个编程接口可以提供给你开发高质量、实时的应用程序所需要的各种资源。DirectX技术的出现将极大的有助于发展下一代多媒体应用程序和电脑游戏。

总的说来,使用DirectX的主要有两个好处:1、为软件开发者提供硬件无关性;2、为硬件开发提供策略。

1、为软件开发者提供硬件无关性

微软开发DirectX,其最主要的目的之一是促进在Windows操作系统上的游戏和多媒体应用程序的发展。在DirectX出现以前,主要的游戏开发平台是MS-DOS,游戏开发者们为了使他们的程序能够适应各种各样的硬件设备而绞尽脑汁。自从有了DirectX,游戏开发者们便可以获益于Windows平台的设备无关性,而又不失去直接访问硬件的特性。DirectX主要的目的就是提供象MS-DOS一样简洁的访问硬件的能力,来实现并且提高基于MS-DOS平台应用软件的运行效果,并且为个人电脑硬件的革新扫除障碍。

另一方面,微软公司开发DirectX是为了在当前或今后的计算机操作系统上提供给基于Windows平台的应用程序以高表现力、实时的访问硬件的能力。DirectX在硬件设备和应用程序之间提供了一套完整一致的接口,以减小在安装和配置时的复杂程度,并且可以最大限度的利用硬件的优秀特性。通过使用DirectX所提供的接口,软件开发者可以尽情的利用硬件所可能带来的高性能,而不用烦恼于那些复杂而又多变的硬件执行细节。

一个高表现力的基于Windows平台的游戏将得益于以下几种技术:

  • 专为提高图形运算及快速反应能力而设计的加速卡(Accelerator cards)
  • 即插即用以及其它Windows软硬件
  • 内建于Windows的通信服务, 包括DirectPlay

2、为硬件开发提供策略

DirectX的另外一个重要的目的是给硬件厂商提供开发策略,他们可以从高性能程序的开发者和独立的硬件供应商(independent hardware vendors IHVs)那里得到反馈。所以,在DirectX 程序员参考书中有时可能会提供那些还不存在的硬件加速设备的技术细节。在很多时候,软件可以模拟这些特性,在另外一些情况下,软件根据硬件的指标判断出其特性,并且可以忽略那些硬件并不支持的性能。

已经和将要实现的显示设备的特性包括:

  • 覆盖(Overlays),由于它的被支持,在图形设备接口中,窗口中的换页(page flipping)将成为可用。换页是用来在整个屏幕上显示画面的双缓冲(double-buffer)方案。
  • 精灵引擎(Sprite engines),使精灵(不规则图形)覆盖更容易。
  • 插补延展(Stretching with interpolation),它可以更有效的保存显示内存,因为它可以使小幅画面延展到整个屏幕。
  • Alpha 融合(Alpha blending),它可以在硬件像素层(hardware-pixel level)上混合颜色。
  • 带有透视修正(perspective-correct)贴图的3D加速器,它允许你在3D表面上贴图。比如,你可以在用3D软件制作的城堡的走廊里贴上砖块的位图来显示出透视效果。
  • 为3D图象进行的位操作将 Z 方向考虑在内。
  • 标准2兆显示内存,这在3D游戏中是最小需求。
  • 压缩标准,这将允许你在显存中储存更多的信息。这个标准不论是在软件还是硬件中执行都会相当快。它将被用在贴图中并且包含透明压缩。

将要被包括的声音设备的新特性包括:

  • 硬件及其外设可以提供空间环绕立体声效果。
  • 声卡上内置音频内存。
  • 音频-视频一体卡可共享其上的内存。

另外,视频回放将得益于今后的与DirectX相兼容硬件加速设备。今后的DirectX版本中的一个特性是将支持硬件加速YUV视频解码。

2、DirectX的组件

DirectX SDK为基于Windows平台的应用程序提供了以下几个组件。

  • DirectDraw :通过直接访问显示硬件来提供高级的图象处理能力。
  • DirectSound :它提供了软硬件的低延迟声音混频(low_latency sound mixing)和回放(Playback),硬件加速,以及直接访问音频设备的能力。
  • DirectPlay :它明确的提供了通用环境连接能力(generalized communication capabilities),来简化你应用程序之间的通讯服务。
  • Direct3D :它为主流的桌上型计算机和Internet用户提供实时的、交互的3D技术。
  • DirectInput :它简化你的应用程序访问鼠标、键盘和操纵杆设备的能力。
  • DirectSetup :一套简单的API向你提供安装DirectX部件的功能。
  • AutoPlay :它也是Win95操作系统的一个特性,当你在光驱内放上光盘,指定的应用程序会自动执行。

3、关于DirectDraw

DirectDraw是DirectX SDK大家族中的一员,也是其中最主要的一个部件。DirectDraw允许程序员直接的操作显存、硬件位图映射以及硬件覆盖和换页技术。它在提供这些功能的同时,也使其与现在的基于Microsoft Windows的应用程序和设备驱动程序相兼容。

DirectDraw是一个软件接口,它在提供直接访问显示设备的同时,与Windows图形设备接口(GDI)相兼容。DirectDraw不是一个高层的图形程序编程接口,它为游戏和Windows子系统软件(例如:3D图形包和数字视频编码)提供了一种与设备无关的途径,以获得访问特定的显示设备的某些高级特性的能力。

DirectDraw适用于种类众多的的显示设备,从简单的SVGA显示器到提供裁剪、缩放、和支持非RGB颜色格式的高级硬件实现设备。设计这样的接口是为了让你的应用程序能够列举低层硬件的能力,并且对那些支持的硬件加速特性加以利用。那些在硬件设备中不能实现的特性,DirectX将仿真出来。

DirectDraw提供了以下几个优点,这些好处在以前只有那些专为特定显示设备所写的软件才能利用。

  • 支持双缓冲和换页图形
  • 访问、控制显示卡的位图映射
  • 支持3D z-buffers (z缓存)
  • 支持z方向(z-ordering)硬件辅助覆盖。
  • 访问图形缩放硬件
  • 仿真访问标准的和增强的显示设备内存空间

DirectDraw的任务是用与设备无关的途径来提供依赖于设备的访问显示内存的方法。本质上,DirectDraw管理显示内存。你的应用程序只需要懂得那些一般的关于硬件与设备有关的知识,比如RGB和YUV色彩格式和两条光栅线之间的pitch(宽距) 。在需要利用位转换或操作调色板寄存器时,你不需要为调用过程中的细节而烦恼。使用DirectDraw,你可以方便的操作显示内存,充分的利用不同类型的显示设备的位转换和颜色压缩能力,而不需要依赖于某一个特定的硬件。

DirectDraw给运行于Windows 95和Windows NT 4.0或更高版本的计算机提供了一个高性能的的游戏图象引擎。

4、为什么要使用DirectDraw?

无庸置疑,人们之所以利用DirectDraw来开发各种游戏以及多媒体应用软件,是因为DirectDraw可以为他们的应用程序带来许多强大的功能提升。

  • DirectDraw可以充分评估视频硬件的能力,只要可能,它就会对其某一特性加以利用。例如,如果你的显卡支持硬件Blit,DirectDraw就会将位图映射这一操作分派给显卡来完成,极大的提升运行速度。此外,当某硬件不支持某项特性时,DirectDraw还提供了硬件仿真层(HEL)以完成这项操作。
  • DirectDraw的硬件抽象层(HAL)提供了一个统一的接口,通过它,开发者可以直接的操作显示存储器和视频存储器,从系统硬件中获取最大的表现能力。
  • DirectDraw运行于Windows95操作系统之上,从系统所提供的32位内存寻址和平面内存模型中获益。DirectDraw将视频和系统存储器视为整块的空间,而不是碎片的集合。如果你曾使用过区段偏移寻址,你将很快就喜爱上这种“平面”内存模型。
  • 对于全屏模式的应用程序,DirectDraw使得多后台缓存的换页操作变得极为容易。
  • 支持窗口和全屏模式应用程序的裁减。
  • 支持3-D z缓存。
  • 支持带z轴方向的硬件辅助覆盖。
  • 可访问图象缩放硬件。
  • 可同时访问标准的和增强的显示设备内存区。
  • 其它的特性,包括动态改变调色板、独占访问硬件、和分辨率切换等等。

合理和有效的利用DirectDraw的这些特性将使开发者很容易就能够写出比基于标准的Windows GDI应用程序,甚至MS-DOS应用程序还要优秀的作品。

5、DirectX 5.0的新特性

DirectX5.0版本比3.0版拥有更多的创新和新特性(注意:并不存在4.0版)。尽管这样,你用以前版本写的DirectX应用程序同样可以不加修改的运行于DirectX5.0环境中。以下将介绍的是DirectX 5.0中DirectDraw接口的新特性。

  • 首先,DirectDraw支持Windows98和Windows NT 5.0的多显示器系统。例如,在多显示器环境下,同一台电脑使用两套不同的显示设备和显示器,用户可以将不同的画面显示在两个显示屏幕上,甚至将一个窗口从一个显示器拖拽到另一个显示器上。DirectDraw5.0支持这样一个系统,允许应用程序在这样的环境中直接的访问和操纵硬件加速特性。

  • 其次,DirectDraw已经使视频端口(Video-port)具有新的性能,它允许应用程序直接控制数据流从一个硬件视频端口流向一个位于显存中的DirectDraw页面上。这样,使得视频图象的输入和输出对DirectDraw来说都变得极为便利和快速。

  • 除此之外,DirectDraw的HEL(硬件仿真层)现在可以充分利用Pentium MMX处理器所带来的多媒体性能的提升。当你第一次创建页面的时候,DirectDraw会测试你的电脑芯片是否支持MMX。而在一台非Pentium MMX级别电脑上,这个测试会在调试程序的时候给出一个良性的异常信息,而这个异常并不会影响到你的应用程序执行的稳定性。

  • DirectDraw接口现在还支持离屏页面的宽度大于主页面的宽度。你可以创建这些页面而不用顾及它的大小,而在以前的版本中,你经常会为了不使页面宽度大于主页面而将其分割开来。

  • DirectDraw接口现在已经能够支持高级图形端口(AGP)构架。在装备了AGP显卡的系统中,DirectDraw程序开发者将从AGP显卡的大容量和高传输速率中获益。

6、部件对象模型(COM)

DirectX是基于COM的一套软件编程接口。

部件对象模型(Component Object Model, COM)是OLE 的基础。COM 为OLE提供了编程模型和二进制标准。COM定义并实现了软部件(如应用程序、数据对象、控件及服务)机制,并把它们统称为“对象”。每个软部件对象由数据以及访问数据的函数组成,访问软部件对象数据的函数的集合称为“接口”。

从这里可以看出,COM 的设计与C++类非常相似,即一个软部件对象具有一个内部数据结构和一组外部接口函数,允许通过接口函数对数据进行访问。因此Microsoft公司把根据COM执行的对象统称为Windows对象。但Windows对象与C++中的对象有明显的差别,Windows对象中没有公共数据,也没有成员函数,因此不能直接访问数据,也就是说数据是全封装的。

对象的提供者或服务器必须指明一个或多个接口的定义,每个接口都是相互关联的一组函数,执行对象的一个特性。每个对象的一个用户(或称为“客户”)必须拥有一个接口指针才能访问对象。当客户有了这个指针后,就可以使用这个对象而无需知道对象的含义,即使客户运行在不同的进程、不同的机器、不同的操作系统、由不同的软件开发而使用不同的语言,或者版本不同。

DirectX SDK接口被创建在COM编程层次表中很基础的一层。每一个代表设备的对象的接口,比如IDirectDraw、IDirectSound、和IDirectPlay,是直接从IUnknown OLE接口中派生下来的。这些基本对象的创建被操作于在该对象的动态连接库中,要比用Win32中专门用来创建COM对象的CoCreateInstance函数要好得多。

特别的是,DirectX SDK对象模型为每一个设备提供一个主要的对象。其它的设备对象是由这个主要对象派生下来的。例如,DirectDraw对象代表显示设备。你可以用它来创建代表显存的主页面(DirectDrawSurface)对象,和代表硬件调色板的调色板(DirectDrawPalette)对象;相似的,DirectSound对象代表声卡,并且创建DirectSoundbuffer对象来代表声卡上的声音数据。

7、自我检测

本章所讲的内容都是关于DirectX的较为抽象的概念。其实,在你真正开始自己编制程序,进入这一领域之前,有些概念现在还是很难接受的。但是,当你在有了一定的实践经验,在回过头看这些文字,你会发现它们其实还是很好理解的。实践出真知,掌握DirectDraw知识的最佳途径只有一个,那就是“编程”。在下一章里,我们将正式开始DirectDraw编程的学习。

通过这一章的学习,你应该对以下内容有所了解:

  • DirectX是做什么用的?
  • DirectX包括哪些组件,以及它们各自的作用。
  • DirectDraw的好处是什么,我们为什么要使用它。
  • COM的一般解释。