今天来学习一下深度测试,不过这个东东貌似暂时就是了解一下原理啦,因为DX默认是打开深度测试的,即我们不需要额外进行设置就可以使用深度测试的功能,不过这个还是有必要了解一下,一是对DX的流程更加了解,二是我们可以手动设置深度测试的参数以及函数,达到一些自己想要实现的效果。
一.简介
三维的世界中,有各种物体,而这些物体难免会有遮挡,而且同一个物体不同部分也会有遮挡的关系,要想表现出来更加逼真的效果,就要用到深度缓冲(Z buffer),配套深度测试技术。
深度缓存也尝尝成为Z缓存,D3D为屏幕上每个像素点保存了一个深度值,当绘制时,D3D根据各种物体的当前像素点深度与深度缓冲区中的点的深度比较,如果测试结果为真,绘制当前像素,并且更新深度缓冲区,否则不进行绘制。
二.深度测试的步骤
使用深度缓冲区有以下四个步骤:
1.创建深度缓存区
2.开启深度测试
3.设置深度测试函数
4.更新深度缓冲区
下面分别看一下:
1.创建深度缓冲区:
这个是我们在初始化Direct时就进行的操作,之前我们已经写过啦。就是创建D3D设备时的那个结构体的两项:
//是否开启自动深度缓冲
d3dpp.EnableAutoDepthStencil = true;
//当前自动深度缓冲的格式
d3dpp.AutoDepthStencilFormat = D3DFMT_D16;//每个像素点有16位的存储空间,存储深度信息
还是SetRenderState函数,第一个参数为D3DRS_ZENABLE,第二个为ture或false表示是否开启深度缓冲区
//设置渲染状态,设置启用深度值
g_pDevice->SetRenderState(D3DRS_ZENABLE, true);
3.设置深度测试函数
所谓深度测试的函数,就是一些宏,DX已经为我们写好了,我们要做的就是选择这些宏就可以啦。
4.根据深度测试函数的返回值,可以设置更新缓冲区,也可以不进行更新。DX把自由选择的权利交给了我们,让我们做出更加好的效果。