片段着色器如何确定顶点着色器输出中片段的数量?

片段着色器如何确定顶点着色器输出中片段的数量?

问题描述:

我对顶点和片段着色器很熟悉,但仍然对片段着色器如何确定顶点着色器输出中片段的数量感到困惑。片段着色器如何确定顶点着色器输出中片段的数量?

如果我有3个顶点,并且我在GLSL中绘制了一个三角形基元,那么顶点着色器将针对每个顶点运行三次,然后片段着色器将运行多次(取决于片段的数量,每个片段一次)。

我想知道片段着色器如何确定片段?它使用gl_Position?如果我没有在顶点着色器中设置gl_Position,片段着色器是否仍然能够生成片段?

gl_Position是否每次都需要在顶点着色器中设置?

您正在谈论光栅扫描中的一步,即扫描转换。 GPU获取由顶点着色器生成的位置并插入其属性以生成传递给片段着色器的片段。所以,是的,你必须在顶点着色器中设置gl_Position。

在将三角形的坐标转换为窗口坐标后,扫描转换将采用三角形并根据三角形覆盖的输出图像上窗口像素的排列将其分解。 Source.

scan conversion of a triangle

+0

意味着每一个变量我通过我的顶点着色器将上插的基础上GL_POSITION?例如,如果我使用out/in关键字从顶点到片段着色器传递纹理坐标,它们也将插入到每个窗口中? – ammar26 2014-11-21 20:46:36

+2

是的。由于默认插值限定符是“平滑”,因此每个传入属性都以透视正确的方式进行插值。 – warrenm 2014-11-21 21:00:23