我正在尝试了解与转换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
,如上面片段着色器中所述?
答案 0 :(得分:2)
是的,在顶点着色器中输出剪辑空间顶点后,gl_FragCoord
除以自动。
它发生在光栅化之前,因此在片段着色器运行之前发生。现在,一个有趣的怪癖是片段着色器中的窗口空间(w
),gl_FragCoord
= 1 / clip_w 。如果你试图使用nbins
再次划分,你实际上撤消了透视划分,事情会变得奇怪。
您可能希望除以 1 / clip.w ,但这不是其中之一。