这主要是一个理论问题。
假设我想在屏幕上绘制一个三角形。如果我在3d中为我的顶点着色器提供3个点,它将在2d,窗口坐标或屏幕坐标中将它们转换为3个点。基本上是显示器或显示器上的3个像素坐标。
从这里开始,图形管道如何基于这三个点来填充这个三角形?我的猜测是这样的:
通过确定x和y的上限和下限来将三角形用框绑定,如下所示:
使用Bresenham's line algorithm以3种不同颜色绘制三角形的3条边。您不能在此步骤中使用常规颜色缓冲区。
对框中的每一行像素执行此操作:从最左边的像素开始(在存储步骤2的结果的时候),向右移动直到你碰到边缘。现在,继续向前,着色像素(运行片段着色器),并写入常规颜色缓冲区,直到你遇到不同的行(在存储步骤2的结果时,击中不同颜色的像素)。然后停下来,转到下一行。
使用常规颜色缓冲区中的片段着色器绘制边缘。
这似乎是一个复杂而低效的解决方案。它是如何实际完成的?