iOS Metal - 发送到片段着色器时,[[position]]限定符的位置会发生什么?

时间:2017-04-23 12:04:46

标签: ios metal

我试图理解当[[position]]限定符附加到片段着色器时如何更改float4。我尝试传递相同的位置,一次使用qualider,一次没有,并且片段着色器中的结果完全不同。

1 个答案:

答案 0 :(得分:1)

顶点着色器的[[position]]输出位于标准化设备坐标中。片段着色器的[[position]]输入位于窗口坐标中。 (“窗口”坐标有点用词不当。它们是渲染目标附件边界内的坐标,以像素为单位。)这些坐标之间的关系是已设置的视口。 (如果未明确设置视口,则使用附件的边界。)

Metal Programming Guide: Graphics Rendering: Render Command Encoder

  

使用视口和像素坐标系

     

Metal将其标准化设备坐标(NDC)系统定义为2x2x1   立方体,其中心位于(0,0,0.5)。 x和y的左边和底边,   NDC系统分别指定为-1。右边和顶部   对于NDC系统的x和y,分别指定为+1。

     

视口指定从NDC到窗口的转换   坐标。 “金属”视口是指定的3D转换   setViewport:的{​​{1}}方法。的起源   窗口坐标位于左上角。

对于其他顶点输出,转换为片段着色器输入取决于采样和插值限定符。如果未指定限定符,则默认为MTLRenderCommandEncoder。以center_perspective结尾的限定符使用透视校正插值。以_perspective结尾的那些使用线性插值。使用_no_perspective说明符的那些不是插值的;来自图元的激发(即第一)顶点的值不变地传递给片段着色器。