欢迎来到天天文库
浏览记录
ID:38719518
大小:144.50 KB
页数:44页
时间:2019-06-18
《网络游戏客户端编程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、学习目标1.掌握深度缓冲、Alpha混合和Alpha测试2.掌握多边形填充模式和渲染模式,图形反锯齿3.掌握多纹理混合、雾化效果4.掌握2D文字和图形、公告板技术5.掌握粒子系统知识背景1.熟练掌握Windows编程2.掌握D3D程序的基本框架3.掌握如何在D3D环境下显示模型和场景本章要点1.Alpha混合和Alpha测试2.多纹理混合,雾化效果3.2D文字和图形显示4.粒子系统引 言游戏中逼真的场景、漂亮的人物和华美的服装,都是通过在程序中组合一个个基本图元,经过变换后渲染出来的。单纯的渲染并不能生成游戏中的各种特效,比如雾效、爆炸的火焰效果
2、等。要实现这些特效,就要在基本图形渲染的基础上,采用一些特殊的技术。本章将学习如何在D3D环境下实现一些简单的游戏特效。6.1 基本渲染属性6.1.1 深度缓冲深度缓冲区是Direct3D用来存储绘制到屏幕上的每一个像素点的深度信息的一块内存缓冲区。Direct3D通过比较当前绘制的像素点的深度和对应深度缓冲区的点的深度值来决定是否绘制当前像素。如果深度测试为TRUE,则绘制当前像素,并用当前像素点深度值更新深度缓冲区,反之则不予绘制。通常情况下,深度缓冲区对应于屏幕大小的一块二维区域。深度缓冲(又称Z-buffer)的作用是确保多边形能够正确地显示
3、在它们本来的深度(相对于摄像机)上。例如在场景中有两个矩形,一个是蓝色的而另一个是绿色的。蓝色的Z值为10,绿色的Z值为20(摄像机在原点)。这就意味着蓝色的在绿色的前面(如图6-1所示)。深度缓冲能确定哪个对象在另一个对象的前面,正确地渲染对象。DirectX会测试对象在屏幕上的像素点到摄像机的远近,并把得出的值保存在深度缓冲中;接着,DirectX会测试同一位置另一对象的像素点,并和刚才的像素进行比较,如果更近,就刷新刚才的记录,否则就不理睬(有东西在它前面挡着它),这会决定此位置像素点的颜色到底是蓝色的还是绿色的。图6-1 深度测试下面的程序片
4、断开启了深度测试,以便得到物体正确的前后关系:D3DPRESENT_PARAMETERSd3dpp;ZeroMemory(&d3dpp,sizeof(d3dpp));d3dpp.Windowed=TRUE;d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;d3dpp.BackBufferFormat=D3DFMT_UNKNOWN;d3dpp.EnableAutoDepthStencil=TRUE;d3dpp.AutoDepthStencilFormat=D3DFMT_D16;//g_pD3D为有效的Direct3D设备if
5、(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&g_pd3dDevice))){ returnE_FAIL;}在显示模式中,设定了d3dpp.EnableAutoDepthStencil的值为TRUE,表示打开深度测试。接着,d3dpp.AutoDepthStencilFormat的值设为D3DFMT_D16,表示深度缓冲区的每一个像素由16位的整数值表示。接下来,调用Di
6、rect3D渲染状态设置函数IDirect3DDevice9∷SetRenderState()激活深度缓冲区,将第一个参数设为D3DRS_ZENABLE,表示设置深度缓冲的状态,将第二个参数设为TRUE,打开深度缓冲。//g_pd3dDevice为有效的Direct3D设备g_pd3dDevice->SetRenderState(D3DRS_ZENABLE,TRUE);接下来,仍然调用IDirect3DDevice9∷SetRenderState()设置深度测试函数,将第一个参数设为D3DRS_ZFUNC,将第二个参数设为想要设置的深度测试函数,它属
7、于D3DCMPFUNC枚举类型,定义如下:typedefenum_D3DCMPFUNC{ D3DCMP_NEVER=1, //深度测试函数总是返回FALSE D3DCMP_LESS=2, //测试点深度值小于深度缓冲的值时返回TRUE D3DCMP_EQUAL=3, //测试点深度值等于深度缓冲的值时返回TRUE D3DCMP_LESSEQUAL=4, //测试点深度值小于等于深度缓冲的值时返回TRUE D3DCMP_GREATER=5, //测试点深度值大于深度缓冲的值时返回TRUE
8、 D3DCMP_NOTEQUAL=6, //测试点深度值不等于深度缓冲的值时返回TRUE D3D
此文档下载收益归作者所有