深度缓存

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

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

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

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

深度缓存示例:

Z-Buffer 算法流程:

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

 

posted @   HanselHuang  阅读(233)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示