如果我错了,请纠正我。 使用顶点和像素着色器时,我们通常会提供代码来计算顶点着色器的输出gl_position。 然后,我们在像素着色器中找到带有输入gl_FragCoord的ouselves。 OpenGL从gl_position计算gl_FragCoord的操作名称是什么?那些是“投影”和“剪辑坐标转换”是否正确? 那么,在这些操作期间,转换究竟发生了什么? 换句话说,gl_FragCoord和gl_position之间的数学关系是什么,我可以用来代替openGL函数?
非常感谢您的贡献。
答案 0 :(得分:10)
gl_Position位于投影后齐次坐标中。
值得注意的是gl_Position是顶点的(4d)位置,而gl_FragCoord是片段的(2d)位置。
之间发生的操作是
因此,虽然您可以找到公式来转换从作为视口的2d空间中的顶点位置表示的任意点,但它本身并不是有用的,因为生成的片段不直接对齐顶点位置。获取顶点的2d坐标的公式是
2d_coord_vertex = viewport.xy + viewport.wh * (1 + gl_Position.xy / gl_Position.w)/2
同样,这不是gl_FragCoord。如果您需要更深入的知识,请查看GL规范中有关光栅化的详细信息。
我不确定“替换openGL函数”究竟是什么意思,但栅格化并非易事,超出了SO答案的范围。