绘制简单几何体

上传人:飞*** 文档编号:56845104 上传时间:2018-10-16 格式:PPT 页数:31 大小:799KB
返回 下载 相关 举报
绘制简单几何体_第1页
第1页 / 共31页
绘制简单几何体_第2页
第2页 / 共31页
绘制简单几何体_第3页
第3页 / 共31页
绘制简单几何体_第4页
第4页 / 共31页
绘制简单几何体_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《绘制简单几何体》由会员分享,可在线阅读,更多相关《绘制简单几何体(31页珍藏版)》请在金锄头文库上搜索。

1、专题2 绘制简单几何体,抛砖引玉,游戏中逼真的场景、漂亮的人物和华美的服装,在程序中是如何实现的呢? 通过组合一个个基本图元,经过变换后渲染出来的。,麻雀虽小,五脏俱全,D3D程序基本框架 使用顶点缓存绘制三角形 使用索引缓存绘制矩形,D3D程序基本框架,初始化Direct3D程序,1、创建Direct3D对象并得到Direct3D接口:Direct3D开发基于Windows的COM机制.在COM机制里,存在COM对象和接口.COM对象是对实际模型的抽象定义,接口提供了访问COM的一组函数,用户不能直接访问COM对象,必须通过接口函数进行访问.,LPDIRECT3D9 g_pD3D = NUL

2、L; g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);,COM(组件对象模型),所谓COM (Component Object Model):是一种说明如何建立可动态互变组件的规范,此规范提供了为保证能够互操作,客户和组件应遵循的一些二进制和网络标准。通过这种标准将可以在任意两个组件之间进行通信而不用考虑其所处的操作环境是否相同、使用的开发语言是否一致以及是否运行于同一台计算机。例子:家庭影院(TV、DVD、功放、音响)家庭影院就是在不管各种来自于不同制造商硬件组件的情况下,进行操作的。这个系统中的每一个组件实际上都不知道其他的组件是如何构成、如何工作的。,

3、COM优点:1)可以将系统中的组件用新的组件替换掉,以随时进行系统的升级与定制。2)可以在多个应用程序中重复利用同一个组件。3)可以方便地将应用系统扩展到网络环境下。4)COM与语言、平台无关的特性使得所有的程序员均可充分发挥自己的才智与专长编写出组件模块。 5)接口永远不会改变。我们只需要明白:DirectX是基于COM规范的,它已经将组件封装好了,我们只需要通过接口来使用它,而不需要知道它实现的细节。COM接口都有一个前缀I,IDirct3DSurface9表示表面的COM接口。,初始化Direct3D程序,2、获取显示卡设备的显示模式Adapter用于指定使用的显卡序列号 D3DDISP

4、LAYMODE 是存储显卡显示模式的结构struct _D3DDISPLAYMODEUINT Width;/屏幕的宽度UINT Hright;/屏幕的高度UINT RefreshRate;/屏幕的刷新率D3DFORMAT Format;/屏幕显示的像素格式; D3DDISPLAYMODE,HRESULT GetAdapterDisplayMode(UNIT Adapter,D3DDISPLAYMODE *pMode );,初始化Direct3D程序,3、创建Direct3D设备接口,/创建结构用来保存设备的显示模式 D3DPRESENT_PARAMETERS d3dpp; ZeroMemory

