GLSL“变化”插值:组件明智? 在规范中引用?

可能是一个愚蠢的问题,但是我无法find(或者不理解) 规范或其他问题(例如, 这个问题)的结论性答案。

对于平滑插值的变化vecmat顶点着色器输出/片段着色器input,是单独插入vector还是matrix的每个元素?

GL规格秒。 13.5.1(剪切)描述了“与顶点相关的输出值”的线性剪辑空间插值。 它还说,这些是vector的组成部分,但没有提到matrix。

同样,秒。 14.5.1(光栅化行)和14.6(光栅化多边形)描述了“片段的相关数据f ”的插值。 vector或matrix的每个元素是否被视为单独的“相关数据”,并且是独立于vector或matrix的其他元素进行插值的?

秒。 11.1.3.10(着色器输出)和15.1(片段着色器variables)提到插值,但是在其他地方提到细节。

同样,在GLSL规范中 ,sec。 4.5(插值限定符)说,插值发生,但不区分标量和多分量variables。

我正在寻找关于如何插入vecmat s的明确声明,如果有的话。 或者让我知道如果没有! 谢谢!

(注意:答案可以是任何OpenGL版本。)

TL; DR:是的,这是组件式的。


正如你所说,GLSL规范有计算“与片段相关的数据”的公式,就像这样:

GLSL 330规格:3.5.1基本线段栅格化

该片段的关联数据f的值,无论是变化着色器输出还是剪辑w坐标,都可以find

      (1- t )· f a / w a + t·f b / w b 
 f = ------------------------(3.6)
        (1- t )/ w a + t / w b 

其中f af b分别是与段的起始和终止端点相关的数据; w aw b分别是段的开始和结束端点的剪辑w坐标。

“数据”是指整个向量/matrix还是单独的分量可能并不完全清楚,但重点在于它并不重要,因为标量和向量/matrix之间的乘法和除法是以分量方式定义的。