我试图理解当[[position]]限定符附加到片段着色器时如何更改float4。我尝试传递相同的位置,一次使用qualider,一次没有,并且片段着色器中的结果完全不同。
答案 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
说明符的那些不是插值的;来自图元的激发(即第一)顶点的值不变地传递给片段着色器。