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