




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Direct3D体系结构,Direct3D是一个图形应用程序的底层接口(API),通过该接口可以直接使用硬件的3D加速性能来渲染三维场景,可以认为Direct3D是应用程序和硬件设备之间的一个中间媒介。图2.1展示了应用程序、Direct3D和硬件设备之间的层次关系。Direct3D不能直接和硬件设备打交道的原因是微型计算机拥有各种各样的显卡,每种显卡的能力都不一样,而且它们对相同功能的实现方式也不一样。,1,D3D设备类型,在程序里面,硬件抽象层可以用D3DDEVTYPE_HAL标志来指定。D3DDEVTYPE_HAL标志是一个D3DDEVTYPE类型的枚举值。同样,可以通过D3DEVTYPE_REF标志来指定REF设备,D3DEVTYPE_REF也是D3DDEVTYPE类型的枚举值。要记住这些设备类型,因为每次创建设备时都要指定使用的是哪个设备类型。,2,表面缓冲区(Surface),表面缓冲区(Surface)是像素的矩阵,Direct3D主要使用表面缓冲区来存储二维图像的数据。在图2.2中,给出了表面缓冲区相关数据的定义。Pitch存储区是一个比表面缓冲区大的存储区域,表面缓冲区是Pitch存储区的一部分。此外,表面缓冲区的宽度和高度以像素为单位,但Pitch存储区以字节为单位。,3,表面缓冲区(Surface),在Direct3D中,用IDirect3DSurface9接口来表示表面缓冲区。该接口提供了直接对表面缓冲区进行读写的方法,其中主要的几个方法为:LockRect通过调用这个方法,可以锁定表面缓冲区并得到一个指向表面缓冲区的指针。在获得表面缓冲区指针后,可以通过指针偏移来读写需要的像素数据。UnlockRect通过LockRect锁定表面缓冲区后,通过该方法解除对表面缓冲区内存区域的锁定。GetDesc填充一个用来描述表面缓冲区数据信息的D3DSURFACE_DESC结构,从而获得表面缓冲区的信息。,4,重采样,重采样技术是指通过像素矩阵来描述图像时使图像更加平滑的技术。重采样技术常常用于屏幕抗锯齿操作,图2.3显示了采用重采样技术和不采用重采样技术描述图像时的差别。,5,重采样,D3DMULTISAMPLE_TYPE包含用来指定重采样级别的枚举值,其主要枚举值包括:D3DMULTISAMPLE_NONE不进行重采样。D3DMULTISAMPLE_1_SAMPLED3DMULTISAMPLE_16_SAMPLE指定16个不同的重采样级别,每个级别都对应了不同的效果。本书中的程序基本上都没有用重采样技术,因为采用重采样技术后将降低程序的执行速度。如果需要启动重采样技术,要首先调用IDirect3D9:CheckDeviceMultiSampleType方法检测显卡是否支持重采样技术,然后设定重采样技术的级别。,6,像素格式,下面是常用的D3DFORMAT类型的部分枚举值:D3DFMT_R8G8B8指定像素采用24位数据格式进行描述,从左边起,前8位表示红色,中间8位表示绿色,后8位表示蓝色。D3DFMT_X8R8G8B8指定像素使用该32位像素格式,从左边起,第一个8位数据为空闲位,第二个8位数据表示红色,第三个8位数据表示绿色,最后的8位数据表示蓝色。D3DFMT_A8R8G8B8指定像素采用该32位像素格式,从左边起,前8位数据表示Alpha值,第二个8位数据表示红色,第三个8位数据表示绿色,最后一个8位数据表示蓝色。D3DFMT_A16R16G16B16指定像素使用该64像素格式,从左边起,第一个16位数据表示Alpha值,第二个16位数据表示红色,第三个16位数据表示绿色,最后的16位表示蓝色。,7,存储池,表面缓冲区和其他Direct3D资源都可以被放在各式的存储池中,通过D3DPOOL类型的枚举值可以指定不同的存储池,目前可以用的存储池主要有:D3DPOOL_DEFAULT默认存储池D3DPOOL_MANAGED托管存储池D3DPOOL_SYSTEMMEM系统存储池D3DPOOL_SCRATCHSCRATCH存储池,8,交换链和页面翻转,Direct3D维护着一组表面缓冲区,通常有两个或者三个,通常将这组表面缓冲区的组合叫作交换链,通过IDirect3DSwapChain9可以对交换链进行管理。交换链,更准确的说法是页面翻转技术,主要用途是在播放动画的时候使帧和帧间的交换变得更加流畅。图2.4中展示了具有两个表面缓冲区的交换链。,9,交换链和页面翻转,图2.5表现了在Presenting操作前后的交换链。渲染图形的代码结构变为:(1)将显示数据渲染到后缓冲区。(2)进行Presenting操作,交换前后缓冲区。(3)Goto(1),10,深度缓冲区,深度缓冲区也是一个表面缓冲区,但是在深度缓冲区中不是保存图片信息,而是保存着每个像素点对应的深度信息。图2.6展示了一个简单的场景,在这里部分物体遮挡了在其后的物体。Direct3D中使用深度缓冲(也称为Z缓冲)技术来进行可见面的判断。,11,深度缓冲区,深度缓冲区的大小格式决定了深度测试的准确性。比如,24位的深度缓冲区比16位的准确性高。通常在24位的深度缓冲格式下,程序就可以运行得很好,但Direct3D还是提供了32位的深度缓存区:D3DFMT_D32指定一个32位的深度缓存区。D3DFMT_D24S8指定一个24位的深度缓存区,其中8位预定为模板缓存。D3DFMT_D24X8指定一个24位的深度缓存区。D3DFMT_D24X4S4指定一个24位的深度缓存区,4位作为模板缓存。D3DFMT_D16指定一个16位的深度缓冲区。,12,顶点处理,顶点是组成3D空间的基本元素,在Direct3D中对顶点的处理有两种方法,即软件处理方法和硬件处理方法。软件顶点处理在任何配置下都是被支持的,并且也都可用;但是硬件顶点处理只有在显卡支持硬件顶点处理的情况下才可以使用。,13,设备性能,Direct3D提供的所有特性在D3DCAPS9结构中都有对应的数据成员或对应位。通过Direct3D中的函数初始化并填充一个D3DCAPS9结构对象可以获得一个特定硬件的性能参数。通过检查填充后的D3DCAPS9对象中的相关数据,就可以知道硬件设备是否支持Direct3D的某个特性。,14,初始化Direct3D,Direct3D的初始化可以分为以下的几个步骤。(1)获得一个IDirect3D9接口指针,该接口用于获得系统图形硬件信息并进而创建IDirect3DDevice9接口。IDirect3DDevice9接口代表了进行图形渲染的硬件设备。(2)确认设备的性能(D3DCAPS9),查看显示设备是否支持硬件顶点处理,根据显示设备的性能创建出合适IDirect3DDevice9接口。(3)初始化一个D3DPRESENT_PARAMETERS结构对象,该结构包含了一系列用来指定IDirect3DDevice9接口特性的数据成员。(4)根据D3DPRESENT_PARAMETERS对象来创建一个IDirect3DDevice9接口。,15,获得IDirect3D9接口,初始化Direct3D首先要得到一个IDirect3D9接口。通过如下代码就可以获得IDirect3D9接口,Direct3D提供了获得IDirect3D9接口的专用函数:IDirect3D9*_d3d9;_d3d9=Direct3DCreate9(D3D_SDK_VERSION);IDirect3D9接口有两个用途:设备枚举以及创建IDirect3DDevice9接口。,16,确认硬件顶点处理能力,在确认硬件顶点处理能力的过程中,通过以下程序获得主显示设备的性能并填充D3DCAPS9对象:HRESULTIDirect3D9:GetDeviceCaps(UINTAdapter,D3DDEVTYPEDeviceType,D3DCAPS9*pCaps);接着可以来确认主显示设备的性能,以下为处理代码:参见教材P46,17,2.4.3填充D3DPRESENT_PARAMETERS结构,下一步需要填充一个D3DPRESENT_PARAMETERS结构。该结构是用来描述需要创建的IDirect3DDevice9接口的信息,该结构的定义为:typedefstruct_D3DPRESENT_PARAMETERS_UINTBackBufferWidth;UINTBackBufferHeight;D3DFORMATBackBufferFormat;UINTBackBufferCount;D3DMULTISAMPLE_TYPEMultiSampleType;DWORDMultiSampleQuality;D3DSWAPEFFECTSwapEffect;HWNDhDeviceWindow;BOOLWindowed;BOOLEnableAutoDepthStencil;D3DFORMATAutoDepthStencilFormat;DWORDFlags;UINTFullScreen_RefreshRateInHz;UINTPresentationInterval;D3DPRESENT_PARAMETERS;,18,填充D3DPRESENT_PARAMETERS结构,下面是D3DPRESENT_PARAMETERS对象的填充实例:D3DPRESENT_PARAMETERSd3dpp;d3dpp.BackBufferWidth=800;d3dpp.BackBufferHeight=600;d3dpp.BackBufferFormat=D3DFMT_A8R8G8B8;/像素格式d3dpp.BackBufferCount=1;d3dpp.MultiSampleType=D3DMULTISAMPLE_NONE;d3dpp.MultiSampleQuality=0;d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;d3dpp.hDeviceWindow=hwnd;d3dpp.Windowed=false;/fullscreend3dpp.EnableAutoDepthStencil=true;d3dpp.AutoDepthStencilFormat=D3DFMT_D24S8;/深度缓冲区格式d3dpp.Flags=0;d3dpp.FullScreen_RefreshRateInHz=D3DPRESENT_RATE_DEFAULT;d3dpp.PresentationInterval=D3DPRESENT_INTERVAL_IMMEDIATE;,19,创建一个IDirect3DDevice9接口,填写完D3DPRESENT_PARAMETERS结构后,即可开始创建IDirect3DDevice9接口:HRESULTIDirect3D9:CreateDevice(UINTAdapter,D3DDEVTYPEDeviceType,HWNDhFocusWindow,DWORDBehaviorFlags,D3DPRESENT_PARAMETERS*pPresentationParameters,IDirect3DDevice9*ppReturned
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 铜回收炉项目可行性研究报告
- 水性飞机蒙皮涂料项目可行性研究报告
- 防汛知识培训问答课件
- 大型物件运输公司合伙协议书
- FMEA失效模式管理分析
- 2025年聚合工艺理论试题及答案(800题)
- 体育赛事行业品牌推广与商业赞助策略
- 保险征求意见稿 合同7篇
- 办公楼内饰工程承包合同2篇
- 住房租房合同范本3篇
- 产品耐压、绝缘、接地测试报告
- 铁路交通事故调查处理规定-事故调查
- 慢性鼻窦炎鼻息肉护理查房课件
- set2020标准文件编写工具软件使用说明书
- 中小学教师参与学校管理研究论文
- 动叶可调式轴流风机液压调节系统课件
- 标准件与常用件课件
- 报价单(报价单模板)
- 液氧泄漏应急处置的培训与演练
- 沥青路面施工-沥青混合料配合比设计
- UG有限元的分析第12章
评论
0/150
提交评论