深度缓存
三角形是最基本的面, 如何将给定的一堆三角形正确地画到屏幕上呢 ?
- 画家算法 将所有三角形按照他们的深度排序, 从最深的三角形开始画
就像画油画一样, 一层叠着一层.
问题: 无法处理互相穿透的三角形 因为没法根据深度对三角形进行排序, 这种三角形各个点的深度都不同.
- 深度缓存算法 核心思想: 对于每个三角形中的每个像素点,
- 如果像素点的深度值比该点记录的深度小, 那么将该点记录的深度以及颜色值更新为当前三角形在该点的深度和颜色值
这样做的好处是与画三角形的顺序无关, 无论以什么顺序去画三角形, 最终总能得到正确的结果
MSAA 多重采样抗锯齿
在上面的算法中, 我们只用了一个像素点的中心去检测该像素是否在三角形内
这样会带来锯齿的问题:
MSAA, 通过在一个像素内增加更多的采样点去检测该像素点是否在三角形内.
例如, 在一个像素点用 2 * 2 的采样点去检测:
这样做的话, 我们还需要对每个像素点内部的采样点也做深度缓存.
同时,一个像素点的颜色可能是多个三角形颜色的综合:
只要我们将这些采样点的颜色也加权平均起来, 就能在图像边缘得到一个平滑的过渡.