深度缓存
在场景中有很多不同的物体,我想把这些物体都显示在屏幕上,一个很自然的想法就是我们先从最远处的物体开始画起,然后逐渐用近的物体进行覆盖。这种算法叫做画家算法。这也是油画的画家所做的。
在一定程度上,画家算法是没问题的。如果有 n 个三角形,算法复杂度为 O(n log n),因为基于最快的排序算法。
而如果是下面的三个三角形,它们两两之间都存在覆盖关系,就不可解了。
现在我们广泛采用的算法是 Z-Buffer,思路是既然我对空间中三角形的远近顺序不好排,而对每一个像素来说挺容易分析的,对于每一个像素,我考虑的是离我最近的距离。那么在生成这幅图像的同时,还会生成每一个像素它能看到的物体的最浅的深度的信息,我们管这幅图叫深度图或深度缓存。即最后获得 frame buffer 和 depth buffer,这两幅图总是同步生成的。
深度缓存示例:
Z-Buffer 算法流程:
因为我们并没有排序,所以 Z-Buffer 算法的复杂度为 O(n),对于 n 个三角形,每一个像素它只是得到最小值而已。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律