绘制基本图形_第1页
绘制基本图形_第2页
绘制基本图形_第3页
绘制基本图形_第4页
绘制基本图形_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

网络游戏开发

——DirectX第3章绘制基本图形第3章绘制基本图形绘制基本图形索引缓冲顶点缓冲与基本图形绘制

索引缓冲索引缓冲

掌握D3D中的基本图元掌握利用顶点缓冲绘制基本图形掌握利用索引缓冲绘制基本图形3.1绘制基本图形3.1.1图元与顶点1.顶点(Vertices)第3章绘制基本图形在坐标系中,一个三角形两条边相交的点就叫做顶点。可以把所有的图形都看作是由顶点组成。3.1绘制基本图形3.1.1图元与顶点1.顶点(Vertices)第3章绘制基本图形Direct3D中引入了一个灵活顶点格式(FVF:FlexibleVertexFormat)的概念,用来描述顶点信息。Direct3D定义的灵活顶点格式可以是以下类型的组合。FVF格式说明D3DFVF_XYZ包含未经变换的顶点坐标D3DFVF_XYZRHW包含经过变换的顶点坐标D3DFVF_XYZW包含经过变换和裁剪的顶点坐标D3DFVF_XYZB1………D3DFVF_XYZB5包含顶点位置信息和影响顶点变换的权重信息,用于骨骼动画模型中D3DFVF_NORMAL包含法线信息D3DFVF_PSIZE点精灵的大小D3DFVF_DIFFUSE包含漫反射的颜色信息D3DFVF_SPECULAR包含镜面反射的颜色信息D3DFVF_TEX0………D3DFVF_TEX8包含0~8个纹理坐标信息3.1绘制基本图形3.1.1图元与顶点1.顶点(Vertices)第3章绘制基本图形根据Direct3D提供的灵活顶点格式,就可以定义自己的顶点结构体。//自定义顶点格式structCUSTOMVERTEX{FLOATx,y,z,rhw; //经过变换的三维坐标.DWORDcolour; //顶点漫反射颜色.};有了顶点结构之后,还需要用灵活顶点格式来描述它。#defineD3DFVF_CUSTOMVERTEX(D3DFVF_XYZRHW|D3DFVF_DIFFUSE)3.1绘制基本图形3.1.1图元与顶点2.图元第3章绘制基本图形图元(Primitive)是由Direct3D定义的几种基本的图形表示,所有的复杂物体都是由这些基本图元来组合而成的。图元类型Direct3D定义含义点列集合D3DPT_POINTLIST一组点的集合线列集合D3DPT_LINELIST一组线段的集合线带集合

