OpenGL GL_Position 3D到2D屏幕空间

时间:2015-08-16 19:16:42

标签: opengl transformation

我正在尝试了解与转换3D相关的数学 指向2D屏幕位置。我知道该过程涉及从物体空间移动 - >世界空间 - >眼睛空间 - > clip space - > NDC空间 - > ViewPort空间(屏幕上的最终2D位置)

VertexShader:

GL_Position =  Projection Matrix * view Matrix * model Matrix * vec(Position,1); => clip space.

FragmentShader:

(Pseudo code)
  //assuming GL_position is received as a vec4 input variable

  vec2 Gl_position_ndc = (Gl_position.xy/Gl_position.w)/2+ .5; 
  (Gl_position_ndc -> GL_FragColor) after perspective division and converting to Normalized device Coordinate space

Fragment着色器中的这些自动透视分割和NDC转换是否会自动发生到从Vertex着色器接收的GL_Position,如上面片段着色器中所述?

1 个答案:

答案 0 :(得分:2)

是的,在顶点着色器中输出剪辑空间顶点后,gl_FragCoord除以自动。

它发生在光栅化之前,因此在片段着色器运行之前发生。现在,一个有趣的怪癖是片段着色器中的窗口空间(w),gl_FragCoord = 1 / clip_w 。如果你试图使用nbins再次划分,你实际上撤消了透视划分,事情会变得奇怪。

您可能希望除以 1 / clip.w ,但这不是其中之一。