编程入门:DirectX 9.0 学习笔记_kacoro欢迎你~_百度空间
1、DirectX是什么

  DirectX(简称:DX)是推出的一套基于Windows系统的多媒体应用程式接口APIs函式。在开发中,DX分为两个部分,一个是运行库,通过DX编译出来的程式必须要有运行库的支持,另外一个是开发库,也就是常说的SDK,这部分是在编译DX程序中是必需的。

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

  DirectX 是微软开发的图形及媒体加速接口,只有安装了它,系统中软件才能比较直接的利用硬件加速资源(高速访问硬件),目前该软件{zg}版本为9.0c

  在Windows操作系统的体系构架中,在内核与硬件之间有一层抽象层,专门对硬件进行屏蔽抽象,所以用户不再被允许对硬件进行直接访问。这样做以后,大大地提高了操作系统的抗破坏性和抗干扰性,但这样以来,使硬件操作的效率大打折扣,许多新硬件的新特性无法直接使用,这对多媒体和游戏的发展显然是一种障碍。DirectX是微软公司提供的一套优秀的应用程序编程接口(APIs),用于联系应用程序和硬件自身,它对发展Windows平台下的多媒体应用程序和游戏起到了关键的作用。

  DirectX组件包括:DirectDraw、DirectSound、DirectPlay、Direct3D、DirectInput、DirectSetup、AutoPlay等。

  总之,DirectX的主要好处有两个:为软件开发者提供与硬件的无关性;为硬件开发提供策略。

  为得到{zx1}的版本,应该从{zx1}的Microsoft Platform SDK中将DirectX安装到系统中。 可以在http://www.microsoft.com/msdn站点或者MSDN光盘中找到platform SDK。缺省情况下,Microsoft Platform SDK被安装到缺省驱动器根目录下的\MSSDK目录中。DirectX 的头文件安装在\MSSDK\INCLUDE目录中,Lib文件安装在\MSSDK\LIB目录中。

  Platform SDK包含了一些非常好的DirectX例子和文档。早期发布的DirectX 文档非常粗略而且有些是错误的,现在的版本已经极大地改正了这一问题。{zh0}要熟悉这些文档。

  所幸的是,不必一次就处理DirectX的全部功能。DirectX是一套可以分别使用的组件。实际上,在编程概念中,DirectX的不同部分互相没有联系。它们仅仅是具有相同的设计风格和目标:使Windows的游戏编程变得容易。

  使用DirectX组件的程序有什么特殊的地方吗?根本没有。使用DirectX组件的程序是基于Win32的程序,它们使用普通Win32 API集,并且可以访问所有可以获得的操作系统工具。实际上,DirectX既可以用于GUI程序,也可以用于控制台程序。可以直接用Petzold-style SDK编程开发程序,也可以用基本类库,如MFC。总的说,{wy}的要求是大多数DirectX组件在程序中需要HWND,所以至少要有一个窗口。

  2、DirectX的作用

  DirectX软件开发包是微软公司提供的一套Windows操作平台上的开发高性能图形、声音、输入、输出和游戏的编程接口。它提供了硬件设备无关性。  3、DirectX 9.0 家族的所有成员

  DirectX Graphics:集成了以前的DirectDraw 和Direct3D技术。DirectDraw主要负责2D加速,以实现对内存和系统内存的直接操作;Direct3D主要提供三维绘图接口,它是开发三维DirectX游戏的基础。

  DirectInput:主要支持输入服务(包括、、游戏杆等),同时支持输出设备。

  DirectPlay:主要提供多人网络游戏的、组织功能。

  DirectSetup:主要提供自动安装DirectX组件的API功能。

  DirectMusic:主要支持MIDI音乐合成和播放功能。

  DirectSound:主要提供音频捕捉、回放、音效处理、硬件加速、直接设备访问等功能。

  DirectShow:为Windows平台上处理各种格式的媒体文件的回放、音视频采集等高性能要求的多媒体应用,提供了完整的。

  DirectX Media Objects:DirectShow Filter 的简化模型,提供更方便的流数据处理方案。

   4、DirectShow的由来

  DirectShow是从DirectX6.0中的DirectX Media 发展而来的,它集成了DirectX家族中其他成员(DirectDraw、DirectSound等)的技术。DirectX Media Objects是从DirectX8.1的DirectShow中分离出来的,成为了另一种高效率的流数据处理解决方案。  

  5、程序开发包的选择

  请问在Mirosoft DirectX主页上的下载连接有如下:

  它们有什么区别:

  DirectX 9.0 SDK Update - (April 2005)

  DirectX 9.0 SDK Update - (April 2005) Symbol Files

  DirectX 9.0c Redistributable for Software Developers - (April 2005)

  DirectX 9.0c End-User Runtime

  --------------------------------------------------------------------------------

  DirectX 9.0 SDK Update - (April 2005) - 就是通常说的DXSDK

  DirectX 9.0 SDK Update - (April 2005) Symbol Files - 调试时用的符号文件

  DirectX 9.0c Redistributable for Software Developers - (April 2005) - 能够随你的程序一起发行的部分

  DirectX 9.0c End-User Runtime - 普通用户安装的DX  6、如何把DirectX关联到VC中?

  我们要进行DirectX程序的编译就必须要有DirectX SDK库文件,此文件可以到或者本站获取,然后通过VC设置将其关联。下面说明了在VC6和VS.Net下的安装方法。

  VC6(英文版):选择菜单Tools->Options,打开Options对话框,选择Directions标签页,选择Include files项,在里面添加DirectX头文件的文件夹路径目录,同样,在Library files项中添加DirectX头文件的文件夹路径目录。

  VS.Net(中文版):选择菜单"工具->选项",打开选项对话框,打开Projects标签页,分别选择"包含文件"和"库文件"进行相应的路径添加即可。

  注:VC在进行编译时,会根据排列顺序来进行库文件选取,假设有两个相同名字的库,VC会优先使用排列在前面的库文件。  

  7、VC编译DX程序出现"无法解析的外部符号"是怎么回事?

  个错误经常出现在初学者要进行编译DirectX程序的时候,主要是因为没有将DX的库文件引用到工程中,这里需要注意,我们将DX SDK的路径设置到VC后,并不代表我们已设置好了DX SDK,在我们的DX工程中,我们还需要进行相应的设置操作,把我们所需要的库文件(DirectX SDK Library)加入到我们的工程中,要设置这个库文件有两个方法,一个是在你工程的编译选项中进行添加,另外一种可以通过代码的方法来添加(推荐)。

  命令行:#pragma comment( lib,"xxx.lib" )

  这个是VC的编译预处理指令,将其加在代码中即可。

  例如:#pragma comment( lib,"ddraw.lib" )  这句的意思是将ddraw.lib库加入到工程中进行编译。

