几何模型显PPT演示文稿.ppt

上传人:rrsccc 文档编号:8765229 上传时间:2021-01-13 格式:PPT 页数:43 大小:175KB
返回 下载 相关 举报
几何模型显PPT演示文稿.ppt_第1页
第1页 / 共43页
几何模型显PPT演示文稿.ppt_第2页
第2页 / 共43页
几何模型显PPT演示文稿.ppt_第3页
第3页 / 共43页
几何模型显PPT演示文稿.ppt_第4页
第4页 / 共43页
几何模型显PPT演示文稿.ppt_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《几何模型显PPT演示文稿.ppt》由会员分享,可在线阅读,更多相关《几何模型显PPT演示文稿.ppt(43页珍藏版)》请在三一文库上搜索。

1、1,第3章 坐标系与基本图元,2,Direct3D坐标系,在空间几何中,绝大多数情况下使用笛卡尔坐标系为参照系来表示图形,表三维图形时需要使用三维笛卡尔坐标系。三维笛卡尔坐标系根据z坐标轴相对x,y坐标轴方向的不同,可分为左手坐标系和右手坐标系,它们的区别方法是:将右手食指、中指、无名指和小拇指顺着x轴正向到y轴正向旋转的方向,如果大拇指的方向和z轴正向相同,就是右手坐标系,反之就左手坐标系。,3,左手坐标系,右手坐标系,Direct程序中常用坐标系,4,(150,50),(50,250),(250,250),5,本程序执行结果,6,FVF灵活顶点格式,FVF(Flexible Vertex

2、Format)用来描述在顶点缓冲区中的顶点存储格式中包含了哪些属性。根据图形显示的需要,顶缓冲区中的格式可以包含顶点坐标、颜色、法线方向、纹理坐标等属性。,7,FVF标记数据的用途,8,FVF灵活顶点格式说明符,9,struct CUSTOMVERTEX float x,y,z,rhw,color; ; #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE) CUSTOMVERTEX vertices = 150.0f, 50.0f, 0.5f, 1.0f, 0 xffff0000, , / x, y, z, rhw, color 250

3、.0f, 250.0f, 0.5f, 1.0f, 0 xff00ff00, , 50.0f, 250.0f, 0.5f, 1.0f, 0 xff00ffff, , ;,三角形的FVF定义如下:,10,文件首部,#include LPDIRECT3D9 g_pD3D = NULL; LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL; /顶点缓冲区 struct CUSTOMVERTEX FLOAT x, y, z, rhw; /顶点坐标 DWORD color; / 顶点颜色 ; #define

4、 D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE),11,颜色值的顺序,0 xAARRGGBB ALPHA值:0 x000 xff R、G、B均为:0 x00 0 xff,12,HRESULT InitVB() CUSTOMVERTEX vertices = 150.0f, 50.0f, 0.5f, 1.0f, 0 xffff0000, , / x, y, z, rhw, color 250.0f, 250.0f, 0.5f, 1.0f, 0 xff00ff00, , 50.0f, 250.0f, 0.5f, 1.0f, 0 xff00fff

5、f, , ; if( FAILED( g_pd3dDevice-CreateVertexBuffer( 3*sizeof(CUSTOMVERTEX), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, ,13,创建顶点缓冲区,在使用顶缓冲区绘图前,首先要创建顶点缓冲区,其原型如下: HRESULT IDirect3DDevice9:CreateVertexBuffer( UINT Length,/顶点缓冲区的大小 DWORD Usage,/顶点缓冲区的属性 DWORD FVF,/灵活顶点格式 D3DPOOL Pool,/在内存中的位置 IDirect3DVert

6、exBuffer9* ppVertexBuffer,/缓冲 /区指针 Handle* pSharedHandle/保留参数 ),14,CreateVertexBuffer()参数说明,15,Usage:一般设为0或取下列值,16,D3DPOOL取值,17,向顶点缓冲区写入数据,如果不向顶点缓冲区填入有用数据的话,顶点缓冲是没有用的,所以必须向顶点缓冲填充数据,在写入数据前需要调用Lock函数加锁缓冲区。,18,Lock()函数原型,HRESULT IDirect3DVertexBuffer:Lock( UINT OffsetToLock,/加锁地址 UINT SizeToLock, /加锁内存

7、大小 VOID* ppbDATA, /内存指针地址 DWORD flags/加锁属性 );,19,Lock参数说明,20,缓冲区加锁属性可取下列值或0,21,顶点缓冲区图形显示,22,Render()函数,VOID Render() g_pd3dDevice-Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 ); if( SUCCEEDED( g_pd3dDevice-BeginScene() ) ) g_pd3dDevice-SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMV

8、ERTEX) ); g_pd3dDevice-SetFVF( D3DFVF_CUSTOMVERTEX ); g_pd3dDevice-DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 ); g_pd3dDevice-EndScene(); g_pd3dDevice-Present( NULL, NULL, NULL, NULL ); ,23,SetStreamSource()函数原型,HRESULTIDirect3DDevice9:SetStreamSource( UINT StreamNumber,/渲染数据流序号 IDirect3DVertexBuffer9*

9、 pStreamData, /进行绑定链接的顶点缓冲区指针 UINT OffsetInBytes,/进行绑定链接的渲染数据流的起始位置 UINT Stride/渲染数据流中一个顶点所占的内存大小。 );,24,SetFVF()函数原型,HRESULT IDirect3DDevice9:SetFVF( DWORD FVF/渲染数据流中的灵活顶点格式 );,25,D3D图元绘制函数,HRESHULT IDirect3DDevice9:DrawPrimive ( D3DPRIMIVETYPE PrimitiveType,/图元类型 UINT StartVertex,/起始点位置 UINT Primi

10、tiveCount/图元数目 );,26,6种基本图元,27,g_d3dDevice-DrawPrimitive(D3DPT_POINTLIST,0,6),(0.0,5.0,0.0),(0.0,5.0,0.0),(0.0,5.0,0.0),(0.0,5.0,0.0),(0.0,5.0,0.0),(0.0,5.0,0.0),28,g_d3dDevice-DrawPrimitive(D3DPT_LINELIST,0,3),(0.0,5.0,0.0),(0.0,5.0,0.0),(0.0,5.0,0.0),(0.0,5.0,0.0),(0.0,5.0,0.0),(0.0,5.0,0.0),29,g_

