深度缓存

在场景中有很多不同的物体,我想把这些物体都显示在屏幕上,一个很自然的想法就是我们先从最远处的物体开始画起,然后逐渐用近的物体进行覆盖。这种算法叫做画家算法。这也是油画的画家所做的。

在一定程度上,画家算法是没问题的。如果有 n 个三角形,算法复杂度为 O(n log n),因为基于最快的排序算法。

而如果是下面的三个三角形,它们两两之间都存在覆盖关系,就不可解了。

现在我们广泛采用的算法是 Z-Buffer,思路是既然我对空间中三角形的远近顺序不好排,而对每一个像素来说挺容易分析的,对于每一个像素,我考虑的是离我最近的距离。那么在生成这幅图像的同时,还会生成每一个像素它能看到的物体的最浅的深度的信息,我们管这幅图叫深度图或深度缓存。即最后获得 frame buffer 和 depth buffer,这两幅图总是同步生成的。

深度缓存示例:

Z-Buffer 算法流程:

因为我们并没有排序,所以 Z-Buffer 算法的复杂度为 O(n),对于 n 个三角形,每一个像素它只是得到最小值而已。

 

posted @ 2022-01-01 16:24  HanselHuang  阅读(263)  评论(0)    收藏  举报