ImageVerifierCode 换一换
格式:PPT , 页数:33 ,大小:829KB ,
资源ID:13087231      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/13087231.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(第2章DirectX编程.ppt)为本站上传会员【xrp****65】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

第2章DirectX编程.ppt

1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级二级二级二级二级二级二级二级二级二级二级,第三级,第四级,第五级,*,第,2,章,Direct3D,初始化,主要目标:,了解,Direct3D,与硬件图形设备之间的关系。,了解,Direct3D,中组件对象模型,(COM),所扮演的角色。,学习基本的图形学概念,例如二维图片的存储、页面翻转及深度缓冲等概念。,初始化,Direct3D,。,熟悉本书示例中所使用的程序结构。,2,2.1 Direct3D,体系结构,Direct3D,是一个图形应用程序的底层接口,(API),,通过该接口可以直接使用硬件的,3D,加速性能来渲染三维场景,可以认

2、为,Direct3D,是应用程序和硬件设备之间的一个中间媒介。,图,2.1,展示了应用程序、,Direct3D,和硬件设备之间的层次关系。,Direct3D,不能直接和硬件设备打交道的原因是微型计算机拥有各种各样的显卡,每种显卡的能力都不一样,而且它们对相同功能的实现方式也不一样。,图,2.1,3,2.1.1 REF,设备,如果使用在,Direct3D,中提供了、但是硬件不支持的特性。,Direct3D,提供参考光栅处理功能,(REF),,它使用软件模拟的方法来实现整个,Direct3D,中的,API,。,如果你的显卡不支持,就可以用,REF,设备来实现。只有程序开发者才有必要去深入地了解,R

3、EF,设备,当程序和,DirectX SDK,一起出售时没有必要告诉最终用户需不需要使用,REF,设备。由于,REF,通过软件模拟硬件功能,所以速度很慢,在实际的应用中很少用到。,4,2.1.2 D3D,设备类型,D3DDEVTYPE,D3DDEVTYPE_HAL,由硬件实现功能,D3DEVTYPE_REF,由软件模拟实现功能,D3DDEVTYPE,为枚举类型,硬件初始化后其值为:,5,2.2,组件对象模型,组件对象模型,(Component Object Model,,,COM),使,DirectX,具有了,语言无关性,和,向后兼容性,。,当使用,C+,编写,DirectX,的应用程序的时候

4、许多,COM,组件方法和属性都可以直接调用。在,COM,技术中可以通过特殊的函数或者,COM,组件的某个接口来得到另外一个,COM,组件的接口。,另外,当完成某个接口的操作而需要释放它们的时候,需要用,Release,方法而不是用,delete,操作来完成释放,(,所有的,COM,组件都从一个,IUknown,接口继承,而在,IUknown,接口中已经提供了,Release,方法,),。,6,2.3,预 备 知 识,要了解,Direct3D,的初始化过程,需要熟悉基本的图形学概念和相关的,Direct3D,数据类型。,相关概念和数据类型,,Direct3D,的初始化。,7,2.3.1,表面缓

5、冲区,(Surface),表面缓冲区,(Surface),是像素的矩阵,,Direct3D,主要使用表面缓冲区来存储二维图像的数据。,在图,2.2,中,给出了表面缓冲区相关数据的定义。,Pitch,存储区是一个比表面缓冲区大的存储区域,表面缓冲区是,Pitch,存储区的一部分。,表面缓冲区的宽度和高度以像素为单位,Pitch,存储区以字节为单位,图,2.2,8,2.3.1,表面缓冲区,(Surface),在,Direct3D,中,用,IDirect3DSurface9,接口来表示表面缓冲区。该接口提供了直接对表面缓冲区进行读写的方法,其中主要的几个方法为:,LockRect,通过调用这个方法,

6、可以锁定表面缓冲区并得到一个指向表面缓冲区的指针。在获得表面缓冲区指针后,可以通过指针偏移来读写需要的像素数据。,UnlockRect,通过,LockRect,锁定表面缓冲区后,通过该方法解除对表面缓冲区内存区域的锁定。,GetDesc,填充一个用来描述表面缓冲区数据信息的,D3DSURFACE_DESC,结构,从而获得表面缓冲区的信息。,9,2.3.2,重采样,重采样技术是指通过像素矩阵来描述图像时使图像更加平滑的技术。重采样技术常常用于屏幕抗锯齿操作。采用重采样技术和不采用重采样技术描述图像时的差别。,图,2.3,采用重采样,不采用重采样,10,2.3.2,重采样,D3DMULTISAMP

