GLSL gl_Position的第四个维度是什么?

时间:2018-04-11 18:29:26

标签: opengl glsl perspectivecamera

我正在学习OpenGL,目前我正在编写着色器,但我很困惑为什么gl_Position变量是vec4而不是vec3,因为我期待。我当然希望这是因为它使用3D空间,而不是4D。

我希望我至少正确地假设gl_Position的前三个字段确实是该位置的x,y和z坐标。

如果我的问题不够明确:gl_Position的第四个字段是什么。

顺便说一下,我正在使用OpenGL 3.2和GLSL 1.5。

1 个答案:

答案 0 :(得分:2)

gl_PositionHomogeneous coordinates。在orthographic projection,第4个分量w为1.作为perspective projection的结果,该分量假定的值不是1。

gl_Position可以通过Cartesian coordinate转换为规范化设备sapce中的Perspective divide

vec3 ndc = gl_Position.xyz / gl_Position.w;

gl_Position是剪辑空间坐标。在剪辑空间中,执行场景剪辑 如果xyz组件位于由反向w组件和w组件定义的范围内,则点位于剪辑空间中点的齐次坐标:

-w <=  x, y, z  <= w.

另见Transform the modelMatrix