注:此命令行不需要加分号(“;”)。  

  8、DirectShow的COM编程基础

  DirectX采用了COM标准,而DirectShow是一套xx基于COM的应用系统。

  DirectShow应用程序实际上是一种COM组件的客户程序,只是COM组件的“使用”问题。这些问题包括如何创建COM组件、如何得到组件对象上的解风口以及调用接口方法、如何管理组件对象(即需要熟悉COM的引用计数机制)等。

  而对于Filter开发人员来说,需要掌握的COM知识就要多一点。因为Filter本身是一种COM组件,开发Filter牵涉到了COM组件的“实现”问题。COM本身只是一种规范,而不是实现。但是当使用C++来实现时,COM组件就是一个C++类,而接口都是纯虚类。COM规范规定,任何组件或接口都必须从IUnknown接口中继承而来,每个组件都必须实现一个与支相对应的类工厂(Class Factory),类工厂也是一个COM组件,他实现了IClassFactory接口。在IClassFactory的接口函数CreateInstance中,才能使用new操作生成一个与之对应的COM组件类对象实例。

   COM组件有3种类型:进程内组件、本地进程组件和远程组件。Filter一般是一种进程内组件,以DLL的形式提供服务。

   每个COM组件都使用一个GUID来{wy}标识。当创建一个COM组件时,总是首先通过这个GUID调用CoGetClassObject来获得创建这个组件对象的类工厂。然后调用类工厂的接口方法IClassFactory::CreateInstance,就能真正地创建GUID标示的组件对象了。

  一个典型的自注册COM组件DLL所必需的5个函数如下:

  l DllMain:DLL的入口函数(DirectShow实现的是DllEntryPoint);

  lDllGetClassObject:用于获得类工厂指针;

  l DllCanUnloadNow:系统空闲时会调用这个函数,以确定是否可以卸载DLL;

  l DllRegisterServer:将COM组件注册到注册表中;

  l DllUnregisterServer:删除注册表中COM组件的注册信息。

  9、Filter的类别

  Source Filters主要负责获取数据,数据源可以是文件也可以是设备。只有输出Pin。

  Transform Filters主要负责数据的格式转换,例如数据流分离/合成、编码/解码等,然后将数据继续往下传输。既有输入Pin又有输出Pin。

  Rendering Filters主要负责数据的最终去向,送达设备或文件。只有输出Pin。  

  10、Filter原理

  Filter Graph是Filter的“容器“,而Filter是Filter Graph中的最小功能模块。

  Filter是一种COM组件。为了实现在Filter Graph中的统一操作,每个Filter上都至少实现了IBaseFilter接口。IBaseFilter继承自IMediaFilter。Filter Graph Manager正是通过IMediaFilter的接口方法来控制Filter Graph的状态(运行、暂停、停止)转换

  实现Filter的文件一般是一个DLL,扩展名可以是.dll,但更多的时候是.ax。

  Filter的注册信息一般包括两部分:基本的COM信息和Filter特有信息。

  应用程序可以通过Filter Graph Manager上获得的IMediaSeeking接口,实现对流媒体的随机定位(Seeking)和调整媒体文件的回放速率。实际上,IMediaSeeking接口的真正实现在Filter上。

  用于媒体定位的还有另外一个接口IMediaPosition,这是一个支持自动化(Automation)的接口,是为那些弱类型编程语言(如VB)开发DirectShow应用程序而设计的。对于Filter开发人员来说,并不要求实现IMediaPosition。Filter Graph Manager会自动将IMediaPosition的接口方法调用转换为IMediaSeeking的接口方法调用。

  质量控制通过IQualityControl接口来实现。具体质量控制策略的实现取决于具体的Filter实现,可能调整发送速度,也可能是丢失部分数据。



郑重声明:资讯 【编程入门:DirectX 9.0 学习笔记_kacoro欢迎你~_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——