D3DPT_LINESTRIP首尾相连的线段的集合三角形列D3DPT_TRIANGLELIST一组三角形的集合三角形带D3DPT_TRIANGLESTRIP首尾相连的三角形,有两个顶点重合三角形扇D3DPT_TRIANGLEFAN组成扇形的一组三角形3.1绘制基本图形3.1.1图元与顶点2.图元第3章绘制基本图形Direct3D的图元绘制函数IDirect3DDevice9::DrawPrimitive()负责基本图元的绘制。HRESULTDrawPrimitive(D3DPRIMITIVETYPEPrimitiveType, //基本图元类型

UINTStartVertex, //起始顶点

UINTPrimitiveCount //绘制的图元的数量);3.1绘制基本图形3.1.1图元与顶点2.图元第3章绘制基本图形点列由一系列的顶点组成。g_pDevice->DrawPrimitive(D3DPT_POINTLIST,0,6);点列3.1绘制基本图形3.1.1图元与顶点2.图元第3章绘制基本图形线列由一系列的线段组成。g_pDevice->DrawPrimitive(D3DPT_LINELIST,0,3);线列3.1绘制基本图形3.1.1图元与顶点2.图元第3章绘制基本图形线带由一系列的线段组成,前一个线段的终点是下一条线段的起点。g_pDevice->DrawPrimitive(D3DPT_LINESTRIP,0,5);线带3.1绘制基本图形3.1.1图元与顶点2.图元第3章绘制基本图形三角形列由一系列的三角形组成。g_pDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,2);三角形列3.1绘制基本图形3.1.1图元与顶点2.图元第3章绘制基本图形三角形带由一系列的三角形组成,除了第一个三角形,其他的三角形只需要输入第三个顶点,其他两个顶点与前一个三角形重合。g_pDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,4);三角形带3.1绘制基本图形3.1.1图元与顶点2.图元第3章绘制基本图形三角形扇也是由一系列的三角形组成,每两个三角形有两个顶点重合。g_pDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,0,3);三角形扇3.1绘制基本图形3.1.2绘制基本图形第3章绘制基本图形绘制基本图形的过程可以分解为几步顶点设置创建顶点缓冲区保存顶点设置渲染状态图形绘制准备顶点数据3.1绘制基本图形3.1.2绘制基本图形第3章绘制基本图形首先设定顶点结构,并定义灵活顶点格式。//自定义顶点格式structCUSTOMVERTEX{FLOATx,y,z,rhw; //三维坐标.DWORDcolour; //顶点颜色.};#defineD3DFVF_CUSTOMVERTEX(D3DFVF_XYZRHW|D3DFVF_DIFFUSE)顶点设置3.1绘制基本图形3.1.2绘制基本图形第3章绘制基本图形接下来是设置各个顶点的数值,即设定每个顶点的属性值。//设置顶点位置,颜色信息

CUSTOMVERTEXcvVertices[]= { //顶点1红色

{250.0f,100.0f,0.5f,1.0f,D3DCOLOR_XRGB(255,0,0),}, //顶点2绿色

{400.0f,350.0f,0.5f,1.0f,D3DCOLOR_XRGB(0,255,0),}, //顶点3蓝色

{100.0f,350.0f,0.5f,1.0f,D3DCOLOR_XRGB(0,0,255),}, };顶点设置3.1绘制基本图形3.1.2绘制基本图形第3章绘制基本图形顶点缓冲区(VertexBuffer)是Direct3D用来保存顶点数据的内存缓冲区。顶点缓冲区可以在显卡的显存、AGP内存或是在系统内存中,同样大小的数据,从显存中进行渲染的速度明显优于从内存中进行渲染的速度。HRESULTCreateVertexBuffer(UINTLength, //顶点缓冲区的大小,按字节数算

DWORDUsage, //顶点缓冲区属性

DWORDFVF, //灵活顶点格式

D3DPOOLPool, //顶点缓冲区的内存类型

IDirect3DVertexBuffer9**ppVertexBuffer, //顶点缓冲区指针地址

HANDLE*pHandle //保留参数,置为0);创建顶点缓冲区3.1绘制基本图形3.1.2绘制基本图形第3章绘制基本图形参数Usage用于指定顶点缓冲区的属性。创建顶点缓冲区缓冲区属性说明D3DUSAGE_DONOTCLIP禁用裁剪,表示顶点缓冲区中的顶点不进行裁剪,当设置该属性时,渲染状态D3DRS_CLIPPING必须设为FALSED3DUSAGE_DYNAMIC指定顶点缓冲区要求使用动态内存D3DUSAGE_NPATCHES使用顶点缓冲区绘制N-patches曲线D3DUSAGE_POINTS指定顶点缓冲区存储原始点D3DUSAGE_RTPATCHES使用顶点缓冲区绘制高阶图元(high-orderprimitive)D3DUSAGE_SOFTWAREPROCESSING使用软件进行顶点运算,否则使用硬件计算D3DUSAGE_WRITEONLY只写属性,不能进行读操作,设置该属性可以提高系统性能3.1绘制基本图形3.1.2绘制基本图形第3章绘制基本图形参数Pool属于枚举类型D3DPOOL,指定顶点缓冲区资源的内存位置。创建顶点缓冲区枚举类型POOL值说明D3DPOOL_DEFAULT默认值,顶点缓冲区尽可能存在于显存中D3DPOOL_MANAGED由Direct3D的资源管理器自动调度顶点缓冲区内存位置(显存或内存)D3DPOOL_SYSTEMMEM顶点缓冲区位于内存中D3DPOOL_SCRATCH顶点缓冲区位于计算机的临时内存中,这种类型的顶点缓冲区不能直接进行渲染,只能进行内存加锁。拷贝等操作D3DPOOL_FORCE_DWORD强制将此enum编译为32位,无其它意义//创建顶点缓冲g_pDevice->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX), D3DUSAGE_WRITEONLY,D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT,&g_pVertexBuffer,NULL);3.1绘制基本图形3.1.2绘制基本图形第3章绘制基本图形创建了顶点缓冲区之后,需要把顶点的值存入顶点缓冲区之中。。保存顶点//锁定顶点缓冲if(FAILED(g_pVertexBuffer->Lock(0,sizeof(cvVertices), (void**)&pVertices,0))){ returnE_FAIL;}//拷贝顶点信息memcpy(pVertices,cvVertices,sizeof(cvVertices));//解锁g_pVertexBuffer->Unlock();3.1绘制基本图形3.1.2绘制基本图形第3章绘制基本图形在进行图形绘制之前,需要指定Direct3D的渲染状态,Direct3D提供了多种渲染状态,它影响几何体如何被渲染。设置渲染状态HRESULTSetRenderState(D3DRENDERSTATETYPEState,DWORDValue);g_pDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);3.1绘制基本图形3.1.2绘制基本图形第3章绘制基本图形最后,就可以使用Direct3D设备接口来完成图形绘制工作。图形渲染//绘制三角形g_pDevice->SetStreamSource(0,g_pVertexBuffer,0, sizeof(CUSTOMVERTEX));g_pDevice->SetFVF(D3DFVF_CUSTOMVERTEX);g_pDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,1);3.2索引缓冲3.2.1使用索引缓冲(IndexBuffer)的意义第3章绘制基本图形在Direct3D里,使用顶点来绘制图形,在渲染时Direct3D会对每个顶点都进行计算。Direct3D绘制的图形最小单位是三角形,其他所有的图形都由三角形面构成,这样必然会出现重复的顶点,从而导致系统资源的浪费。3.2索引缓冲3.2.2在Direct3D中如何使用索引缓冲第3章绘制基本图形Direct3D支持通过对应于顶点数组的索引数组绘制三角形,它使用索引缓冲区(IndexBuffer)和顶点缓冲区(VertexBuffer)共同进行绘制。使用索引缓冲的步骤与使用顶点缓冲区基本相同。顶点准备设置渲染状态顶点索引准备顶点缓冲准备填充索引缓冲填充顶点缓冲图形绘制3.2索引缓冲3.2.2在Direct3D中如何使用索引缓冲第3章绘制基本图形顶点准备阶段,首先设置顶点的灵活顶点格式,填充数据。接着,设置顶点索引的值,即由哪几个顶点组成一个三角形。顶点准备//定义正方形4个顶点的索引WORDg_Indices[]={0,1,2,0,3,1};3.2索引缓冲3.2.2在Direct3D中如何使用索引缓冲第3章绘制基本图形然后,创建顶点缓冲区并填充顶点缓冲区。接着,创建索引缓冲区并填充索引缓冲区。顶点准备//创建索引缓冲区LPDIRECT3DINDEXBUFFER9g_pIB =NULL;if(FAILED(g_pDevice->CreateIndexBuffer(6*sizeof(WORD),0,D3DFMT_INDEX16,D3DPOOL_DEFAULT,&g_pIB,NULL))){returnE_FAIL;}3.2索引缓冲3.2.2在Direct3D中如何使用索引缓冲第3章绘制基本图形函数IDirect3DDevice9::CreateIndexBuffer()用于创建索引缓冲区。顶点准备HRESULTCreateIndexBuffer(UINTLength, //索引缓冲区大小,按字节数计算

DWORDUsage, //索引缓冲区属性,和顶点缓冲区相同

D3DFORMATFormat,//索引数组的元素格式,可以是16位或32位的格式

D3DPOOLPool, //索引缓冲区内存位置

IDirect3DIndexBuffer9**ppIndexBuffer, //索引缓冲区指针地址

HANDLE*pHandle //保留参数,设为0);3.2索引缓冲3.2.2在Direct3D中如何使用索引缓冲第3章绘制基本图形同样使用内存拷贝的方式填充索引缓冲区。顶点准备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();3.2索引缓冲3.2.2在Direct3D中如何使用索引缓冲第3章绘制基本图形在图形绘制阶段,需要指定使用索引缓冲的方式绘制。图形绘制g_pDevice->SetStreamSource(0,g_pVB,0,sizeof(CUSTOMVERTEX));g_pDevice->SetFVF(D3DFVF_CUSTOMVERTEX);g_pDevice->SetIndices(g_pIB);g_pDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,4,0,2);

小结(理论课)第3章绘制基本图形使用顶点缓冲绘制基本图形使用索引缓冲绘制基本图形小测验(题目部

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论