gl_FragCoord 变量存储四个组件:(x,y,z,1 / w)
什么是w坐标,为什么将其存储为1 / w?
GLSL 和 OpenGL 规范在这方面不必要地混淆。OpenGL 规范更容易理解:gl_FragCoord
存储窗口空间顶点位置的 X 、 Y 和 Z 分量。X 、 Y 和 Z 值的计算与计算窗口空间位置的描述相同 (尽管像素中心和左上原点可以修改 X 和 Y 值)。这在规范的1>部分中描述。
gl_FragCoord
的 W 分量是 (1 / Wc),其中 Wc是剪辑空间顶点位置。它是顶点着色器中的gl_Position.w
。
保留 Wc的唯一有用目的是reverse-transform gl_FragCoord
以获取剪辑空间位置。如该页面所示,这需要乘以 Wc。但是由于gl_FragCoord
仅存储该值的倒数,因此现在需要除以gl_FragCoord.w
。
因此,我们可以假设 OpenGL 以这种方式存储它,因为 OpenGL 不允许太多意义;)看,这是一个规则,OpenGL 规范的每个部分都必须有一些有点荒谬的东西。
好吧,从技术上讲,这是 3D 实验室创建 GLSL 的历史产物。我敢肯定,他们这样做纯粹是出于自私的硬件原因,但我没有真正的证据。
齐次坐标由下式给出:(x,y,z,w),它投影到:(x / w,y / w,z / w).gl_FragCoord
存储这个投影,而不是存储最后一个组件的(无用的)(w / w) = (1)。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(45条)