在glsl中,用于从gl_position计算gl_fragCoord的公式是什么?

时间:2011-08-23 07:58:52

标签: opengl glsl shader relation

如果我错了,请纠正我。 使用顶点和像素着色器时,我们通常会提供代码来计算顶点着色器的输出gl_position。 然后,我们在像素着色器中找到带有输入gl_FragCoord的ouselves。 OpenGL从gl_position计算gl_FragCoord的操作名称是什么?那些是“投影”和“剪辑坐标转换”是否正确? 那么,在这些操作期间,转换究竟发生了什么? 换句话说,gl_FragCoord和gl_position之间的数学关系是什么,我可以用来代替openGL函数?

非常感谢您的贡献。

1 个答案:

答案 0 :(得分:10)

gl_Position位于投影后齐次坐标中。

值得注意的是gl_Position是顶点的(4d)位置,而gl_FragCoord是片段的(2d)位置。

之间发生的操作是

  1. 原始程序集(从3个顶点生成一个三角形,例如)
  2. 剪裁(即切割视图内部全部的多个三角形中的三角形,如果它最初不适合)
  3. viewport application
  4. 光栅化(获取这些三角形并从中生成覆盖的片段)
  5. 因此,虽然您可以找到公式来转换从作为视口的2d空间中的顶点位置表示的任意点,但它本身并不是有用的,因为生成的片段不直接对齐顶点位置。获取顶点的2d坐标的公式是

    2d_coord_vertex = viewport.xy + viewport.wh * (1 + gl_Position.xy / gl_Position.w)/2
    

    同样,这不是gl_FragCoord。如果您需要更深入的知识,请查看GL规范中有关光栅化的详细信息。

    我不确定“替换openGL函数”究竟是什么意思,但栅格化并非易事,超出了SO答案的范围。

相关问题