我是这么做的:
将深度缓存扩大 4 倍,这样每个采样点都可以保存深度和进行深度测试
创建一个比 帧缓存大 4 倍的 临时缓存
然后对每个采样点进行 是否在三角形内部的判断 和 深度测试,通过的写入深度缓存 并把 颜色存入 临时缓存。
像素都操作完毕后,再进行一次后处理操作,再次遍历所有像素,从 临时缓存中拿到 4 个采样点的颜色 进行混合(这一步存在大量无效操作,如果能只在三角形边缘进行混合操作就好了)。因为如果采样点的颜色混合在第一次遍历像素时就进行,那么在绘制第一个三角形时,在两个三角形的交界处,由于另一个三角形还没有绘制出来,所以在交界处会出现 与背景的黑色进行混合,从而产生黑边。
所以需要一个 sample list(在这里我相当于把它拆成了 temp_frame_buffer 和 depth_buffer) 来存储采样点的信息,并在最后做混合。
从深度测试的角度来看,如果一个像素内四个采样点的深度都设为一个值,那么同样在两个三角形交界处会有问题,位于后面的三角形 本来应该有采样点要通过深度测试 却会被 前面的三角形的一整块像素给遮挡,导致混合结果不正确。