7、LE_TYPE,包含用来指定重采样级别的枚举值,其主要枚举值包括:,D3DMULTISAMPLE_NONE,不进行重采样。,D3DMULTISAMPLE_1_SAMPLE D3DMULTISAMPLE_16_SAMPLE,指定,16,个不同的重采样级别,每个级别都对应了不同的效果。,本书中的程序基本上都没有用重采样技术,因为,采用重采样技术后将降低程序的执行速度,。如果需要启动重采样技术,要首先调用,IDirect3D9:CheckDeviceMultiSampleType,方法检测显卡是否支持重采样技术,然后设定重采样技术的级别。,11,2.3.3,像素格式,常用的,D3DFORMAT,类型

8、的部分枚举值:,D3DFMT_R8G8B8,指定像素采用,24,位数据格式进行描述。,D3DFMT_X8R8G8B8,指定像素使用该,32,位像素格式。,D3DFMT_A8R8G8B8,指定像素采用该,32,位像素格式。,D3DFMT_A16R16G16B16,指定像素使用该,64,像素格式。,12,2.3.4,存储池,表面缓冲区和其他,Direct3D,资源都可以被放在各式的存储池中,通过,D3DPOOL,类型的枚举值可以指定不同的存储池,目前可以用的存储池主要有:,D3DPOOL_DEFAULT,默认存储池,D3DPOOL_MANAGED,托管存储池,D3DPOOL_SYSTEMMEM,系

9、统存储池,D3DPOOL_SCRATCH,SCRATCH,存储池,13,2.3.5,交换链和页面翻转,Direct3D,维护着一组表面缓冲区,通常有两个或者三个,通常将这组表面缓冲区的组合叫作,交换链,,通过,IDirect3DSwapChain9,可以对交换链进行管理。,交换链,更准确的说法是,页面翻转技术,,主要用途是在播放动画的时候使帧和帧间的交换变得更加流畅。图,2.4,中展示了具有两个表面缓冲区的交换链。,14,2.3.5,交换链和页面翻转,图,2.5,表现了在,Presenting,操作前后的交换链。,渲染图形的代码结构变为:,(1),将显示数据渲染到后缓冲区。,(2),进行,Pr

10、esenting,操作,交换前后缓冲区。,(3)Goto(1),15,2.3.6,深度缓冲区,深度缓冲区也是一个表面缓冲区,但是在深度缓冲区中不是保存图片信息,而是,保存着每个像素点对应的深度信息,。,图,2.6,展示了一个简单的场景,在这里部分物体遮挡了在其后的物体。,Direct3D,中使用深度缓冲,(,也称为,Z,缓冲,),技术来进行,可见面的判断,。,16,2.3.6,深度缓冲区,深度缓冲区的大小格式决定了深度测试的准确性。比如,,24,位的深度缓冲区比,16,位的准确性高。,通常在,24,位的深度缓冲格式下,程序就可以运行得很好,但,Direct3D,还是提供了,32,位的深度缓存区

11、D3DFMT_D32,指定一个,32,位的深度缓存区。,D3DFMT_D24S8,指定一个,24,位的深度缓存区,其中,8,位预定为模板缓存。,D3DFMT_D24X8,指定一个,24,位的深度缓存区。,D3DFMT_D24X4S4,指定一个,24,位的深度缓存区,,4,位作为模板缓存。,D3DFMT_D16,指定一个,16,位的深度缓冲区。,17,2.3.7,顶点处理,顶点是组成,3D,空间的基本元素,在,Direct3D,中对顶点的处理有两种方法,即,软件处理方法,和,硬件处理方法,。,软件顶点处理在任何配置下都是被支持的,并且也都可用;但是硬件顶点处理只有在显卡支持硬件顶点处理的情况

12、下才可以使用。,18,2.3.8,设备性能,Direct3D,提供的所有特性在,D3DCAPS9,结构中都有对应的数据成员或对应位。通过,Direct3D,中的函数初始化并填充一个,D3DCAPS9,结构对象可以获得一个特定硬件的性能参数。,通过检查填充后的,D3DCAPS9,对象中的相关数据,就可以知道硬件设备是否支持,Direct3D,的某个特性。,19,2.4,初始化,Direct3D,Direct3D,的初始化可以分为以下的几个步骤。,(1),获得一个,IDirect3D9,接口指针,该接口用于获得系统图形硬件信息并进而创建,IDirect3DDevice9,接口。,IDirect3D

