我注意到,当进入片段着色器in vec4 vertexColor
时,顶点着色器中的out vec4 vertexColor
变量将被插值。我的问题是,所有带有“out”修饰符的变量都会被插值还是仅某种类型?
最佳答案
全部用户定义inputs to the fragment shader被插值。 如何对它们进行插值取决于layout
interpolation qualifier 。默认情况下,in
将使用 smooth
,但您可以指定 noperspective
(在屏幕空间中插值,不进行透视校正)或 flat
。后者通过为所有片段赋予分配给 provoking vertex of the primitive 的变量值来执行“插值”。 。 FS 输入的整型必须使用 flat
,但默认仍然是 smooth
,因此如果不显式指定 flat,将会出现编译错误
为他们。
请注意,当您询问顶点着色器输出时,答案是关于片段着色器输入。这是有原因的。
首先,片段着色器之前可以存在多个着色器阶段。给FS的值来自最后一个事件的vertex processing shader stage :几何着色器、曲面分割评估着色器或顶点着色器。网格着色器(一个相对较新的扩展)改变了存在的顶点处理阶段,但最后一个仍然是为片段着色器提供数据的阶段。
所以仅仅谈论“顶点着色器”是不完整的。
其次,顶点处理阶段输出上的插值限定符将被忽略。唯一重要的是片段着色器输入上的那些。就 GLSL 版本号而言,这是一个相对较新的更改。在 GLSL 4.30 之前,最终的顶点处理阶段输出需要与相应的片段着色器输入具有相同的限定符。从 4.30 开始,它们不再需要,但顶点输出限定符会被忽略;只有片段着色器输入限定符才重要。
关于opengl - 顶点着色器的哪些输出变量将被插值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75844645/