Direct-X学习笔记--深度缓存

本文介绍了DirectX中的深度测试,包括深度缓冲(Z-Buffer)的作用,深度测试的步骤(创建深度缓存区、开启深度测试、设置深度测试函数和更新深度缓冲区),并探讨了开启或关闭深度测试对3D效果的影响。通过理解深度测试,开发者可以更好地控制3D场景的绘制,实现更逼真的视觉效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天来学习一下深度测试,不过这个东东貌似暂时就是了解一下原理啦,因为DX默认是打开深度测试的,即我们不需要额外进行设置就可以使用深度测试的功能,不过这个还是有必要了解一下,一是对DX的流程更加了解,二是我们可以手动设置深度测试的参数以及函数,达到一些自己想要实现的效果。


一.简介

三维的世界中,有各种物体,而这些物体难免会有遮挡,而且同一个物体不同部分也会有遮挡的关系,要想表现出来更加逼真的效果,就要用到深度缓冲(Z buffer),配套深度测试技术。

深度缓存也尝尝成为Z缓存,D3D为屏幕上每个像素点保存了一个深度值,当绘制时,D3D根据各种物体的当前像素点深度与深度缓冲区中的点的深度比较,如果测试结果为真,绘制当前像素,并且更新深度缓冲区,否则不进行绘制。

二.深度测试的步骤

使用深度缓冲区有以下四个步骤:

1.创建深度缓存区

2.开启深度测试

3.设置深度测试函数

4.更新深度缓冲区

下面分别看一下:

1.创建深度缓冲区:

这个是我们在初始化Direct时就进行的操作,之前我们已经写过啦。就是创建D3D设备时的那个结构体的两项:

	//是否开启自动深度缓冲
	d3dpp.EnableAutoDepthStencil = true;
	//当前自动深度缓冲的格式
	d3dpp.AutoDepthStencilFormat = D3DFMT_D16;//每个像素点有16位的存储空间,存储深度信息


2.开启深度测试:

还是SetRenderState函数,第一个参数为D3DRS_ZENABLE,第二个为ture或false表示是否开启深度缓冲区

//设置渲染状态,设置启用深度值
	g_pDevice->SetRenderState(D3DRS_ZENABLE, true);

3.设置深度测试函数

所谓深度测试的函数,就是一些宏,DX已经为我们写好了,我们要做的就是选择这些宏就可以啦。


4.根据深度测试函数的返回值,可以设置更新缓冲区,也可以不进行更新。DX把自由选择的权利交给了我们,让我们做出更加好的效果。



三.开启或者关闭深度测试的比较

下面是一个例子,通过空格键可以控制是否开启深度测试。

开启深度测试,“墙面”插入了龙的身体,可以看出立体效果非常的逼真:

关闭深度测试,不仅墙面一直挡在龙的前面,连网格模型本身的绘制也出了问题,人物“反过来了”。


这里要注意一个问题:为什么人物会反过来,如果不适用深度测试的话,DX默认会使用画家算法,即先画的东东都在后面,后画的东东在前面,而不会去考虑可能有的遮罩关系,而使用了ZBuffer,就可以更好的确定物体之间,或者物体本身的遮罩关系啦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值