首页 Unity 基本图形绘制

Unity 基本图形绘制

举报
开通vip

Unity 基本图形绘制绘制基本图形学习重点:DX基本图元图元绘制学习目的:能够灵活使用各种图元1.图形绘制1.1图元游戏中的模型不管有多复杂,都是有点、线、三角形面拼接起来的。1.图形绘制1.1图元图元(Primitive)是由Direct3D定义的基本的图形表示单位,所有的复杂物体都是由这些基本图元来组合而成的。 图元类型 Direct3D定义 含义 点列集合 D3DPT_POINTLIST 一组点的集合 线列集合 D3DPT_LINELIST 一组线段的集合 线带集合  D3DPT_LINESTRIP 首尾相连的线段的集合...

Unity  基本图形绘制
绘制基本图形学习重点:DX基本图元图元绘制学习目的:能够灵活使用各种图元1.图形绘制1.1图元游戏中的模型不管有多复杂,都是有点、线、三角形面拼接起来的。1.图形绘制1.1图元图元(Primitive)是由Direct3D定义的基本的图形 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示单位,所有的复杂物体都是由这些基本图元来组合而成的。 图元类型 Direct3D定义 含义 点列集合 D3DPT_POINTLIST 一组点的集合 线列集合 D3DPT_LINELIST 一组线段的集合 线带集合  D3DPT_LINESTRIP 首尾相连的线段的集合 三角形列 D3DPT_TRIANGLELIST 一组三角形的集合 三角形带 D3DPT_TRIANGLESTRIP 首尾相连的三角形,有两个顶点重合 三角形扇 D3DPT_TRIANGLEFAN 组成扇形的一组三角形1.图形绘制1.1图元DrawPrimitiveUP是Direct3D提供的基本图元绘制函数之一。HRESULTDrawPrimitiveUP(D3DPRIMITIVETYPEPrimitiveType, //基本图元类型UINTPrimitiveCount //绘制的图元的数量constvoid*pVertexStreamZeroData,//顶点的起始地址UINTVertexStreamZeroStride//每个顶点所占的字节数);点列(POINTLIST)点列由一系列的顶点组成。g_pDevice->DrawPrimitiveUP(D3DPT_POINTLIST,6,数组首地址,sizeof(一个顶点字节数));1.图形绘制1.1图元线列(LINELIST)线列由一系列的线段组成。线带(LINESTRIP)线带由一系列的线段组成,前一个线段的终点是下一条线段的起点。g_pDevice->DrawPrimitiveUP(D3DPT_LINELIST,3,数组首地址,sizeof(一个顶点字节数));g_pDevice->DrawPrimitiveUP(D3DPT_LINESTRIP,5,数组首地址,sizeof(一个顶点字节数));1.图形绘制1.1图元三角形列由一系列的三角形组成。三角形列(TRIANGLELIST)三角形带(TRIANGLESTRIP)三角形带由一系列的三角形组成,除了第一个三角形,其他的三角形只需要输入第三个顶点,这个顶点与前一个三角形中的后两个顶点组成新的三角形。g_pDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST,2,数组首地址,sizeof(一个顶点字节数));g_pDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,4,数组首地址,sizeof(一个顶点字节数));1.图形绘制1.1图元三角形扇(TRIANGLEFAN)三角形扇是以扇形扩展的方式来定义三角形序列的。g_pDevice->DrawPrimitiveUP(D3DPT_TRIANGLEFAN,3,数组首地址,sizeof(一个顶点字节数));1.图形绘制1.2顶点的格式顶点(Vertex)是一切物体的最基本元素,对应着三维空间坐标系中的一个点。在Direct3D中,描述一个点的方法非常丰富灵活,可以通过特殊的组合来描述空间中点的各种属性。Direct3D引入了一个称为灵活顶点格式(FVF:FlexibleVertexFormat)的概念。灵活顶点格式是用来描述顶点属性的一种方法,这种方法可以由自己来定义顶点格式。FVF这种灵活的顶点组织方式使图形绘制中只需要使用顶点必要的组成部分,从而节省了大量的内存带宽和渲染时间。1.图形绘制1.2顶点的格式1.图形绘制1.2顶点的格式Direct3D定义的灵活顶点格式可以是以下类型的组合:如果使用灵活顶点格式,必须以以下顺序来格式化所有的顶点:位置,RHW,混合加权值,顶点法线,反射颜色,纹理坐标集(1-8套)。 值 说明 D3DFVF_DIFFUSE 顶点漫反射颜色值 D3DFVF_NORMAL 顶点格式包含法线向量 D3DFVF_PSIZE 指明绘制顶点的大小 D3DFVF_SPECULAR 顶点镜面反射颜色值 D3DFVF_XYZ 顶点是未经坐标转换的坐标 D3DFVF_XYZRHW 顶点包括经过坐标转换的坐标 D3DFVF_XYZB1….D3DFVF_XYZB5 顶点格式包括用于骨骼动画的定点和顶点对骨骼的权值信息 D3DFVF_XYZW 顶点格式包含经过坐标转换和裁减的定点坐标 D3DFVF_TEX0….D3DFVF_TEX8 顶点格式包括0~8个纹理坐标1.图形绘制1.2顶点的格式顶点格式的数据类型1.图形绘制1.3顶点的定义1.声明一个包含经过转换的坐标和点的颜色#defineD3DFVF_CUSTOMVERTEX(D3DFVF_XYZRHW|D3DFVF_DIFFUSE)StructCUSTOMVERTEX{FLOATx,y,z,rhw;//经过坐标转换的顶点格式DWORDcolor;//顶点漫反射颜色值}2.声明一个顶点的具体坐标,点的法向量坐标,纹理坐标structCUSTOMVERTEX{FLOATx,y,z;FLOATnx,ny,nz;FLOATtu,tv;}; #defineD3DFVF_CUSTOMVERTEX(D3DFVF_XYZ|D3DFVF_NORMAL|D3DFVF_TEX1);1、根据自己的需要定义点格式2、定义完点格式后,必须声明该点格式3、定义顶点例如:1.图形绘制1.3顶点的定义//声明顶点位置和漫反射色数据。CUSTOMVERTEXg_Vertices[]={//xyzrhw漫反射色{100.0f,100.0f,0.0f,1.0f,0xffff0000},{200.0f,100.0f,0.0f,1.0f,0xff00ff00{100.0f,200.0f,0.0f,1.0f,0xff0000ff},{200.0f,200.0f,0.0f,1.0f,0xffffffff},};1、二维图形的绘制,如果以屏幕坐标系定义,顶点的格式必须为D3DFVF_XYZRHW2、若图元为三角形,必须保证顶点的定义顺序为顺时针。DX默认仅渲染顺时针三角形3、若使用的三角形strip图元,仅需保证第一个三角形为顺时针即可。注意点:1.3.1屏幕坐标系定义顶点1.图形绘制1.3顶点的定义1、相对坐标系,以窗口的中心为原点,X轴往右为正,Y轴往上为正,Z轴往里为正。不管窗口宽高,X轴范围为-1~1,Y轴范围为-1~1,Z轴范围为0~1.1、二维图形的绘制,如果以相对坐标系定义,定义的格式必须为D3DFVF_XYZ注意点://声明顶点位置和漫反射色数据。CUSTOMVERTEXg_Vertices[]={//xyz漫反射色{-0.5f,0.5f,0.0f,0xffff0000},{0.5f,0.5f,0.0f,0xff00ff00{-0.5f,-0.5f,0.0f,0xff0000ff},{0.5f,-0.5f,0.0f,0xffffffff},};1.3.2相对坐标系定义顶点1.图形绘制1.4图形绘制g_pDevice->SetFVF(D3DFVF_CUSTOMVERTEX);g_pDevice->DrawPrimitiveUP(D3DPT_TRIANGLEFAN,3,数组首地址,sizeof(一个顶点字节数));绘制函数之前一定要通知显卡所绘制图形的顶点格式图形渲染工作一般都是在函数BeginScene与EndScene之间完成。1.图形绘制1.5顶点缓冲区顶点缓冲区(VertexBuffer)是Direct3D用来保存顶点数据的内存缓冲区。顶点缓冲区可以设置在显卡的显存中、AGP内存中或是在系统内存中。如果指定缓冲区空间分配在显存中,能够大大的提高渲染效率。HRESULTCreateVertexBuffer(UINTLength, //顶点缓冲区的大小,按字节数算DWORDUsage, //顶点缓冲区属性 DWORDFVF, //灵活顶点格式D3DPOOLPool, //顶点缓冲区的内存类型IDirect3DVertexBuffer9**ppVertexBuffer,//顶点缓冲区指针地址HANDLE*pHandle //保留 参数 转速和进给参数表a氧化沟运行参数高温蒸汽处理医疗废物pid参数自整定算法口腔医院集中消毒供应 ,置为0);使用函数CreateVertexBuffer创建一个顶点缓冲区用来保存矩阵顶点值。LPDIRECT3DVERTEXBUFFER9g_pVB=NULL;//要创建的顶点缓冲//其中参数D3DFVF_CUSTOMVERTEX指定的自定义顶点格式if(FAILED(g_pd3dDevice->CreateVertexBuffer(sizeof(Rectangle),0, D3DFVF_CUSTOMVERTEX,D3DPOOL_DEFAULT,&g_pVB,NULL))){returnE_FAIL;}1.图形绘制1.5顶点缓冲区其中,参数Usage用于指定顶点缓冲区的属性,其取值可以设为0或下表中的任意值的组合。 缓冲区属性 说明 D3DUSAGE_DONOTCLIP 禁用裁剪,表示顶点缓冲区中的顶点不进行裁剪,当设置该属性时,渲染状态D3DRS_CLIPPING必须设为FALSE D3DUSAGE_DYNAMIC 使用动态内存 D3DUSAGE_NPATCHES 使用顶点缓冲区绘制N-patches曲线 D3DUSAGE_POINTS 使用顶点缓冲区绘制点 D3DUSAGE_RTPATCHES 使用顶点缓冲区绘制曲线 D3DUSAGE_SOFTWAREPROCESSING 使用软件进行顶点运算,否则使用硬件计算 D3DUSAGE_WRITEONLY 只写属性,不能进行读操作,设置该属性可以提高系统性能1.图形绘制1.5顶点缓冲区参数Pool属于枚举类型D3DPOOL,指定顶点缓冲区资源的内存位置。缓冲区资源内存位置列表 枚举类型POOL值 说明 D3DPOOL_DEFAULT 默认值,顶点缓冲区尽可能存在于显存中 D3DPOOL_MANAGED 由Direct3D自动调度顶点缓冲区内存位置(显存或内存) D3DPOOL_SYSTEMMEM 顶点缓冲区位于内存中 D3DPOOL_SCRATCH 顶点缓冲区位于计算机的临时内存中,这种类型的顶点缓冲区不能直接进行渲染,只能进行内存加锁。拷贝等操作 D3DPOOL_FORCE_DWORD 强制编译为32位,不使用1.图形绘制1.5顶点缓冲区保存顶点到顶点缓冲区需要把顶点的值存入顶点缓冲区之中,常用的方法是使用函数Lock()来获取顶点缓冲区的首地址,并且锁定该缓冲区域仅供当前操作使用。HRESULTIDirect3DVertexBuffer9::Lock(UINTOffsetToLock, //加锁内存起始地址UINTSizeToLock, //加锁内存大小 VOID**ppbData, //返回内存指针地址DWORDFlags //加锁属性);Lock()函数执行结束时,必须使用Unlock()函数对缓冲区解锁。VOID*pRectangle;if(FAILED(g_pVB->Lock(0,sizeof(Rectangle),(void**)&pRectangle,0)))returnE_FAIL;memcpy(pRectangle,Rectangle,sizeof(Rectangle));g_pVB->Unlock();函数memcpy的功能是将创建好的顶点内容复制到顶点缓冲区中。1.图形绘制1.5顶点缓冲区设置资源流Direct3D中提供了函数SetStreamSource将设置好的顶点缓冲区对象绑定到数据流上:HRESULTSetStreamSource(UINTStreamNumber, //渲染数据流序号IDirect3DVertexBuffer9*pStreamData,//进行绑定连接的顶点缓冲区指针UINTOffsetInBytes, //进行绑定连接的渲染数据流的起始位置UINTStride //渲染数据流中一个顶点所占的内存的大小);从顶点缓冲区绘制图形绘制基本图元Direct3D中使用函数IDirect3DDevice9::DrawPrimitive()完成绘制图元。HRESULTDrawPrimitive(D3DPRIMITIVETYPEPrimitiveType, //基本图元类型 UINTStartVertex, //起始顶点 UINTPrimitiveCount //绘制的图元的数量);PrimitiveType指定绘制图元的类型。StartVertex绘制图元时,使用到顶点缓冲区中顶点的起始位置。PrimitiveCount绘制图元的数量。1.图形绘制1.6索引缓冲区在实际的图形绘制中,除了使用顶点缓冲绘制图形外,还可以使用索引缓冲来绘制几何形体。索引缓冲是由用户定义的,它为每个顶点建立索引值,通常用WORD或者DWORD数组来保存这些索引值,渲染图形时,程序按照顶点索引值的指定的顶点顺序绘制图元。使用索引缓冲的意义使用顶点缓冲绘制一个立方体时,需要绘制立方体的6个面,如果使用顶点缓冲绘制绘制由三角带组成的立方体的表面,每一个面都需要4个顶点,那么使用顶点缓冲绘制立方体一共需要24个顶点信息。使用索引缓冲绘制立方体(同样是三角带组成的)时,只需要立方体的各顶点信息,即使用索引缓冲绘制立方体只需要8个顶点。1.图形绘制1.6索引缓冲区绘制一个立方体时,这样的内存空间并不明显,但是,当需要渲染的三角形数量很大时,使用索引数组显然可以节省大量的内存空间。Direct3D渲染流水线也不用对相同的顶点进行重复计算,可以相应的提高图形程序的整体性能。使用索引缓冲进行绘制Direct3D支持通过对应于顶点数组的索引数组绘制三角形,它使用索引缓冲区(IndexBuffer)和顶点缓冲区(VertexBuffer)协作进行绘制。索引缓冲区就是用来存储多边形顶点索引的缓冲区,它指向顶点缓冲区中的顶点位置。1.图形绘制1.6索引缓冲区创建索引缓冲区函数IDirect3DDevice9::CreateIndexBuffer()用于创建索引缓冲区。HRESULTCreateIndexBuffer(UINTLength, //索引缓冲区大小,按字节数计算DWORDUsage, //索引缓冲区属性,和顶点缓冲区相同D3DFORMATFormat,//索引数组的元素格式,可以是16位或32位的格式D3DPOOLPool, //索引缓冲区内存位置IDirect3DIndexBuffer9**ppIndexBuffer, //索引缓冲区指针地址HANDLE*pHandle //保留参数,设为0);填充顶点缓冲区与保存索引值填充索引缓冲区的方法与填充顶点缓冲区的方法相同。//填充索引缓冲区VOID*pIndices;if(FAILED(g_pIB->Lock(0,sizeof(g_Indices),(void**)&pIndices,0)))returnE_FAIL;}memcpy(pIndices,g_Indices,sizeof(g_Indices));g_pIB->Unlock();1.图形绘制1.6索引缓冲区顶点属性设置使用索引缓冲绘制图形时,同样需要先设置灵活顶点格式,并设置各个顶点的值,还需要定义每个顶点所对应的索引数组的值。CUSTOMVERTEXg_Vertices[]={ {50.0f,50.0f,0.5f,1.0f,0xffff0000,},{250.0f,250.0f,0.5f,1.0f,0xff00ff00,}, {50.0f,250.0f,0.5f,1.0f,0xff00ffff,}, {250.0f,50.0f,0.5f,1.0f,0xffffffff,},};//定义正方形4个顶点的索引WORDg_Indices[]={0,1,2,0,3,1};索引数组中的元素表示意义为:数组中第0,1,2个元素与第0,3,1个元素分别构成2个三角形。1.图形绘制1.6索引缓冲区图形绘制使用索引缓冲区绘制图形也需要设置资源流。g_pd3dDevice->SetStreamSource(0,g_pVB,0,sizeof(CUSTOMVERTEX));使用索引缓冲区绘制图形时,需要调用函数IDirect3DDevice9::SetIndices()设置当前绘制的索引数组为它的参数。HRESULTSetIndices(IDirect3DIndexBuffer9*pIndexData //使用的索引缓冲区指针);DrawIndexedPrimitive()函数代替DrawPrimitive()函数绘制基本图元。HRESULTDrawIndexedPrimitive(D3DPRIMITIVETYPEType, //基本图元的类型INTBaseVertexIndex, //顶点缓冲区的起始位置UINTMinIndex, //最小顶点索引UINTNumVertices, //绘制三角形所用到的顶点UINTStartIndex, //索引缓冲区的起始位置UINTPrimitiveCount //绘制的基本图元的数量);释放索引缓冲与释放顶点缓冲一样,在程序结束前需要调用函数Release()释放索引缓冲。小结今天我们主要讲解了2维图形的绘制,并且实现了低效到高效的升级。合理的使用顶点缓冲和索引缓冲能够提高渲染效率。自测习 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 选择题(单选题)1.DrawPrimitive的渲染结果保存于()。A.前台缓冲区 B.后台缓冲区C.顶点缓冲区 D.深度缓冲区判断题2.设定顶点的数值必须与所指定的FVF一一对应。()3.通过指定Lock()函数中的OffsetToLock和SizeToLock参数,可以锁定顶点缓冲区中特定的一块内存区域。()课后作业【作业1】练习使用顶点缓冲模式绘制五角星。【作业2】练习使用索引缓冲绘制一个多行多列的三角形格子END
本文档为【Unity 基本图形绘制】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
xxj7584
暂无简介~
格式:ppt
大小:1MB
软件:PowerPoint
页数:0
分类:建造师考试
上传时间:2020-03-18
浏览量:0