网络游戏客户端编程.docVIP

  1. 1、本文档共42页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
网络游戏客户端编程

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

文档评论(0)

chengben002424 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档