现代计算机图形学 —— 深度缓存(Z-Buffer)
现代计算机图形学
深度缓存(Z-Buffer)
前言
当我们完成了场景中所有三角形的光栅化,下一步就是将他们正确的绘制在屏幕空间上,此时就需要正确处理他们的遮挡关系。
我们可以先试想一种最简单的绘制方法:像画油画一样,先绘制最远处的三角形,然后由远到进依次绘制所有的三角形,后面绘制的三角形会覆盖前面绘制的三角形,从而得到一张遮挡关系正确的图像。
由远及近依次绘制,能得到正确的遮挡关系
但是此时存在一种特殊情况:当3个三角形两两相互遮挡,其整体形成一个环,如果此时依旧使用简单的绘制方法,就无法正确解析出各三角形的深度关系。
存在无法解析深度的情况
为了解决场景中三角环的深度解析问题,使其能够正确绘制在屏幕上,就有了今天所讲的 深度解析(Z-Buffer).
具体思路
方法
深度缓存(Z-Buffer)算法对每个像素的远近进行排序,每个像素都记录当其能够表示的 最浅的深度(min z-value)。
要执行深度缓存算法需要生成两个图像:
- 生成成品图像,其保存着图像的色彩信息(frame buffer)
- 生成一个只存储每个像素深浅信息的图像(depth buffer)
(注:Z-Buffer中规定,深度为 点到摄像机的距离 且其永远为正,这点与变换中的概念不行同)
Z-Buffer 样例
伪代码
1 | // Initialize depth buffer to ∞ |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 MMMMrD!