OpenGL如何在片段着色器上插入变量变量,即使它们仅在顶点着色器上设置了三次?

Vil*_*lda 8 opengl shader glsl varying

由于顶点着色器每个顶点运行一次(这意味着在三角形中运行3次),如果为每个片段分配变量变量(如在示例中)仅三次,如何计算变量变量?

片段着色器:

precision mediump float;
varying vec4 v_Color;

void main() {
    gl_FragColor = v_Color;
}
Run Code Online (Sandbox Code Playgroud)

顶点着色器:

attribute vec4 a_Position;
attribute vec4 a_Color;

varying vec4 v_Color;

void main() {
    v_Color = a_Color;
    gl_Position = a_Position;
}
Run Code Online (Sandbox Code Playgroud)

所以,问题是,这背后的系统如何知道如何计算每个片段的变量v_Color,因为这个着色器只分配v_Color 3次(在一个三角形中).

Col*_*Two 5

顶点着色器的所有输出都是每个顶点。当您设置v_Color在顶点着色器,它设置它的当前顶点。运行片段着色器时,它将读取v_Color图元中每个顶点的值,并根据片段的位置在它们之间进行插值。