欢迎来到天天文库
浏览记录
ID:57018769
大小:91.00 KB
页数:40页
时间:2020-07-26
《深度测试与Alpha混合课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第8章深度测试与Alpha混合在绘制复杂的三维场景时,不可避免地会出现物体间的相互遮挡,在这种情况下,为了正确地绘制场景需要使用测试。半透明物体的绘制不同于不透明物体,D3D通过Alpha混合实现半透明物体的绘制。深度测试可以简化复杂场景的绘制,Alpha混合可以使绘制的三维场景更完整、理逼真。8.1深度测试在的场景中,通常有多个物体需要绘制,这些物体之间通常会存在遮挡关系,离观察点较远的物体会因为近处物体的遮挡而不可见或只有部分可见,D3D图形系统提供了尝试测试功能来实现这种效果。8.1.2使用深度测试创建深度缓冲区若要在D3D图形程序中
2、应用尝试测试,首先必须在创建D3D渲染设备时创建深度缓冲区:D3DPRESENT_PARAMETERS3dpp;ZeroMemory(&d3dpp,sizeof(d3dpp));d3dpp.windowed=TRUE;d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;d3dpp.BackBufferFormat=D3DFMT_UNKNOWN;d3dpp.EnableAutoDepthStencil=TURE;d3dpp.AutoDepthStencilFormat=D3DFMT_D16;参数说明深度缓冲区是D3D
3、渲染设备的一项属性,为了创建一个由D3D管理的深度缓冲区,只需设置结构体D3DPRENSENT_PARAMETERS相应的成员即可,在上面的代码中,d3dpp.EnableAutoDepthStencil赋值为TRUE,表示由D3D创建并管理一个深度缓冲区。d3dpp.AutoDepthStencilFormat赋值 为D3DFMT_D16,表示深度缓冲中每一个像素的深度值由16位的二进制数表示。激活深度测试深度缓冲区随D3D渲染设备创建好之后,调用D3D渲染状态设置函数IDirect3DDevice9::SetRenderState(),
4、将第一个参数设置为D3DRS_ZENABLE,第二个参数设置为TRUE,激活深度测试。g_pd3dDevice->SetRenderState(D3DRS_ZENABLE,TRUE);设置深度测试函数接下来仍然调用:IDirect3DDevice9::SetRenderState()函数设置举荐度测试函数,第一个参数设置为D3DRS_ZRUNC;第二个参数设置为想要设置的深度测试函数,它属于D3DCMPFUNC枚举类型。D3DCMPFUNC枚举类型定义typedefenum3DCMPRUNC{D3DCMP_NEVER=1,D3DCMP_LE
5、SS=2,D3DCMP_EQUAL=3,D3DCMP_LESSEQUAL=4,D3DCMP_GREATER=5,D3DCMP_NOTEQUAL=6,D3DCMP_GREATEREQUAL=7,D3DCMP_ALWAYS=8,D3DCMP_FORCE_DWORD=ox77777777}D3DCMPFUNC;D3DCMPFUNC枚举值及其说明D3DCMP_NEVER深度测试函数总返回FALSED3DCMP_LESS测试点深度值小于尝试缓冲区中相应值时,返回TRUED3DCMP_EQUAL测试点深度值等于尝试缓冲区中相应值时,返回TRUED3DC
6、MP_LESSEQUAL测试点深度值小于等于尝试缓冲区中相应值时,返回TRUED3DCMPFUNC枚举值及其说明(续表)D3DCMP_GREATER测试点深度值大于尝试缓冲区中相应值时,返回TRUED3DCMP_NOTEQUAL测试点深度值不等于尝试缓冲区中相应值时,返回TRUED3DCMP_GREATEREQUAL测试点深度值大于等于尝试缓冲区中相应值时,返回TRUED3DCMP_ALWAYS深度测试函数总返回TRUED3DCMP_FORCE_DWORD该枚举不使用,用于保证将D3DCMFUNC枚举类型编译为32位通常深度测试函数设置为D
7、3DCMP_LESS,表示当测试点深度值小于深度缓冲区中相应值时,通过测试并绘制相关像素,这样没有被遮挡的物体才显示,而被遮挡住的物体就不显示。如:g_pd3dDevice->SetRenderState(D3DRS_ZFUNC,D3DCMP_LESS);更新深度缓冲区设置了深度测试函数后,还需要设置深度测试成功时对深度缓冲区如何操作:是保持原来的深度值,还是用当前像素的尝试值更新对应的数值,如:g_pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE,TRUE);8.2半透明物体的绘制在前面已经遇到了
8、Alpha值的概念。如结构D3CCOLORVALUE中的变量a,但它并没有被使用,因为还没有激活Alpha混合,并且Alpha总是被赋值为1.0f。默认状态下Alpha为1.0f
此文档下载收益归作者所有