13、Device9,接口代表了进行图形渲染的硬件设备。,(2),确认设备的性能,(D3DCAPS9),,查看显示设备是否支持硬件顶点处理,根据显示设备的性能创建出合适,IDirect3DDevice9,接口。,(3),初始化一个,D3DPRESENT_PARAMETERS,结构对象,该结构包含了一系列用来指定,IDirect3DDevice9,接口特性的数据成员。,(4),根据,D3DPRESENT_PARAMETERS,对象来创建一个,IDirect3DDevice9,接口。,20,2.4.1,获得,IDirect3D9,接口,初始化,Direct3D,首先要得到一个,IDirect3D9,接口

14、Direct3D,提供了获得,IDirect3D9,接口的专用函数:,IDirect3D9*_d3d9;,_d3d9=Direct3DCreate9(D3D_SDK_VERSION);,IDirect3D9,接口有两个用途:设备枚举以及创建,IDirect3DDevice9,接口。,21,2.4.2,确认硬件顶点处理能力,在确认硬件顶点处理能力的过程中,通过以下程序获得主显示设备的性能并填充,D3DCAPS9,对象:,HRESULT IDirect3D9:GetDeviceCaps(,UINT Adapter,D3DDEVTYPE,DeviceType,D3DCAPS9*,pCaps,);

15、接着可以确认主显示设备的性能,以下为处理代码:,参见教材,P46,22,2.4.3,填充,D3DPRESENT_PARAMETERS,结构,下一步需要填充一个,D3DPRESENT_PARAMETERS,结构。该结构是用来描述需要创建的,IDirect3DDevice9,接口的信息,该结构的定义为:,typedef,struct,_D3DPRESENT_PARAMETERS_,UINT,BackBufferWidth,;,UINT,BackBufferHeight,;,D3DFORMAT,BackBufferFormat,;,UINT,BackBufferCount,;,D3DMULTISA

16、MPLE_TYPE,MultiSampleType,;,DWORD,MultiSampleQuality,;,D3DSWAPEFFECT,SwapEffect,;,HWND,hDeviceWindow,;,BOOL,Windowed;,BOOL,EnableAutoDepthStencil,;,D3DFORMAT,AutoDepthStencilFormat,;,DWORD,Flags;,UINT,FullScreen_RefreshRateInHz,;,UINT,PresentationInterval,;,D3DPRESENT_PARAMETERS;,23,2.4.3,填充,D3DPRES

17、ENT_PARAMETERS,结构,下面是,D3DPRESENT_PARAMETERS,对象的填充实例:,D3DPRESENT_PARAMETERS d3dpp;,d3dpp.BackBufferWidth=800;,d3dpp.BackBufferHeight=600;,d3dpp.BackBufferFormat=D3DFMT_A8R8G8B8;,/,像素格式,d3dpp.BackBufferCount=1;,d3dpp.MultiSampleType=D3DMULTISAMPLE_NONE;,d3dpp.MultiSampleQuality=0;,d3dpp.SwapEffect=D3D

18、SWAPEFFECT_DISCARD;,d3dpp.hDeviceWindow=,hwnd;,/,窗口句柄,d3dpp.Windowed=false;,/,全屏,d3dpp.EnableAutoDepthStencil=true;,d3dpp.AutoDepthStencilFormat=D3DFMT_D24S8;,/,深度缓冲区格式,d3dpp.Flags=0;,d3dpp.FullScreen_RefreshRateInHz=D3DPRESENT_RATE_DEFAULT;,d3dpp.PresentationInterval=D3DPRESENT_INTERVAL_IMMEDIATE;,

19、24,2.4.4,创建一个,IDirect3DDevice9,接口,填写完,D3DPRESENT_PARAMETERS,结构后,即可开始创建,IDirect3DDevice9,接口:,HRESULT IDirect3D9:CreateDevice(,UINT Adapter,D3DDEVTYPE,DeviceType,HWND,hFocusWindow,DWORD,BehaviorFlags,D3DPRESENT_PARAMETERS*,pPresentationParameters,IDirect3DDevice9*,ppReturnedDeviceInterface,);,25,2.4.4

