我正在学习OpenGL,基本已理解管线原理,但是有一个问题一直没明白:我们知道顶点着色器可以传递变量到片段着色器,然而片段着色器和顶点着色器并不是1:1调用的。比如一个三角形有三个顶点,调用三次顶点着色器,三角形光栅话后会有很多的片段(插值的结果),每个片段都会调用一次片段着色器。那么问题来了,片段着色器的输入到底是处理哪个顶点时的输出呢?片段是图元光栅化的结果,为何只关联到某一个顶点(正确吗?),就近原则? 在下面链接有个类似的问题,但是还是没明白。 opengl - How are vertex shader outs sent as inputs to the fragment shader? 还有一个关于光栅化插值方法的Blog: 光栅化插值方法
如果上面没有描述清楚,换一种问法:现在,三个顶点依次调用依次vertex shader(调用3次),我们在vertex shader里输出顶点的坐标给fragement shader用,变量名为vex_coord。由于生成的片段远多余三个(比如30个),30个片段要调用30次fragement shader,那们调用片段0,1,2,3...29时,vex_coord值分别是什么呢?上面的vex_coord到底会有多少种值,3个(即图元顶点)还是30个(即每个片段对应到三维空间上的点)或其他? 关于Shader的调用次数: Vertex Shader Number of invocation of vertex shader? How many times shader executes?