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

标签 opengl glsl shader varying

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

片段着色器:

precision mediump float;
varying vec4 v_Color;

void main() {
    gl_FragColor = v_Color;
}

顶点着色器:

attribute vec4 a_Position;
attribute vec4 a_Color;

varying vec4 v_Color;

void main() {
    v_Color = a_Color;
    gl_Position = a_Position;
}

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

最佳答案

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

关于opengl - 即使变量只在顶点着色器上设置了三次,OpenGL 如何在片段着色器上插入变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23201847/

相关文章:

opengl - 片段着色器 - 绘制曲线

opengl - bool 纹理

c++ - 如何变换骨骼动画的顶点?

c++ - 创建网格和启动窗口 SDL/GLEW C++ 时发生访问冲突

performance - 快速从深度缓冲区读取值

c++ - 如何为 2D 和 3D 调整顶点着色器?

directx - HLSL 错误 X3086 : DX9-style 'compile' syntax is deprecated in strict mode

opengl - 如何在openGL中绘制背景

c++ - OpenGL 窗口未打开

opengl - glMultiDraw 函数和 gl_InstanceID