已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
内容摘自DirectX 9.0 3D游戏开发编程基础章节一1.必备数学知识二1.初始化Direct3D2.(固定)绘制流水线3.Direct3D中的绘制4.颜色5.光照6.纹理映射7.融合技术8.模板三9.字体10.网格(一)11.网格(二)12.自定义Camera类13.地形绘制14.粒子系统15.拾取四16.着色语言HLSL17.顶点着色器18.像素着色器19.效果框架一1.必备数学知识1.1向量及坐标系选取,D3D中以LH/RH标记左手/右手坐标系。1.2向量运算:数乘 点积-用于计算两个向量的夹角()及判断向量垂直。 叉积-计算与两个向量所在平面垂直的向量,可用于面片法向量的计算。1.3矩阵:在3D图形应用中,常用4X4矩阵和1X4行向量进行运算。 由于多数变换无法用3阶矩阵表示3维变换,因此3D变换中的矩阵为4维矩阵。由于3维坐标空间中点和向量具有相同的表示形式,因此在进行运算时,将点和向量扩展至4D空间时,通过如下形式:表示点(保证能平移变换);以表示向量(防止平移变换)。1.4 3维空间中的变换: 平移矩阵、旋转矩阵、比例变换矩阵1.5平面D3DXPLANE在D3D中存储平面及相应操作。平面定义为满足的所有点的集合,因此可通过平面法向量n和平面上一点表示,在代码中存储n和表示平面;平面可被看做4D向量(n,d)进行变换;当平面被规范化(法向量为单位向量且重新计算d),则为p点到平面的最短有符号距离。1.6射线定义为。射线与平面的相交判定用于拾取的实现。二1. 初始化Direct3D1.1 Direct3D提供了操纵图形设备(通过HAL硬件抽象层)的API。由HAL提供的硬件支持的功能可被D3D接口操作;硬件不支持时由REF设备实现,由D3DDEVTYPE枚举类型成员指定。1.2 D3D中使用COM技术实现编程语言无关及向下兼容特性。在C+编程环境下可将COM组件当做C+类来使用。使用前创建,使用后通过Release清除。在D3D中COM由前缀I标记。1.3 a.表面是D3D存储2D图像数据的像素矩阵。 b.多重采样用枚举量D3DMULTISAMPLE_TYPE标志。 c.像素格式 D3DFORMAT d.内存池 D3DPOOL e.交换链(由多个表面构成),页面置换 f.深度缓存是只含有特定像素深度信息的表面。 g.顶点运算 software/hardware vertex processing 其中硬件运算需要图形卡支持,但可不占用CPU资源(使用GPU?)1.4 设备性能 D3DCAPS9结构的各数据成员用于检测硬件支持。1.5D3D初始化过程: 1.获取接口IDirect3D9指针。用于设备枚举及创建IDirect3DDevice9对象。 2.检查设备性能(D3DCAPS9)3.填充D3DPRESENT_PARAMETERS,创建IDirect3DDevice9对象(该C+对象代表物理硬件设备)。二2.绘制流水线2.1 固定绘制流水线(由CPU实现,区别于顶点/像素着色器)。局部坐标系-世界坐标系-观察坐标系-背面消隐-光照-裁剪-投影-视口坐标系-光栅化观察坐标系:D3DXMatrixLookAtLH/RH D3DTS_VIEW投影:D3DXMatrixPerspectiveFovLH/RH D3DTS_PROJECTION视口变换: D3DVIEWPORT9结构 SetViewport()自动实现变换二3. Direct3D中的绘制3.1顶点缓存/索引缓存是用来存储描述图元(三角形)变量的结构。顶点格式包含各分量需自行定义,可包括顶点坐标、法向量、纹理坐标等。由FVF标记(D3DFVF)描述顶点的组织结构。Create(Vertex/Index)Buffer创建。Lock/Unlock用于访问缓存3.2设置绘制状态,SetRenderState将某个绘制状态设为某状态值。3.3绘制准备: a. SetStreamSource设置数据流入源。 b. SetFVF设置顶点格式 c. SetIndices设置索引缓存3.4在BeginScene/EndScene方法对之间调用绘制准备及DrawPrimitive/DrawIndexedPrimitive二4.颜色4.1 颜色由RGB三元组和融合因子Alpha组成,D3DCOLOR结构用于表示32bits颜色数据。在顶点结构中增加颜色结构可用于对图元进行着色。二5.光照5.1 材质(D3DMATERIAL9)决定了物体在特定光源下表现的颜色。5.2 顶点法线用于确定光线到达表面(顶点)的入射方向。在顶点结构中增加顶点法线向量用于光照计算。通过给定构成三角形图元的三个顶点可求得面片的法向量:可令顶点法向量等于面法向量,或令顶点法向量等于共用顶点的各面法向量的均值。5.3 D3D中光照由三种光的分量构成:环境光(Ambient Light)、漫射光(Diffuse Light)、镜面光(Specular Light)。材质D3DMATERIAL9中的相应项描述了对对应光分量的特定颜色的反射率。5.4 D3D支持三种光源:点光源、方向光、聚光灯。D3DLIGHT9结构表示光源。二6.纹理映射6.1在顶点结构中增加纹理坐标对以实现纹理映射。6.2 纹理通过接口IDirect3DTexture9表示。使用D3DXCreateTextureFromFile从图片文件中创建纹理。使用SetTexture设置。6.3 为减小畸变,需要使用SetSamplerState设置纹理过滤器。放大过滤器、缩小过滤器、多级渐进纹理过滤器(D3DSAMP_MIPFILTER)。二7.融合7.1 融合操作在光栅化运算过程中进行。将当前计算得到的像素(源像素)颜色值与已写入后台缓存的像素(目标像素)颜色值进行合成称为融合。在融合时,首先绘制不需融合的物体,再对融合的物体按到摄像机的深度进行排序,最后按从后向前的顺序进行绘制。其中为分量逐个相乘。融合因子通过SetRenderState设置。7.2 Alpha分量指定了像素的透明度。Alpha分量由Alpha通道描述。Alpha通道显示为灰度图,黑色至白色透明度逐渐减小,黑色为透明;白色为不透明。通过SetTextureStageState指定Alpha来源。7.3 工具DirectX Texture Tool可为图像文件创建Alpha通道。二8.模板8.1 模板缓存是用于获得某种特效的离屏缓存,具有与后台缓存、深度缓存相同的分辨率。模板缓存与深度缓存共享同一个离屏的表面缓冲。8.2 模板测试通过使用模板缓存对像素是否写入后台缓存进行判定,以阻止对后台缓存的特定区域进行绘制。模板测试的表达式为:其中为模板参考值与模板掩码按位与运算;为模板缓存中要进行测试的像素值和模板掩码按位与运算。ComparisonOperation为选定的比较规则。测试通过的像素被写入后台缓存。8.3 模板测试的控制使用SetRenderState设置模板参考值(D3DRS_STENCILREF)、模板掩码(D3DRS_STENCILMASK)、比较运算(D3DRS_STENCILFUNC)。模板缓存也可通过SetRenderState设置在(i,j)位置像素点测试运算后对应模板缓存值的变化方式。8.4 模板应用1.镜面效果(平面镜成像) a. D3DXMatrixReflect创建平面的镜像变换矩阵。 b.绘制过程中镜面被绘制了两次,第二次用于在模板缓存中标记镜面位置,通过融合操作阻止镜面在后台缓存的绘制。 c.成像与镜面的融合;背面消隐2.平面阴影 a. D3DXMatrixShadow创建给定平面和平行光方向/点光源位置的阴影矩阵。 b.使用模板避免二次融合。三9.字体9.1 ID3DXFont接口使用GDI绘制文本。9.2 CD3DFont类(DXSDK根目录下SamplesC+Common),使用D3D绘制简单效果文本。9.3 D3DXCreateText创建文本的3D网格。三10.网格(一)10.1 ID3DXMesh接口用于网格操作。该接口继承自ID3DXBaseMesh(接口继承性),包含一个顶点缓存和一个索引缓存。ID3DXMesh的基本类型为三角形图元。10.2 访问任何类型缓存,应首先调用lock方法,结束访问时调用Unlock方法。10.3 一个网格由多个子集组成,子集是一组可用相同属性(材质、纹理、绘制状态等)绘制的三角形。每个子集具有唯一标识ID,网格中的每个三角形图元具有对应的ID(属性),并被存储于属性缓存。10.4 使用DrawSubset绘制指定子集的所有图元。OptimizeInplace实现对网格的索引和顶点重排(网格优化),提高绘制效率。属性表是优化时使用D3DXMESHOPT_ATTRSORT标记创建的结构,提供对各子集的缓存位置描述。10.6 邻接数组包含每个面片的相邻面片的索引,网格中每个面片都有三个可能的邻接面片。10.7 CloneMesh创建网格的副本。10.8 D3DXCreateMeshFVF等函数可根据给定信息创建空网格对象,即各缓存已分配但值为空,可手工填入网格数据。三11.网格(二)11.1 ID3DXBuffer接口负责将数据存储在一个连续内存块中。获取存储的数据类型时需进行类型转换。11.2 使用3D建模工具(3DS Max、LightWave、Maya等)创建模型并导出至XFILE(.X格式)文件。D3DXLoadMeshFromX将XFILE文件中的网格数据加载至Mesh对象中。通过D3DXMATERIAL(从磁盘图像文件)手工加载网格各子集的纹理数据。D3DXComputeNormals生成网格的顶点法向量(以实现光照)。11.3 ID3DXPMesh接口用于生成渐进网格(功能类似多级渐进纹理)。顶点属性权值决定了在简化过程中顶点被移除的概率;其它接口方法用于手动设置简化/细化的顶点/面片个数。11.4 D3DXComputeBoundingBox/Sphere用于计算给定网格的外接体(球/方盒)。浮点数格式及相等比较三12.自定义Camera类12.1 Camera实现了可根据用户输入作出响应的移动摄像机。摄像机由4个向量进行描述:右向量right,上向量up,观察向量look(前三个向量称为方向向量,为标准正交的逆矩阵=转置矩阵),位置向量position。摄像机具有6个自由度:沿3个轴的平动;绕3个轴的转动。Camera主要用于实现地面移动和飞行模拟行为。12.2 根据给定摄像机向量计算取景变换矩阵(View Matrix)。1.将摄像机平移到世界坐标系原点。2.旋转使向量right、up、look与世界坐标系x、y、z轴重合。摄像机变换时,空间中的物体也要变换以保证摄像机视场不变。12.3 D3DXMatrixRotationAxis计算绕任意轴旋转一定角度的变换矩阵,实现绕3个轴的转动;向量加法实现沿3个轴的平动。三13.地形绘制13.1 高度图的每个存储单元保存对应像素的高度信息,因此灰度图可作为高度图(类比Alpha通道),可通过图像处理软件将高度图保存为RAW格式文件。13.2 地形绘制过程:a.创建地形几何信息b.计算顶点c.计算索引d.纹理映射e.光照计算(原文以人工方式实现,通过计算0,1区间的明暗因子反应光照强度) 使用给定平行光源计算地形明暗。13.3 在地形中移动摄像机13.4 D3DXSplitMesh将较大网格分割为较小网格。三14.粒子系统14.1 定义点精灵(点图元,对比三角形图元的顶点结构定义方式)。通过设置绘制状态控制点精灵的行为(形如D3DRS_POINTXXX的绘制状态)。14.2 粒子系统的组成粒子系统负责更新,显示,创建及杀死粒子。粒子系统的主要成员包括:a.系统的粒子源b.粒子活动范围(外接体)c.粒子的属性列表(全部粒子的属性集合)d.给定时间的顶点缓存存储顶点个数14.3 绘制粒子系统为使CPU与图形卡能够协同工作,首先创建一个容量合理(2000)的顶点缓存,再将该顶点缓存划分为若干片段。由此对每一帧的操作如下:1) 更新所有粒子2) 绘制所有活动粒子(1)若顶点缓存未满:a.使用D3DLOCK_NOOVERWRITE标记锁定片段i b.将(500个)粒子复制到锁定片段i中(2)若顶点缓存已满:a.锁定片段i=0,从顶点缓存起始位置开始 b.用标记D3DLOCK_DISCARD锁定片段i c.将(500个)粒子复制到锁定片段i中 (3)绘制片段i中的粒子 (4)下一个片段,i+三15.拾取15.1 拾取过程a.给定单击的屏幕点s,求出其在投影窗口中的对应点p。(由视口变换矩阵计算)b.计算自坐标原点出发且经过p的射线(拾取射线)。c.将拾取射线与物体变换至相同坐标系。射线变换需要分别对起点(D3DXVec3TransformCoord,W=1)和方向(D3DXVec3TransformNormal,W=0)进行变换。d.进行物体/射线的相交判定。本例中使用外接球进行判定,判定过程如下:由球面方程(p为球面上点,c为圆心,r为半径)和射线方程联立求解关于t的二次方程。根据t0,t1判定射线与球的相交关系。四16.着色语言HLSL着色语言HLSL编写的定制程序(custom programs)可取代固定流水线中某一功能模块,并可在图形卡的GPU中执行,增加了灵活性并提高执行效率。HLSL程序可以一个长字符串的形式出现在应用程序源文件中。但在实际应用中,通过将HLSL代码保存为常规ASCII文本,在程序中动态载入。16.1 HLSL程序结构1)全局变量2)输入和输出结构。:指定变量用途(在底层建立了着色器中变量与硬件寄存器的关联)。3)入口函数。入口函数名称非强制性为Main,但必须包括可接收输入结构的参数,并返回一个输出结构的实例。语法结构形如:OUTPUT Main(INPUT input)16.2 HLSL程序的编译1)D3DXCompileShaderFromFile函数可对文本文件中的着色器程序进行编译。HLSL可指定编译成的着色器版本,生成代码通过ID3DXBuffer接口指针访问,ID3DXConstantTable接口指针用于访问常量表数据。2)着色器使用常量表存储变量,D3D提供ID3DXConstantTable接口用于应用程序设置着色器代码中的变量。GetConstantByName函数根据变量名称获取变量句柄;SetXXX类型函数通过句柄设置着色器变量的值。SetDefaults将变量设为默认值。16.3 变量类型HLSL常规内置变量类型:标量、向量、矩阵、数组、结构体变量前缀static、extern、const、uniform、shared、volatile16.4 关键字DirectX GraphicsDirect3D 9ReferenceHLSL Shader ReferencesVariable Declaration Syntax文档中有类型转换的介绍。16.5 运算符许多HLSL运算在分量级上进行。16.6 用户自定义函数1)函数特性 a.参数总是按值传递 b.不支持递归 c.函数总是内联的16.7 内置函数DirectX GraphicsDirect3D 9ReferenceHLSL Shader ReferencesHLSL Intrinsic Functions四17.顶点着色器四18.像素着色器四19.效果框架一种绘制效果通常由以下部件构成:一个顶点着色器、一个像素着色器、一个需要设置的设备状态列表、一条或多条绘制路径。19.1 一个效果文件中包含一种或多种手法(绘制某些特效的特定方法)。即效果文件为绘制同样的特效提供了一种或多种不同方式,以针对不同的硬
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 售票值班员复试评优考核试卷含答案
- 铁渣处理工风险评估与管理能力考核试卷含答案
- 沼气生产工职业健康技术规程
- 沪科版八年级物理全一册 第一章《运动的世界》单元测试卷及答案
- 揭秘科学实验
- 特训04 二次函数图象性质通关专练-2025-2026学年九年级数学上学期期中期末挑战满分冲刺卷(人教版)(原卷版)
- 《openEuler系统管理与服务部署》课件 -项目四-01-硬盘的分区、格式化与挂载
- 2025贵州凯丽交通旅游投资(集团)有限责任公司招聘工作人员缴费成功人数与招聘岗位人数达不到31比例岗位(截止9月17日1700)笔试历年参考题库附带答案详解
- 2025山东济南市济阳区城市建设投资集团有限公司社会招聘拟录用人员笔试历年参考题库附带答案详解
- 2025福建省漳州市对外贸易有限责任公司招聘劳务派遣人员1人笔试历年参考题库附带答案详解
- 统编版(2024)八年级上册历史第五单元测试卷(含答案)
- 2025年特种设备叉车作业证理论考试笔试试题(附含答案)
- 2025年南昌市消防救援支队水上大队招聘勤务及宣传勤务文员3人笔试考试参考试题及答案解析
- 2025-2026学年北师大版数学九年级上册期末考试模拟试卷
- 航空航天技术:高性能碳纤维复合材料在航天器结构中的应用
- 员工企业归属感培训课件
- 2025云南大理州建设投资(集团)有限公司招聘专业技术人员19人笔试历年典型考点题库附带答案详解试卷2套
- 2026莱商银行校园招聘笔试考试参考题库附答案解析
- 铸造企业环保培训
- 激光注塑技术操作指南
- 进修医生岗前培训
评论
0/150
提交评论