11、d3dDevice-DrawPrimitive(D3DPT_LINESTRIP,0,5),(0.0,5.0,0.0),(0.0,5.0,0.0),(0.0,5.0,0.0),(0.0,5.0,0.0),(0.0,5.0,0.0),(0.0,5.0,0.0),30,g_d3dDevice-DrawPrimitive(D3DPT_TRIANGLELIST,0,2),(0.0,5.0,0.0),(0.0,5.0,0.0),(0.0,5.0,0.0),(0.0,5.0,0.0),(0.0,5.0,0.0),(0.0,5.0,0.0),31,g_d3dDevice-DrawPrimitive(D3DPT

12、_TRIANGLESTRIP,0,4),(0.0,5.0,0.0),(0.0,5.0,0.0),(0.0,5.0,0.0),(0.0,5.0,0.0),(0.0,5.0,0.0),(0.0,5.0,0.0),32,D3DPTTRIANGLEFAN示例,33,基本图元显示实例,34,使用索引缓冲区绘制图形,35,顶点结构及类型的定义,Struct CUSTOMVERTEX FLOAT x,y,z,rhw; DWORD color; ; #define D3DFVF_CUTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE),36,37,顶点数组及索引数组的定义,CUST

13、OMVERTEX g_Vertices9; g_Vertices0.x = 300; g_Vertices0.y = 250; g_Vertices0.z = 0.5f; g_Vertices0.rhw = 1.0f; g_Vertices0.color = 0 xffff0000; for(int i=0; i8; i+) g_Verticesi+1.x = (float)(200*sin(i*3.14159/4.0) + 300; g_Verticesi+1.y = -(float)(200*cos(i*3.14159/4.0) + 250; g_Verticesi+1.z = 0.5f;

14、 g_Verticesi+1.rhw = 1.0f; g_Verticesi+1.color = 0 xff00ff00; /顶点索引数组 WORD g_Indices = 0,1,2, 0,2,3, 0,3,4, 0,4,5, 0,5,6, 0,6,7, 0,7,8, 0,8,1 ;,38,39,建立索引缓冲区的代码片段,LPDIRECT3DINDEXBUFFER9 g_pIB=NULL; if(FAILED(g_pD3DDevice-CreateIndexBuffer( sizeof(g_Index), 0, D3DFMT_INDEX16, D3DPOOL_DEFAULT,40,Creat

15、eIndexBuffer函数原型,CreateIndexBuffer( UINT Length, DWORD Usage, D3DFORMAT format, D3DPOOL Pool, IDirect3DIndexBuffer9* ppIndexBuffer, Handle* pHandle );,41,使用索引绘图的代码片段,if(SUCCEEDED(g_pD3DDevice-BeginScene() g_pD3DDevice-SetStreamSource(0,g_pVB,0, sizeof(CUSTOMVERTEX); g_pD3DDevice-SetFVF(D3DFVF_CUSTOM

16、VERTEX); g_pD3DDevice-SetIndices(g_pIB); g_pD3DDevice-DrawIndexedPrimitive( D3DPT_TRIANGLELIST,0,0,4,0,2); g_pD3DDevice-EndScene(); g_pD3DDevice-Present(NULL,NULL,NULL,NULL);,42,DrawIndexedPrimitive函数原型,DrawIndexedPrimitive( D3DPRIMITIVETYPE Type, INT BaseVertexIndex, UINT MinIndex, UINT NumVertices, UINT StartIndex, UINT PrimitiveCount );,43,作业:利用索引缓冲区绘制下列矩形,0(50,50),3(250,50),2(50,250),1(250,250),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1