欢迎来到天天文库
浏览记录
ID:38462658
大小:752.00 KB
页数:26页
时间:2019-06-13
《清华大学DirectX游戏编程第4章(全20章)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第4章在Direct3D中绘制图形主要目标:了解Direct3D是如何存储顶点数据和索引数据的。学习如何通过设置渲染状态来对几何物体进行不同的渲染。学习如何在Direct3D中渲染一个场景。学习通过D3DXCreate*函数创建复杂的三维物体。24.1顶点/索引缓冲区顶点缓冲区和索引缓冲区的接口和方法都非常相似,因此将这两个接口放在一起进行讨论。顶点缓冲区就是一块存放顶点数据的连续的内存区域。与顶点缓冲区相似,索引缓冲区是一块用来保存索引信息的连续内存区域。在Direct3D中使用顶点缓冲区和索引缓冲区来保存数据而不通过在内存中开辟数组来保存数据,主
2、要是因为这些数据可以放到显存中。渲染显存中的数据要比渲染系统内存中数据快得多。在程序之中,顶点缓冲区是用IDirect3DVertexBuffer9接口来表示的,而索引缓冲区则用IDirect3DIndexBuffer9接口来表示。34.1.1创建顶点缓冲区和索引缓冲区可以用下面的方法来分别创建顶点缓冲区和索引缓冲区:参见教材P72这两个方法中的大部分参数的意义都是相同的LengthUsageFVFPoolppVertexBufferpSharedHandleFormatppIndexBuffer44.1.1创建顶点缓冲区和索引缓冲区下面的例子创建一
3、个静态的顶点缓冲区,该缓存区域足够容纳8个Vertex类型的顶点:IDirect3DVertexBuffer9*vb;_device->CreateVertexBuffer(8*sizeof(Vertex),0,D3DFVF_XYZ,D3DPOOL_MANAGED,&vb,0);54.1.1创建顶点缓冲区和索引缓冲区下面的代码展示了如何创建一个能够容纳36个16位索引数据的动态索引缓冲区:IDirect3DIndexBuffer9*ib;_device->CreateIndexBuffer(36*sizeof(WORD),D3DUSAGE_DYNAM
4、IC
5、D3DUSAGE_WRITEONLY,D3DFMT_INDEX16,D3DPOOL_DEFAULT,&ib,0);64.1.2访问缓冲区内存要访问顶点缓冲区或者索引缓存区,需要得到指向缓冲区的指针。可以使用Lock方法来得到这个指针,在完成对缓冲区的操作之后还要记得解除对缓冲区的锁定:参见教材P74Lock方法和Unlock方法的参数完全相同。OffsetToLock:从缓冲区开始位置到锁定区域开始位置的偏移量,该参数以字节为单位。SizeToLock:需要锁定缓冲区的大小。74.1.2访问缓冲区内存OffsetToLock和SizeToLoc
6、k两个参数指定了需要锁定的缓冲区的位置和大小,如果两个数都取0的话就代表要锁定整个的缓冲区,如图4.1所示。84.1.3获得顶点缓冲区以及索引缓冲区的相关信息有时候需要得到顶点缓冲区和索引缓冲区的信息,接下来的例子说明了如何得到这些信息:D3DVERTEXBUFFER_DESCvbDescription;_vertexBuffer->GetDesc(&vbDescription);//得到vb信息D3DINDEXBUFFER_DESCibDescription;_indexBuffer->GetDesc(&ibDescription);//得到ib信
7、息D3DVERTEXBUFFER_DESC和D3DINDEXBUFFER_DESC结构的定义如下:typedefstruct_D3DVERTEXBUFFER_DESC{D3DFORMATFormat;D3DRESOURCETYPEType;94.1.3获得顶点缓冲区以及索引缓冲区的相关信息DWORDUsage;D3DPOOLPool;UINTSize;DWORDFVF;}D3DVERTEXBUFFER_DESC;typedefstruct_D3DINDEXBUFFER_DESC{D3DFORMATFormat;D3DRESOURCETYPEType;
8、DWORDUsage;D3DPOOLPool;UINTSize;}D3DINDEXBUFFER_DESC;104.2渲染状态Direct3D封装了各种各样的渲染状态,这些状态决定了如何对几何物体进行渲染。每个渲染状态都有一个默认值,所以只有当不使用默认值时才需要改变这些状态。可以通过下面所示的方法来设置渲染状态:HRESULTIDirect3DDevice9::SetRenderState(D3DRENDERSTATETYPEState,//要改变的状态DWORDValue//状态值);114.3渲染前的准备工作(1)设置数据流来源,并将顶点缓冲区和
9、数据流挂接到一起。实际上就是将几何物体送入渲染管道。(2)设置顶点的格式,在这里主要为后续的渲染操作指定顶点
此文档下载收益归作者所有