编程入门DirectX 90 学习笔记.docx
- 文档编号:7706906
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:21
- 大小:41.49KB
编程入门DirectX 90 学习笔记.docx
《编程入门DirectX 90 学习笔记.docx》由会员分享,可在线阅读,更多相关《编程入门DirectX 90 学习笔记.docx(21页珍藏版)》请在冰点文库上搜索。
编程入门DirectX90学习笔记
【简介】
DirectX(简称:
DX)是微软推出的一套基于Windows系统的多媒体应用程式接口APIs函式。
在开发中,DX分为两个部分,一个是运行库,通过DX编译出来的程式必须要有运行库的支持,另外一个是开发库,也就是常说的SDK,这部分是在编译DX程序中是必需的。
3、DirectX9.0家族的所有成员
DirectXGraphics:
集成了以前的DirectDraw和Direct3D技术。
DirectDraw主要负责2D加速,以实现对显卡内存和系统内存的直接操作;Direct3D主要提供三维绘图硬件接口,它是开发三维DirectX游戏的基础。
DirectInput:
主要支持输入服务(包括鼠标、键盘、游戏杆等),同时支持输出设备。
DirectPlay:
主要提供多人网络游戏的通信、组织功能。
DirectSetup:
主要提供自动安装DirectX组件的API功能。
DirectMusic:
主要支持MIDI音乐合成和播放功能。
DirectSound:
主要提供音频捕捉、回放、音效处理、硬件加速、直接设备访问等功能。
DirectShow:
为Windows平台上处理各种格式的媒体文件的回放、音视频采集等高性能要求的多媒体应用,提供了完整的解决方案。
DirectXMediaObjects:
DirectShowFilter的简化模型,提供更方便的流数据处理方案。
4、DirectShow的由来
DirectShow是从DirectX6.0中的DirectXMedia发展而来的,它集成了DirectX家族中其他成员(DirectDraw、DirectSound等)的技术。
DirectXMediaObjects是从DirectX8.1的DirectShow中分离出来的,成为了另一种高效率的流数据处理解决方案。
5、程序开发包的选择
请问在MirosoftDirectX主页上的下载连接有如下:
它们有什么区别:
DirectX9.0SDKUpdate-(April2005)
DirectX9.0SDKUpdate-(April2005)SymbolFiles
DirectX9.0cRedistributableforSoftwareDevelopers-(April2005)
DirectX9.0cEnd-UserRuntime
--------------------------------------------------------------------------------
DirectX9.0SDKUpdate-(April2005)-就是通常说的DXSDK
DirectX9.0SDKUpdate-(April2005)SymbolFiles-调试时用的符号文件
DirectX9.0cRedistributableforSoftwareDevelopers-(April2005)-能够随你的程序一起发行的部分
DirectX9.0cEnd-UserRuntime-普通用户安装的DX
DX 编程 开发 技巧
6、如何把DirectX关联到VC中?
我们要进行DirectX程序的编译就必须要有DirectXSDK库文件,此文件可以到微软或者本站获取,然后通过VC设置将其关联。
下面说明了在VC6和VS.Net下的安装方法。
VC6(英文版):
选择菜单Tools->Options,打开Options对话框,选择Directions标签页,选择Includefiles项,在里面添加DirectX头文件的文件夹路径目录,同样,在Libraryfiles项中添加DirectX头文件的文件夹路径目录。
VS.Net(中文版):
选择菜单"工具->选项",打开选项对话框,打开Projects标签页,分别选择"包含文件"和"库文件"进行相应的路径添加即可。
注:
VC在进行编译时,会根据排列顺序来进行库文件选取,假设有两个相同名字的库,VC会优先使用排列在前面的库文件。
7、VC编译DX程序出现"无法解析的外部符号"是怎么回事?
个错误经常出现在初学者要进行编译DirectX程序的时候,主要是因为没有将DX的库文件引用到工程中,这里需要注意,我们将DXSDK的路径设置到VC后,并不代表我们已设置好了DXSDK,在我们的DX工程中,我们还需要进行相应的设置操作,把我们所需要的库文件(DirectXSDKLibrary)加入到我们的工程中,要设置这个库文件有两个方法,一个是在你工程的编译选项中进行添加,另外一种可以通过代码的方法来添加(推荐)。
命令行:
#pragmacomment(lib,"xxx.lib")
这个是VC的编译预处理指令,将其加在代码中即可。
例如:
#pragmacomment(lib,"ddraw.lib") 这句的意思是将ddraw.lib库加入到工程中进行编译。
注:
此命令行不需要加分号(“;”)。
8、DirectShow的COM编程基础
DirectX采用了COM标准,而DirectShow是一套完全基于COM的应用系统。
DirectShow应用程序实际上是一种COM组件的客户程序,只是COM组件的“使用”问题。
这些问题包括如何创建COM组件、如何得到组件对象上的解风口以及调用接口方法、如何管理组件对象(即需要熟悉COM的引用计数机制)等。
而对于Filter开发人员来说,需要掌握的COM知识就要多一点。
因为Filter本身是一种COM组件,开发Filter牵涉到了COM组件的“实现”问题。
上一页第[1][2][3][4]页下一页
COM本身只是一种规范,而不是实现。
但是当使用C++来实现时,COM组件就是一个C++类,而接口都是纯虚类。
COM规范规定,任何组件或接口都必须从IUnknown接口中继承而来,每个组件都必须实现一个与支相对应的类工厂(ClassFactory),类工厂也是一个COM组件,他实现了IClassFactory接口。
在IClassFactory的接口函数CreateInstance中,才能使用new操作生成一个与之对应的COM组件类对象实例。
COM组件有3种类型:
进程内组件、本地进程组件和远程组件。
Filter一般是一种进程内组件,以DLL的形式提供服务。
每个COM组件都使用一个GUID来唯一标识。
当创建一个COM组件时,总是首先通过这个GUID调用CoGetClassObject来获得创建这个组件对象的类工厂。
然后调用类工厂的接口方法IClassFactory:
:
CreateInstance,就能真正地创建GUID标示的组件对象了。
一个典型的自注册COM组件DLL所必需的5个函数如下:
lDllMain:
DLL的入口函数(DirectShow实现的是DllEntryPoint);
lDllGetClassObject:
用于获得类工厂指针;
lDllCanUnloadNow:
系统空闲时会调用这个函数,以确定是否可以卸载DLL;
lDllRegisterServer:
将COM组件注册到注册表中;
lDllUnregisterServer:
删除注册表中COM组件的注册信息。
9、Filter的类别
SourceFilters主要负责获取数据,数据源可以是文件也可以是设备。
只有输出Pin。
TransformFilters主要负责数据的格式转换,例如数据流分离/合成、编码/解码等,然后将数据继续往下传输。
既有输入Pin又有输出Pin。
RenderingFilters主要负责数据的最终去向,送达设备或文件。
只有输出Pin。
10、Filter原理
FilterGraph是Filter的“容器“,而Filter是FilterGraph中的最小功能模块。
Filter是一种COM组件。
为了实现在FilterGraph中的统一操作,每个Filter上都至少实现了IBaseFilter接口。
IBaseFilter继承自IMediaFilter。
FilterGraphManager正是通过IMediaFilter的接口方法来控制FilterGraph的状态(运行、暂停、停止)转换
实现Filter的文件一般是一个DLL,扩展名可以是.dll,但更多的时候是.ax。
Filter的注册信息一般包括两部分:
基本的COM信息和Filter特有信息。
应用程序可以通过FilterGraphManager上获得的IMediaSeeking接口,实现对流媒体的随机定位(Seeking)和调整媒体文件的回放速率。
实际上,IMediaSeeking接口的真正实现在Filter上。
用于媒体定位的还有另外一个接口IMediaPosition,这是一个支持自动化(Automation)的接口,是为那些弱类型编程语言(如VB)开发DirectShow应用程序而设计的。
对于Filter开发人员来说,并不要求实现IMediaPosition。
FilterGraphManager会自动将IMediaPosition的接口方法调用转换为IMediaSeeking的接口方法调用。
质量控制通过IQualityControl接口来实现。
具体质量控制策略的实现取决于具体的Filter实现,可能调整发送速度,也可能是丢失部分数据。
【责任编辑徐洋】
上一页第[1][2][3][4]页
DX 编程 开发 技巧
我有不明白的问题,想请大家帮我解决:
输入问题:
近日nVIDIA市场部的DanVivoli宣布,来自这家3D芯片巨人的下一款产品不是新的芯片,而是nVidiaCg。
nVidiaCg——简而言之,这就是一种基于新语言的开发工具,它将给开发者带来更简便的开发环境,这种新语言就好比是显卡的C++。
这是革命性的一步,用于图形界的Cg语言一但出现,将会为这个工业添进无穷动力,按照NVIDIA发言人的话来说,5-10年后,PC终将能实时渲染任何电影级的CG效果,显然,如果配合Cg语言和硬件发展趋势来看,这并不是自我吹捧的结果。
然而,唯一让我们感到疑惑的是,这一图形界的软件工业,会否像普通编程语言那样,百家争鸣呢?
要知道在PC领域,有VisualC++,BorlandC++等等。
也许在图形工业领域出现ATiCg或者是MatroxCg,将会更加混乱,不过依据市场规律,这一步很难避免。
目前根据消息,beta版的nVIDIACg开发包和NV30显卡已经发送到各位开发者手中,而正式版本的nVIDIACg也将很快准备完毕并最终交付各人手里。
控制这一开发软件无疑让nVIDIA再次走到各人前头……
【作者:
小熊在线-wetnt北京】 版权作品未经许可请勿转载
如果在Windows下又该如何对显卡编写程序?
6
Windows下用DirectX呀 当然Vesa在95/98/2000的dos模式下也可以工作的
7
DirectX并不是一个单纯的图形API,它是由微软公司开发的用途广泛的API,它包含有DirectGraphics(Direct3D+DirectDraw)、DirectInput、DirectPlay、DirectSound、DirectShow、DirectSetup、DirectMediaObjects等多个组件,它提供了一整套的多媒体接口方案。
只是其在3D图形方面的优秀表现,让它的其它方面显得暗淡无光。
DirectX开发之初是为了弥补Windows3.1系统对图形、声音处理能力的不足,而今已发展成为对整个多媒体系统的各个方面都有决定性影响的接口。
DirectX5.0
微软公司并没有推出DirectX4.0,而是直接推出了DirectX5.0。
此版本对Direct3D做出了很大的改动,加入了雾化效果、Alpha混合等3D特效,使3D游戏中的空间感和真实感得以增强,还加入了S3的纹理压缩技术。
同时,DirectX5.0在其它各组件方面也有加强,在声卡、游戏控制器方面均做了改进,支持了更多的设备。
因此,DirectX发展到DirectX5.0才真正走向了成熟。
此时的DirectX性能完全不逊色于其它3DAPI,而且大有后来居上之势。
DirectX6.0
DirectX6.0推出时,其最大的竞争对手之一Glide,已逐步走向了没落,而DirectX则得到了大多数厂商的认可。
DirectX6.0中加入了双线性过滤、三线性过滤等优化3D图像质量的技术,游戏中的3D技术逐渐走入成熟阶段。
DirectX7.0
DirectX7.0最大的特色就是支持T&L,中文名称是“坐标转换和光源”。
3D游戏中的任何一个物体都有一个坐标,当此物体运动时,它的坐标发生变化,这指的就是坐标转换;3D游戏中除了场景+物体还需要灯光,没有灯光就没有3D物体的表现,无论是实时3D游戏还是3D影像渲染,加上灯光的3D渲染是最消耗资源的。
虽然OpenGL中已有相关技术,但此前从未在民用级硬件中出现。
在T&L问世之前,位置转换和灯光都需要CPU来计算,CPU速度越快,游戏表现越流畅。
使用了T&L功能后,这两种效果的计算用显示卡的GPU来计算,这样就可以把CPU从繁忙的劳动中解脱出来。
换句话说,拥有T&L显示卡,使用DirectX7.0,即使没有高速的CPU,同样能流畅的跑3D游戏。
DirectX8.0
DirectX8.0的推出引发了一场显卡革命,它首次引入了“像素渲染”概念,同时具备像素渲染引擎(PixelShader)与顶点渲染引擎(VertexShader),反映在特效上就是动态光影效果。
同硬件T&L仅仅实现的固定光影转换相比,VS和PS单元的灵活性更大,它使GPU真正成为了可编程的处理器。
这意味着程序员可通过它们实现3D场景构建的难度大大降低。
通过VS和PS的渲染,可以很容易的宁造出真实的水面动态波纹光影效果。
此时DirectX的权威地位终于建成。
DirectX9.0
2002年底,微软发布DirectX9.0。
DirectX9中PS单元的渲染精度已达到浮点精度,传统的硬件T&L单元也被取消。
全新的VertexShader(顶点着色引擎)编程将比以前复杂得多,新的VertexShader标准增加了流程控制,更多的常量,每个程序的着色指令增加到了1024条。
PS2.0具备完全可编程的架构,能对纹理效果即时演算、动态纹理贴图,还不占用显存,理论上对材质贴图的分辨率的精度提高无限多;另外PS1.4只能支持28个硬件指令,同时操作6个材质,而PS2.0却可以支持160个硬件指令,同时操作16个材质数量,新的高精度浮点数据规格可以使用多重纹理贴图,可操作的指令数可以任意长,电影级别的显示效果轻而易举的实现。
VS2.0通过增加Vertex程序的灵活性,显著的提高了老版本(DirectX8)的VS性能,新的控制指令,可以用通用的程序代替以前专用的单独着色程序,效率提高许多倍;增加循环操作指令,减少工作时间,提高处理效率;扩展着色指令个数,从128个提升到256个。
增加对浮点数据的处理功能,以前只能对整数进行处理,这样提高渲染精度,使最终处理的色彩格式达到电影级别。
突破了以前限制PC图形图象质量在数学上的精度障碍,它的每条渲染流水线都升级为128位浮点颜色,让游戏程序设计师们更容易更轻松的创造出更漂亮的效果,让程序员编程更容易。
DirectX9.0c
与过去的DirectX9.0b和ShaderModel2.0相比较,DirectX9.0c最大的改进,便是引入了对ShaderModel3.0(包括PixelShader3.0和VertexShader3.0两个着色语言规范)的全面支持。
举例来说,DirectX9.0b的ShaderModel2.0所支持的VertexShader最大指令数仅为256个,PixelShader最大指令数更是只有96个。
而在最新的ShaderModel3.0中,VertexShader和PixelShader的最大指令数都大幅上升至65535个,全新的动态程序流控制、位移贴图、多渲染目标(MRT)、次表面散射Subsurfacescattering、柔和阴影Softshadows、环境和地面阴影Environmentalandgroundshadows、全局照明(Globalillumination)等新技术特性,使得GeForce6、GeForce7系列以及RadeonX1000系列立刻为新一代游戏以及具备无比真实感、幻想般的复杂的数字世界和逼真的角色在影视品质的环境中活动提供强大动力。
因此DirectX9.0c和ShaderModel3.0标准的推出,可以说是DirectX发展历程中的重要转折点。
在DirectX9.0c中,ShaderModel3.0除了取消指令数限制和加入位移贴图等新特性之外,更多的特性都是在解决游戏的执行效率和品质上下功夫,ShaderModel3.0诞生之后,人们对待游戏的态度也开始从过去单纯地追求速度,转变到游戏画质和运行速度两者兼顾。
因此ShaderModel3.0对游戏产业的影响可谓深远。
DirectX是一种图形应用程序接口(API),简单的说它是一个辅助软件,一个提高系统性能的加速软件,由微软创建开发的,微软将定义它为“硬件设备无关性”。
Direct是直接的意思,X是很多东西,加在一起就是一组具有共性的东西,从内部原理探讨,也简单说来DirectX就是一系列的DLL(动态连接库),通过这些DLL,开发者可以在无视于设备差异的情况下访问底层的硬件,DirectX封装了一些COM(ComponentObjectModel)对象,这些COM对象为访问系统硬件提供了一个主要的接口。
大家想必都知道微软的XPSP2补丁Build2126中已经集成了版本为4.09.0000.0904的DirectX9.0c。
现在国外已经有爱好者将DirectX9.0c分离了出来。
并在futuremark的论坛中公布了出来。
包括一个主程序和两个修正补丁。
使用XP系统的读者可以尝鲜了。
注:
一般来说,安装高版本DirectX之后是就不大好再安装低版本了——DirectX的卸载对于一些网友来说还不是个容易的事咯,所以请大家慎用。
点击进入下载页面
DirectX是一种应用程序接口(API),它可让以windows为平台的游戏或多媒体程序获得更高的执行效率,加强3d图形和声音效果,并提供设计人员一个共同的硬件驱动标准,让游戏开发者不必为每一品牌的硬件来写不同的驱动程序,也降低用户安装及设置硬件的复杂度。
这样说是不是有点不太明白,其实从字面意义上说,Direct就是直接的意思,而后边的X则代表了很多的意思,从这一点上我们就可以看出DirectX的出现就是为了为众多软件提供直接服务的。
举个例子吧,骨灰级玩家(玩游戏比较长的)以前在DOS下玩游戏时,可不像我们现在,安装上就可以玩了,他们往往首先要先设置声卡的品牌和型号,然后还要设置IRQ(中断)、I/O(输入于输出)、DMA(存取模式),如果哪项设置的不对,那么游戏声音就发不出来。
这部分的设置不仅让玩家伤透脑筋,而且对游戏开发者来说就更头痛了,因为为了让游戏能够在众多电脑中正确运行,开发者必须在游戏制作之初,便需要把市面上所有声卡硬件数据都收集过来,然后根据不同的API(应用编程接口)来写不同的驱动程序,这对于游戏制作公司来说,是很难完成的,所以说在当时多媒体游戏很少。
微软正是看到了这个问题,为众厂家推出了一个共同的应用程序接口——DirectX,只要这个游戏是依照Directx来开发的,不管你是什么显卡、声卡、统统都能玩,而且还能发挥更佳的效果。
当然,前提是你的显卡、声卡的驱动程序也必须支持DirectX才行。
DirectX是由很多API组成的,按照性质分类,可以分为四大部分,显示部分、声音部分、输入部分和网络部分。
显示部分担任图形处理的关键,分为DirectDraw(DDraw)和Direct3D(D3D),前者主要负责2D图像加速。
它包括很多方面:
我们播放mpg、DVD电影、看图、玩小游戏等等都是用的DDraw,你可以把它理解成所有划线的部分都是用的DDraw。
后者则主要负责3D效果的显示,比如CS中的场景和人物、FIFA中的人物等等,都是使用了DirectX的Direct3D。
声音部分中最主要的API是DirectSound,除了播放声音和处理混音之外,还加强了3d音效,并提供了录音功能。
我们前面所举的声卡兼容的例子,就是利用了DirectSound来解决的。
输入部分DirectInput可以支持很多的游戏输入设备,它能够让这些设备充分发挥最佳状态和全部功能。
除了键盘和鼠标之外还可以连接手柄、摇杆、模拟器等。
网络部分DirectPlay主要就是为了具有网络功能游戏而开发的,提供了多种连接方式,TPC/IP,IPX,Modem,串口等等,让玩家可以用各种连网方式来进行对战,此外也提供网络对话功能及保密措施。
DirectX并不是一个单纯的图形API,它是由微软公司开发的用途广泛的API,它包含有DirectGraphics(Direct3D+DirectDraw)、DirectInput、DirectPlay、DirectSound、DirectShow、DirectSetup、DirectMediaObjects等多个组件,它提供了一整套的多媒体接口方案。
只是其在3D图形方面的优秀表现,让它的其它方面显得暗淡无光。
DirectX开发之初是为了弥补Windows3.1系统对图形、声音处理能力的不足,而今已发展成为对整个多媒体系统的各个方面都有决定性影响的接口。
DirectX是一组低级“应用程序编程接口(API)”,可为Windows程序提供高性能的硬件加速多媒体支持。
Windows支持DirectX8.0,它能增强计算机的多媒体功能。
使用DirectX可访问显卡与声卡的功能,从而使程序可提供逼真的三维(3D)图形与令人如醉如痴的音乐与声音效果。
DirectX使程序能够轻松确定计算机的硬件性能,然后设置与之匹配的程序参数。
该程序使得多媒体软件程序能够在基于Windows的具有DirectX兼容硬件与驱动程序的计算机上运行,同时可确保多媒体程序能够充分利用高性能硬件。
DirectX包含一组API,通过它能访问高性能硬件的高级功能,如三维图形加速芯片和声卡。
这些API控制低级功能(其中包括二维(2D)图形加速)、支持输入设备(如游戏杆、键盘和鼠标)并控制着混音及声音输出。
构成DirectX的下列组件支持低级功能:
Mi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编程入门DirectX 90 学习笔记 编程 入门 DirectX 学习 笔记