20、创建一个,IDirect3DDevice9,接口,IDirect3DDevice9,接口的创建代码如下:,IDirect3DDevice9*device=0;,hr=d3d9-,CreateDevice,(,D3DADAPTER_DEFAULT,/,主硬件适配器,D3DDEVTYPE_HAL,/,设备类型,hwnd,/,和设备关联的窗口,D3DCREATE_HARDWARE_VERTEXPROCESSING,/,硬件顶点处理类型,&d3dpp,/,描述参数,/,返回的设备,if(FAILED(hr,),:,MessageBox(0,CreateDevice,()-FAILED,0,0);,r

21、eturn,0;,26,2.5,示例:初始化,Direct3D,在本节的例子中,将初始化一个,Direct3D,程序,并且使窗口当前显示的颜色为黑色,(,示例效果见图,2.7),。,本例和该书中其他的所有示例都使用了,d3dUtility.h,和,d3dUtility.cpp,文件中的代码。,27,2.5.1 d3dUtility.h/cpp,文件,首先来观察,d3dUtility.h,文件:,参见教材,P50,EnterMsgLoop,函数里封装了程序的主消息循环。该函数需要获得一个指向渲染函数的函数指针。因为主消息循环需要调用渲染函数来渲染场景。此函数的具体定义如下:,参见教材,P51,c

22、urrTime,、,timeDelta,等关于时间的部分代码主要用于计算两次调用渲染函数间的间隔时间,也就是帧和帧之间的时间间隔。,Release,为模板函数,主要用于使用相同的方法轻松地释放一个,COM,接口。,Delete,为模板函数,能够安全删除指针并释放内存。,WndProc,用于主程序窗口的窗口消息处理循环。,28,2.5.2,程序框架,这,3,个函数并不包括消息处理函数或者,WinMain,函数。这,3,个函数在不同的例子中具有不同的实现,但是完成的功能却基本相同。对这些函数说明如下:,bool,Setup(),该函数用来完成例子所需的所有设置,例如完成资源分配、设备性能检测以及程

23、序状态设置等工作。,void Cleanup(),该函数用于释放,Setup,函数中所分配的资源,例如释放在堆上占用的内存空间。,bool,Display(float,timeDelta,),该函数包含了所有的渲染代码以及那些在每帧之间控制程序的操作代码。,29,2.5.3 D3D,初始化示例,这个例子将创建和初始化一个,Direct3D,应用程序,然后把屏幕渲染成黑色。,程序将从引用“,d3dUtility.h”,头文件和声明一个用于描述设备的全局变量开始:,#include d3dUtility.h,IDirect3DDevice9*Device=0;,然后通过程序的主框架实现整个程序:,

24、bool,Setup(),return true;,void Cleanup(),30,2.5.3 D3D,初始化示例,Display,函数调用了,IDirect3DDevice9:Clear,方法,该函数可以分别把后缓冲区清除为黑色,并将深度缓冲区清除为,1.0,以及模板缓冲区清除为,0,:,参见教材,P53,IDirect3DDevice9:Clear,方法的声明如下:,参见教材,P53,窗口消息处理函数主要处理两个事件,从而允许程序在按,Esc,键后退出程序:,参见教材,P54,最后,,WinMain,执行了下列操作。,(1),初始化主显示窗口和,Direct3D,。,(2),调用,Se

25、tup,函数来设置程序资源。,(3),进入消息循环后使用,Display,函数进行图形渲染。,(4),清理程序,最后释放,IDirect3DDevice9,接口。,31,2.6,小 结,程序员调用,Direct3D,的函数,,Direct3D,通过设备硬件抽象层的接口直接控制硬件执行相应的操作。,REF,设备,(,参考光栅化设备,),允许开发者去实验,Direct3D,提供了但是硬件不支持的性能。,COM,技术的运用使,DirectX,具有语言无关性以及向后兼容性。,表面是一些特殊的,Direct3D,接口,用来保存,2D,图像。,32,2.6,小 结,IDirect3D9,接口用于查询系统所安装的显示设备的信息,通过这个接口,我们能获取设备的性能。它还用于创建,IDirect3DDevice9,接口。,可以认为,IDirect3DDevice9,接口是用于控制图形设备的软件接口。,示例框架用于提供一组能用于本书中所有示例的接口。,d3dUtility.h/cpp,中提供了一些工具代码,封装了每个程序都必须实现的初始化过程。,33,

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服