5、(,图形显示,图形显示框架,/清除后台缓存内容 g_pD3DDevice-Clear(0,NULL,D3DCLEAR_TARGET,0x00000000, 1.0,0);/开始绘制 g_pD3DDevice-BeginScene();/进行实际的图形绘制工作/结束绘制 g_pD3DDevice-EndScene();/提交后台缓存的内容 g_pD3DDevice-Present(NULL,NULL,NULL,NULL);,使用顶点缓存绘制三角形,1、顶点设置,/自定义顶点格式,struct CUETOMVERTEX FLOAT x,y,z,rhw; #define D3DFVF_CUSTOMV

6、ERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE),CUETOMVERTEX cvVertices = 250.0f,100.0f,0.5f,1.0f,D3DCOLOR_XRGB(255,0,0),400.0f,350.0f,0.5f,1.0f,D3DCOLOR_XRGB(0,255,0),100.0f,350.0f,0.5f,1.0f,D3DCOLOR_XRGB(0,0,255), ;,/设置每个顶点的属性值,2、创建顶点缓存,CreateVertexBuffer方法,HRESULT IDirect3DDevice9:CreateVertexBuffer(UINT

7、Length,DWORD Usage,DWORD FVF,D3DPOOL Pool,IDirect3DVertexBuffer9* ppVertexBuffer,HANDLE* pSharedHandle );,Length 分配给缓存的字节大小。 Usage 指定关于如何使用缓存的一些附加属性。 FVF 存储在顶点缓存中的顶点的灵活顶点格式。 Pool 容纳缓存的内存池。 ppVertexBuffer 用于接收所创建的顶点缓存的指针。 pSharedHandle 没有使用,设置为0。,if(FAILED(g_pD3DDevice-CreateVertexBuffer(3*sizeof(CUE

8、TOMVERTEX),0,D3DFVF_CUSTOMVERTEX,D3DPOOL_DEFAULT,创建一个可容纳3个CUETOMVERTEX类型的顶点的顶点缓存:,3、保存顶点,创建了顶点缓存之后,要把顶点的值存入顶点缓存中。,if(FAILED(g_pVertexBuffer-Lock(0,sizeof(cvVertices),(VOID *),Lock函数和Unlock函数成对使用,用于缓冲区的加锁和解锁。 Lock函数通知Direct3D将要对顶点缓存进行内存操作,并取得顶点缓存的内存指针, Unlock函数通知Direct3D完成顶点缓存的操作。,HRESULT IDirect3DVe

9、rtexBuffer9:Lock(UINT OffsetToLock,UINT SizeToLock,BYTE* ppbData,DWORD Flags );,OffsetToLock 偏移量,以字节为单位,从缓存起始位置到开始锁定位置的距离。 SizeToLock 锁定的字节数。 ppbData 指向被锁定的存储区起始位置的指针。 Flags 该标记描述了怎样锁定内存。它可能是0或者是一些标记中的一个或多个组合。,这两个参数若为0, 则表示锁定整个缓存,4、图形绘制,g_pD3DDevice-SetStreamSource(0,g_pVertexBuffer,0,sizeof(CUETOMV

10、ERTEX); g_pD3DDevice-SetFVF(D3DFVF_CUSTOMVERTEX); g_pD3DDevice-DrawPrimitive(D3DPT_TRIANGLELIST,0,1);,指定数据流输入源 设置顶点格式 绘制图元,指定数据流输入源。将顶点缓存和数据流进行链接,实质上是将几何体的信息传输到绘制流水线中。,HRESULT IDirect3DDevice9:SetStreamSource(/指定数据流,从0开始编号 UINT StreamNumber, /与数据流建立链接的顶点缓存的指针IDirect3DVertexBuffer9* pStreamData,/以字节为

11、单位的偏移量,指定了传输的顶点数据的起始位置UINT OffsetInBytes,/顶点缓存中元素大小,单位为字节UINT Stride);,设置顶点格式。指定后续绘制时使用的顶点格式。,HRESULT SetFVF( DWORD FVF /灵活顶点格式 );,绘制图元。若需要使用索引缓存,则需要对其进行设置。任意时刻只允许使用一个索引缓存。,HRESULT DrawPrimitive(D3DPRIMITIVETYPE PrimitiveType, /绘制的图元类型 UINT StartVertex, /起始顶点的索引 UINT PrimitiveCount /要绘制的图元总数 );,使用索引

12、缓存绘制矩形,用索引来表示矩形,v0,v2,一个矩形由两个三角形组成,/顶点列表 Vertex vertexList4 = v0, v1, v2, v3; /索引列表 WORD indexList6 = 0, 1, 2, /三角形0 3, 2, 1 /三角形1 ;,1、索引设置,struct CUETOMVERTEX FLOAT x,y,z,rhw;DWORD color; ; #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)CUETOMVERTEX g_Vertices = 50.0f,50.0f,0.5f,1.0f,0

13、xffff0000,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, ;WORD g_Indices = 0,1,2,0,3,1;,2、创建索引缓存,保存索引值,LPDIRECT3DINDEXBUFFER9 g_pIB = NULL; /创建索引缓存 if(FAILED(g_pD3DDevice-CreateIndexBuffer(sizeof(g_Indices),0,D3DFMT_INDEX16,D3DPOOL_DEFAULT,IDi

14、rect3DDevice9:CreateIndexBuffer()用于创建索引缓存,HRESULT IDirect3DDevice9:CreateIndexBuffer(UINT Length,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DIndexBuffer9* ppIndexBuffer,HANDLE* pSharedHandle );,Length 分配给缓存的字节大小。 Usage 指定关于如何使用缓存的一些附加属性。 Format 索引数组的元素格式,可以是16位或32位的格式。 Pool 容纳缓存的内存池。 ppIndexB

15、uffer用于接收所创建的索引缓存的指针。 pSharedHandle 没有使用,设置为0。,3、图形绘制,g_pD3DDevice-SetStreamSource(0,g_pVB,0,sizeof(CUETOMVERTEX);g_pD3DDevice-SetFVF(D3DFVF_CUSTOMVERTEX);g_pD3DDevice-SetIndices(g_pIB);g_pD3DDevice-DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,4,0,2);,HRESULT SetIndices(IDirect3DIndexBuffer9 * pIndex

16、Data /使用的索引缓存指针 );,其中,函数SetIndices() 设置后续绘制操作中要使用的索引缓存:,函数DrawIndexedPrimitive用来使用索引缓存绘制图元:,HRESULT IDirect3DDevice9:DrawIndexedPrimitive(D3DPRIMITIVETYPE Type, /绘制的图元类型 INT BaseVertexIndex, /为索引增加的一个基数UINT MinIndex, /本次调用中用到的最小顶点索引UINT NumVertices, /本次调用中将被引用的顶点总数 UINT StartIndex, /从索引缓存中的第几个元素开始绘制图元UINT PrimitiveCount /要绘制的图元总数 );,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 研究报告 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号