1

这主要是一个理论问题。

假设我想在屏幕上绘制一个三角形。如果我在 3d 中为顶点着色器提供 3 个点,它会将它们转换为 2d、窗口坐标或屏幕坐标中的 3 个点。基本上是显示器或显示器上的 3 个像素坐标。

从这里开始,图形管道如何根据这三个点填充这个三角形?我的猜测是这样的:

  1. 通过确定 x 和 y 的上限和下限来将三角形与框绑定,如下所示: 在此处输入图像描述

  2. 使用Bresenham 的线算法用 3 种不同颜色绘制三角形的 3 条边。您不能在此步骤中使用常规颜色缓冲区。

  3. 对框中的每一行像素执行此操作:从最左边的像素开始(在您存储步骤 2 的结果的任何位置),向右移动直到碰到边缘。现在,继续往前走,在(运行片段着色器)中为像素着色,并写入常规颜色缓冲区,直到找到不同的行(在存储步骤 2 的结果的任何地方点击不同颜色的像素)。然后停下来,去下一行。

  4. 在常规颜色缓冲区中使用片段着色器绘制边缘。

这似乎是一个复杂且低效的解决方案。它实际上是如何完成的?

4

1 回答 1

1

看看扫描线算法。它基本上是从上到下移动一条水平线,计算这条扫描线与三角形的两个交点,然后在这两个点之间画一条线。

于 2012-06-06T07:49:57.300 回答