可见性与遮挡(Z-buffering)
根据常识,我们很容易的想到画家在作画的时候如何体现遮挡。在作画时一般都是先画远处的物体,之后再画近处的物体,这样画出的画就可以体现出遮挡,该算法称为画家算法。

画家算法需要先对所有物体的深度进行排序(最少需要nlognn\log nnlogn的时间复杂度),然后依次按顺序画在屏幕上(光栅化)。画家算法虽然思想简单,但并不能解决所有的遮挡问题,比如下图的情况

为了解决画家算法的缺点,在图形学中引入了深度缓存算法(Z-Buffer)。
Z-Buffer算法同时维护一个渲染图(Rendering)和深度图(Depth / Z buffer),如果某一三角形深度较浅,则在光栅化时就会遮挡到之前画的像素。下图是Z-Buffer算法维护的两张图,右侧的是深度图,即物体中的三角形距离我们越近颜色就越黑,越远颜色就越白。

在算法处理到其他物体时,Z-Buffer算法会根据当前物体深度信息更新渲染结果并更新深度图。算法的伪代码大致如下
// 初始时,zbuffer数组为∞
for (each triangle T)
for (each sample (x,y,z) in T)
if (z < zbuffer[x,y]) // closest sample so far
framebuffer[x,y] = rgb; // update color
zbuffer[x,y] = z; // update depth

本文介绍了计算机图形学中的深度测试,包括Z-Buffer算法的工作原理和复杂度,以及着色的基础知识。重点讲解了布林-冯反射模型,阐述了漫反射、高光和环境光的概念,并应用兰伯特余弦定律计算漫反射亮度。
——深度测试、着色&spm=1001.2101.3001.5002&articleId=115360628&d=1&t=3&u=eb2e8a0dc4374f2289f72cfd2c339d84)
3691

被折叠的 条评论
为什么被折叠?



