




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
DirectX考点归纳 gogoda的专栏Direct3D游戏编程入门教程第2版考点归纳试卷的考题类型有:单选题、多选题、名词解释/简答题、分析题等。第01章Direct3D/DirectX历史DirectX8有哪些新特性:1 Point spite(点精灵)2 3D体纹理3对direct3DX库的改进4 N-patches 5顶点shader和像素shader Point spite可以生成:火花、爆炸、雨、雪等效果。3D体纹理可以完成:光照效果、点光、聚光效果、大气效果。DirectX8实用库增强的DirectX7的辅助功能:1枚举设备配置2设置一个设备3统一处理全屏模式或窗口模式4处理调整大小的操作5向量和矩阵的计算操作6简化图像文件的加载和纹理的创建7绘制简单的形状、精灵和立方体贴图(cube map)。DirectX8提供的新的功能:1、蒙皮网格(skinned mesh)2、多分辨率的细节级别(Level-Of-Detail,LOD)几何体3、.X文件的高阶表面数据(higher-order surface data)支持4、N-patches(可以在图形卡的帮助下提高模型的精度,即传入一个低精度多边形模型数据,完成镶嵌操作(加入更多的多边形)DirectX8.0支持的shader:顶点shader标准vs_1_1和像素shader标准ps_1_1 DirectX8.1支持的shader:像素shader标准ps_1_2、ps_1_3、ps_1_4 DirectX9支持的shader:像素shader标准ps_2_0、ps_2_x、ps_2_a、ps_3_0 DirectX9引入了:HLSL(High-Level Shader Language)剪裁测试(scissor test)行抗锯齿(line anti-aliasing)球形映射texgen双面模板(two-sided stencil),允许给封闭几何体添加阴影体(shadow volume)多重渲染目标(multiple render target)的渲染能力(G-buffer)多重元素纹理(multi-element texture)位移贴图(displacement map)24位颜色精度支持根据监视器gamma支持来改变gamma值片断颜色(fragment color)-剪裁测试-alpha测试第02章HAL和COM概述HAL(Hardware Abstraction Layer,硬件抽象层)HAL和COM技术使Direct3D能在不同硬件上发挥最快速度的同时,具有一个通用的接口和向后兼容的能力:1具备一致的API才有生存力2若硬件不支持Direct3D所要求的一些特性,应有一种相对低效的机制来保证程序能继续运行3接口的变革应尽可能降低程序员学习新接口难度所有使用早期DirectX版本开发的游戏都保证能在将来的DirectX版本下运行游戏根据HAL所提供的特性来开启或关闭相应的特征,过程如下:1游戏检查HAL的能力;2游戏适当地开启或关闭某些特征;3若某些特征被关闭,便会以一种低效的方法来实现,可能是模拟某个特征。这通常会导致图像质量降低。Dircet3D使用HAL通过DDI(Device Driver Interface,设备驱动接口)来访问图形硬件。要检查DDI的版本,可运行DirectX Diagnostic Tool(DirectX诊断工具)HAL支持硬件加速的光栅化、硬/软件顶点处理。HAL有4种不同的顶点处理方法:SW VP(软件顶点处理D3DCREATE_SOFTWARE_VERTEXPROCESSING)Mixed VP(混合顶点处理D3DCREATE_MIXED_VERTEXPROCESSING)HW VP(硬件顶点处理D3DCREATE_HARDWARE_VERTEXPROCESSING)Pure VP(纯顶点处理D3DCREATE_PURE_DEVICE)注册一个插件式软件设备的函数是:IDirect3D9:RegisterSoftwareDevice COM的优点:1、COM接口永远不会改变(永远无法通过任何方式修改);2、COM是独立于语言的(language-independent);3、只能访问一个COM组件的方法,而不是它的数据。COM是一种基于二进制(binary-based)的编程模型使用顶点着色器的步骤1.编写和编译顶点着色器2.创建一个IDircet3DVertexShader接口来代表基于编译过后的着色器代码的着色器3.用IDirect3DDevice9:SetVertextShader方法开启这个顶点着色器第03章编程约定为了编译DirectX程序,必须导入下列程序库:1、d3dx9.lib 2、d3dxof.lib 3、d3d9.lib 4、winmm.lib 5、dxguid.lib注意点:1、Direct3D运行时COM对象和DLL必须由Windows注册和加载。DirectX安装程序会为你做这件事;2、必须在Windows项目中包含先前提及的库,才能正确链接到所调用的包装方法;3、必须在源文件和IDE的包含路径条目表格中都包含正确的头文件。LPDIRECT3D9:IDirect3D9接口指针Direct3DCreate9():创建一个IDirect3D9的COM对象,并从中获取一个接口指针命名约定中的前缀和类型:P19 OutputDebugString()函数是一个调试辅助函数,可以在程序运行期间将调试信息输出到IDE的调试窗口中。DirectX 9.0 SDK提供的宏SUCCEEDED()和FAILED()可以简化检查返回码的工作。并不是所有方法都会在成功后返回S_OK,所以不要试图将HRESULT与S_OK进行比较判断。若没有什么需要做的,一个函数可能会返回S_FALSE来表示它什么都没做。第04章3D基础、Gouraud着色、纹理映射基础在默认情况下,Direct3D引擎使用左手坐标系。x:宽度,y:高度,z:深度创建一个顶点结构,包含位置、漫反射、法线、顶点坐标信息:typedef StructD3DVECTOR3 vPosition;/位置DWORD dwDidiffuse;/漫反射D3DVECTOR3 vNormal;/法线FLOAT u,v;/纹理坐标MYVERTEX;创建一个顶点结构,包含位置、纹理、法线信息:typedef Struct VertexD3DVECTOR3 vPosition;/位置D3DVECTOR3 vTexture;/纹理D3DVECTOR3 vNormal;/法线MYVERTEX;描述一个物体的朝向需要至少4个向量(LOOK、UP、RIGHT、POSITION):LOOK:定义了物体所指的方向;若要飞机横滚(roll),则需将其绕着LOOK向量旋转UP:表示那个方向对于物体来说是上或下;若要改变飞机所面对的方向(yaw:航向、偏航),则需将其绕着UP向量旋转RIGHT:定义物体右侧指向;若要改变飞机的俯仰度(pitch),则需将其绕着RIGHT向量旋转POSITION:定义物体的位置;要使物体沿着LOOK向量方向移动,则需改变POSITION向量。任何3D物体都是由面构成。所有模型和3D世界都可被分解为:点、线和三角形。一个由若干三角形构成的物体称为:网格(mesh)。注意:Direct3D会剔除背面。这种背面剔除(Backface Culling)特性可删除所有背对着观看者或照相机的三角形,即那些在默认情况下按逆时针次序的顶点构成的三角形。平均而言,在任何特定时刻,游戏世界中的一半三角形是背对着照相机的,因此利用该特性有助于缩短渲染时间。根据要渲染的对象不同,有时可以用D3DCULL_NONE标志来关闭背面剔除。为了进行背面剔除,需要计算一个三角形两条边的夹积,夹积结果是一个平面(由三角形的那两条边构成)垂直的向量,该向量就是平面的面法线,它的方向决定了这个三角形是面朝照相机的还是背向照相机的。多边形:指至少由3个顶点定义的n边封闭形状。最简单的多边形就是三角形。法线是垂直于面的向量,可用于定义一个面的朝向或可见侧。顶点法线垂直于一个面,并且位于顶点之上,具有一个单位的长度,顶点法线被用于Gouraud着色。面法线垂直于面,并且位于面的中央。面法线经常被用于Flat着色。着色是进行光照计算并根据计算结果确定像素颜色的过程。这些像素颜色稍后将用于在屏幕上表示物体(更专业地说,着色是光栅器对像素进行上色的方法)。Flat着色是对每一个面进行着色,也就意味着将使用位于三角形中央的面法线来计算光照。Gouraud着色用顶点法线计算,效果更光滑,这是因为顶点法线的方向随着顶点的不同而不同。Gouraud着色是Direct3D中的默认模式。纹理坐标空间中,u表示水平方向,v表示垂直方向。一个典型的顶点结构,由位置向量、RHW(Reciprocal of Homogeneous W,齐次W的倒数)、纹理的tu、tv坐标组成。Struct VertexFLOAT x,y,z,rhw;/2D顶点坐标FLOAT tu,t v;/纹理坐标第05章基础CD3DApplication ConfirmDevice()方法是最先被执行的,它用于检查显卡的能力。以下代码的作用?答:用于检查显卡是否支持1.1版的顶点shader。HRESULT CMyD3DApplication:ConfirmDevice(D3DCAPS9*pCaps,/DWORD dwBehavior,/D3DFORMAT adapterFormat,/D3DFORMAT backBufferFormat/同显示的像素格式)/检查硬件是否支持顶点shader If(dwBehavior&D3DCREATE_HARDWARE_VERTEXPROCESSING)|(dwBehavior&D3DCREATE_MIXED_VERTEXPROCESSING)/如果不支持,则采用软件顶点shader If(pCaps-VertexShaderVersion D3DVS_VERSION(1,1)return E_FAIL;/一个错误返回值return S_OK;/返回OK状态调用顺序:1、ConfirmDevice()2、OneTimeSceneInit()一次性永久初始化,完成任何一次性的资源分配3、InitDeviceObjects()4、RestoreDeviceObjects()在应用程序运行期间,会循环执行以下函数:FrameMove()用于容纳所有动画相关的代码,包括更新矩阵、纹理坐标、对象坐标以及其他一些根据时间而变化的行为。Render()作为3D渲染的入口点在渲染每一帧时被调用以上2个函数时每个框架应用程序的主循环。FinalCleanup()用于销毁为几何数据分配的内存、删除文件对象等。用户改变窗口大小时,框架将会调用:InvalidateDeviceObjects():当游戏关闭、或用户改变窗口大小、或改变设备,都将调用它。RestoreDeviceObjects()重新创建InvalidateDeviceObjects()所销毁的东西。如果用户通过按F2或点击File-Change Device来更改设备(HAL或REF)的话,框架会调用:InvalidateDeviceObjects()DeleteDeviceObjects()InitDeviceObjects()RestoreDeviceObjects()如果用户退出应用程序,框架会调用:InvalidateDeviceObjects()DeleteDeviceObjects()FinalCleanup():框架最后调用的一个函数。InvalidateDeviceObjects()-RestoreDeviceObjects()是一对相对应的函数。DeleteDeviceObjects()-InitDeviceObjects()是一对相对应的函数。OneTimeSceneInit()-FinalCleanup()是一对相对应的函数。可变(灵活)顶点格式(Flexible vertex format,FVF)用于构造自定义顶点数据。HRESULT IDirect3DDevice9:CreateVertexBuffer(UINT Length,/顶点缓冲区的大小,此数字是顶点结构体大小的倍数DWORD Usage,/顶点缓冲的类型或处理方法,0=通常DWORD FVF,/可变顶点格式D3DPOOL Pool,/指定顶点缓冲要存储的存储器位置(显卡、系统存储器)和管理方式IDirect3DVertexBuffer9*ppVertexBuffer,/顶点缓冲区指针地址HANDLE*pHandle/保留参数,置为0或NULL);FVF描述符标志:D3DFVF_XYZ:包含3D坐标,告知系统游戏引擎没有变换过顶点,要求Direct3D做。D3DFVF_XYZRHW:包含2D坐标,告知系统游戏引擎已对顶点作过了变换,Direct3D不需要再做。D3DFVF_NORMAL:包含法线D3DFVF_DIFFUSE:包含一个漫反射色分量D3DFVF_SPECULAR:包含一个镜面反射色分量D3DFVF_TEX1:包含一个纹理坐标对p41当使用固定功能流水线时,顶点元素和顶点输入寄存器的映射关系是固定的。因此特定的顶点成分(如位置或法线)必然会被放到顶点输入存储器的特定寄存器中去。所以,顶点结构中的各个成分必须要以一种特定的次序来放置,如下所示:1、变换过的/未变换的顶点位置,浮点数x、y、z坐标;2、RHW,齐次w坐标的倒数(仅适用于已变换过的顶点);3、混合(Blending)权重值,为15之间的浮点数;4、顶点法线,浮点数x、y、z构成的法线坐标;5、顶点的点大小;6、漫反射颜色,漫反射的RGBA值;7、镜面反射颜色,镜面反射的RGBA值;8、纹理坐标集合18,浮点数u和v构成的坐标值。例:typedef struct SObjVertexFLOAT x,y,z;/位置FLOAT nx,ny,nz;/法线DWORD diffuse;/漫反射颜色DWORD specular;/镜面反射颜色FLOAT tu,tv;/第1对纹理坐标FLOAT tu2,tv2,tw2;/第2对纹理坐标FLOAT tu3,tv3;/第3对纹理坐标FLOAT tu4,tv4;/第4对纹理坐标SObjVertex;.const DWORD gSObjVertexFVF=(D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_SPECULAR|D3DFVF_NORMAL|D3DFVF _TEX4|D3DFVF _TEXCOORDSIZE2(0)|D3DFVF _TEXCOORDSIZE3(1)|D3DFVF _TEXCOORDSIZE2(2)|D3DFVF _TEXCOORDSIZE2(3)D3DFVF _TEX4表示Direct3D引擎将会使用到4个顶点坐标。D3DFVF _TEXCOORDSIZE*指定了每组纹理坐标的值的个数(2或3)和纹理坐标的次序。比如:第2组纹理坐标由3个浮点值分量组成。在Direct3D8.0中引入了一个资源管理器,专门负责对纹理和几何数据实施统一管理。它可用于管理mipmap、体贴图、立方体贴图、顶点缓冲器和索引缓冲器。在Direct3D中,选择一种管理资源的方法(或定义用于保存资源的存储器类型)称为选择一个池(choosing apool)。在DirectX9中有4种不同类型的池:typedef enum_D3DPOOLD3DPOOL_DEFAULT=0;/资源存储在显卡或AGP存储器中D3DPOOL_MANAGED=1;/托管池,资源存储在显卡或AGP存储器中,/并且留一份拷贝在系统内存中D3DPOOL_SYSTEMMEM=2;/系统池,资源存储在系统内存中,/这种池的优势在于设备丢失后,资源不需要重新创建。D3DPOOL_SCRATCH=3;/临时池,资源存储在系统内存中,/并且当设备丢失后,将无法重新创建它。D3DPOOL_FORCE_DWORD=0x7fffffff;/D3DPOOL;p45对一个资源同一时刻只能锁定1次,那怕第2次锁定是一个非重叠的区域也不行。HRESULT IDirect3DDevice9:Lock(UINT OffsetToLock,/顶点缓冲器的锁定操作的起始偏移量UINT SizeToLock,/锁定区域的大小,为顶点的数量乘以一个顶点的大小/OffsetToLock和SizeToLock都是0时,为整个缓冲VOID*ppbData,/可以读写的缓冲区的指针DWORD Flags/对如何使用顶点缓冲器给出的提示,/=0让驱动程序决定如何对顶点缓冲器的访问如何进行优化);Flags的值:1、D3DLOCK_DISCARD,覆盖顶点缓冲器中的所有位置2、D3DLOCK_READONLY,应用程序不会写入顶点缓冲器3、D3DLOCK_NOOVERWRITE,顶点缓冲器中的数据不会被覆盖4、D3DLOCK_NOSYSLOCK,允许在Lock()期间改变显示模式5、D3DLOCK_NO_DIRTY_UPDATE,对锁定的顶点缓冲器不添加dirty区域IDirect3DDevice9:Lock()和IDirect3DDevice9:Unlock()是一对加锁、解锁函数,对顶点缓冲区的内存操作,必须通过Lock()和Unlock()一起配合来实现。SetStreamSource()函数是用于从一条或多条数据流中装配每个顶点,这些顶点被Direct3D用于流水线的不同处理环节。p46 HRESULT SetStreamSource(UINT StreamNumber,/渲染数据流序号,根据硬件不同,最多可以有16条不同的数据流IDirect3DVertexBuffer9*pStreamData,/进行绑定链接的顶点缓冲区指针,/提供了该流的数据UINT OffsetInBytes,/进行绑定链接的渲染数据流的起始位置(字节计)UINT Stride/渲染数据流中一个顶点所占的内存大小(字节数);SetFVF()声明当前的渲染数据流中的可变顶点格式,DirectX9引入,仅用于固定功能的流水线,如果使用了一个顶点shader,则必须用SetVertexShader()来代替:HRESULT IDirect3DDevice9:SetFVF()(DWORD FVF/渲染数据流中的可变顶点格式);HRESULT IDirect3DDevice9:SetVertexShader()函数用于设置当前的顶点渲染函数:HRESULT IDirect3DDevice9:SetVertexShader(IDirect3DVertexShader9*pShader/要设置的顶点渲染对象,禁用=NULL);如果要禁用顶点渲染,使用标准Direct3D渲染程序,则应将pShader赋值为NULL,并调用IDirect3DDevice9:SetFVF(),设置可变顶点格式。Direct3D图元绘制函数:HRESULT IDirect3DDevice9:DrawPrimitive(D3DPRIMITIVETYPE PrimitiveType,/图元类型UINT StartVertex,/起始点位置UINT PrimitiveCount/图元数目);图元(PrimitiveType)的类型:D3DPT_POINTLIST D3DPT_LINELIST D3DPT_LINESTRIP D3DPT_TRIANGLELIST D3DPT_TRIANGLESTRIP D3DPT_TRIANGLEFAN p52使用一张纹理贴图的步骤:1定义纹理坐标变量2调用CreateTexture()创建纹理3使用SetTexture()设置纹理5使用SetTextureStageState()设置适当的纹理阶段操作6调用SetFVF()7调用SetStreamSource()8调用DrawPrimitive()9释放创建纹理HRESULT IDirect3DDevice9:CreateTexture(UINT Width,/纹理的宽度,以像素表示UINT Height,/纹理的高度,以像素表示UINT Levels,/纹理的多级渐进纹理序列级数DWORD Usage,/纹理的使用方法D3DFORMAT Format,/纹理图形的像素格式D3DPOOL Pool,/顶点缓冲区的内存位置IDirect3DTexture9*ppTexture,/纹理对象接口指针的地址HANDLE*pHandle/保留参数,置为0)HRESULT IDirect3DDevice9:SetTexture(DWORD Stage,/指定关联的纹理序号IDirect3DBaseTexture9*pTexture/纹理接口指针);SetTextureStageState()作用是控制纹理渲染状态,主要用于Direct3D指定纹理颜色与顶点颜色的混合方法。HRESULT IDirect3DDevice9:SetTextureStageState(DWORD Stage,/指定当前设置的贴图纹理层ID D3DTEXTURESTAGESTATETYPE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 面向行业的差异化库存管理模式研究
- 2025年500KV760KV超高压变压器匝和超高压电缆绝缘纸合作协议书
- 让沟通零距离基于RF技术的实时诊疗环境的研究和应用
- 行业领先的客户细分与个性化服务模式
- 2025年碳酸二甲酯合作协议书
- 跨领域工程测绘综合应用案例分享
- 2025年心脏除颤器合作协议书
- 金融科技行业的市场细分与机遇探索研究报告
- 2025年不停电电源(UPS)项目建议书
- 论家长情绪管理对孩子心理健康成长的重要性及实现途径
- 湖南省博物馆介绍
- 中国经皮冠状动脉介入治疗指南
- 建筑工程用界面处理剂应用技术规程
- 2024年下半年软件设计师上午真题试卷
- 清代著名画家郑板桥课件
- 2024年湖北省科技投资集团有限公司招聘笔试参考题库含答案解析
- 八年级上册劳动技术全册教案
- 《骨质疏松指南解读》课件
- 吸氧护理幻灯片课件
- 液压挖掘机工作装置有限元分析
- (人教)部编版五年级下册语文《颜楷书法》教学课件
评论
0/150
提交评论