D3D深度测试

深度测试

使用诸如Direct3D这样的渲染API在屏幕上渲染图形时,就会碰到所谓的“透支”(指的是渲染全景造成的内存浪费)问题。当在屏幕上绘制交迭(重爹)的两个或多个图元时,就会出现透支。这些图元有不同的位置,但在屏幕上渲染时,它们交迭在一起。因为Direct3D不知道要绘制的图元的先后顺序,所以会出现透支问题。Direct3D不仅不知道是哪个图元遮住了哪个图元,而且还不知道是哪个图元部分遮住了其他物体。

       解决透支问题的一个办法是使用一种名为“深度缓存或z缓存”的缓存。深度缓存是一个后台缓存,它类似于OpenGL和Direct3D这样的API渲染,存储场景深度信息。当绘制图元时,将物体的深度信息和深度缓存中的内容加以比较,对构成图元的每个像素都加以比较。如果物体靠近摄象机,就更新深度缓存和颜色缓存等内容。如果物体距离观察人员的位置要比已经渲染在屏幕上的内容远,那么就抛弃那些不可见的像素。

       图形硬件并不总包含深度缓存,所以像二叉空间分割(BSP:Binary Space Partitioning)树这样的内容对于开发3D游戏就非常重要。现在并不需要使用BSP树渲染场景。因为图形硬件的运行速度十分快,因为深度缓存成为最佳选择,所以像过去那样使用BSP树只会降低速度。深度缓存运行在GPU硬件上,而不是CPU上。为了在Direct3D中启动深度缓存,可以设置如程序清单1.26所示的渲染状态。

g_D3DDevice->SetRenderState(D3DRS_ZENABLE, TRUE);

 无疑,使用深度缓存会比什么都不使用要慢的多。但是,如果想要使用硬件正确的渲染场景。那么就要使用深度缓存。因为深度缓存的速度成本十分小,所以没必要在开发的程序中都使用深度缓存。通过简单的一行代码就可以在Direct3D中使用深度缓存。本书稍后将介绍BSP树的创建和使用,以及用它来存储场景信息。使用BSP树只是为了起到指导作用,在最终的游戏中使用的并不是它。当前,BSP树对碰撞检测非常有用,但对渲染却并非如此。如果想在渲染时使用这些BSP树,那么就要使用其他技术加快计算,直到只使用BSP树可以从中受益为止。本书稍将详细介绍这方面的内容。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值