文档介绍:、,、、,   言袃游戏中逼真的场景、漂亮的人物和华美的服装,都是通过在程序中组合一个个基本图元,经过变换后渲染出来的。单纯的渲染并不能生成游戏中的各种特效,比如雾效、爆炸的火焰效果等。要实现这些特效,就要在基本图形渲染的基础上,采用一些特殊的技术。本章将学****如何在D3D环境下实现一些简单的游戏特效。  深度缓冲蚄深度缓冲区是Direct3D用来存储绘制到屏幕上的每一个像素点的深度信息的一块内存缓冲区。Direct3D通过比较当前绘制的像素点的深度和对应深度缓冲区的点的深度值来决定是否绘制当前像素。如果深度测试为TRUE,则绘制当前像素,并用当前像素点深度值更新深度缓冲区,反之则不予绘制。通常情况下,深度缓冲区对应于屏幕大小的一块二维区域。荿深度缓冲(又称Z-buffer)的作用是确保多边形能够正确地显示在它们本来的深度(相对于摄像机)上。例如在场景中有两个矩形,一个是蓝色的而另一个是绿色的。蓝色的Z值为10,绿色的Z值为20(摄像机在原点)。这就意味着蓝色的在绿色的前面(如图6-1所示)。深度缓冲能确定哪个对象在另一个对象的前面,正确地渲染对象。DirectX会测试对象在屏幕上的像素点到摄像机的远近,并把得出的值保存在深度缓冲中;接着,DirectX会测试同一位置另一对象的像素点,并和刚才的像素进行比较,如果更近,就刷新刚才的记录,否则就不理睬(有东西在它前面挡着它),这会决定此位置像素点的颜色到底是蓝色的还是绿色的。袀袈图6-1 深度测试肃下面的程序片断开启了深度测试,以便得到物体正确的前后关系:聿D3DPRESENT_PARAMETERSd3dpp;薈ZeroMemory(&d3dpp,sizeof(d3dpp));=TRUE;=D3DSWAPEFFECT_DISCARD;=D3DFMT_UNKNOWN;=TRUE;=D3DFMT_D16;袂//g_pD3D为有效的Direct3D设备薀if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,螀&d3dpp,&g_pd3dDevice)))蒇{莁   returnE_FAIL;莀}薈在显示模式中,,表示打开深度测试。接着,,表示深度缓冲区的每一个像素由16位的整数值表示。薅接下来,调用Direct3D渲染状态设置函数IDirect3DDevice9∷SetRenderState()激活深度缓冲区,将第一个参数设为D3DRS_ZENABLE,表示设置深度缓冲的状态,将第二个参数设为TRUE,打开深度缓冲。肅//g_pd3dDevice为有效的Direct3D设备肁g_pd3dDevice->SetRenderState(D3DRS_ZENABLE,TRUE);蕿接下来,仍然调用IDirect3DDevice9∷SetRenderState()设置深度测试函数,将第一个参数设为D3DRS_ZFUNC,将第二个参数设为想要设置的深度测试函数,它属于D3DCMPFUNC枚举类型,定义如下:羈typedefenum_D3DCMPFUNC{蒄   D3DCMP_NEVER=1,       //深度测试函数总是返回FALSE袁   D3DCMP_LESS=2,       //测试点深度值小于深度缓冲的值时返回TRUE莆   D3DCMP_EQUAL=3,       //测试点深度值等于深度缓冲的值时返回TRUE肆   D3DCMP_LESSEQUAL=4,   //测试点深度值小于等于深度缓冲的值时返回TRUE袄   D3DCMP_GREATER=5,    //测试点深度值大于深度缓冲的值时返回TRUE薂   D3