我正在学习OpenGL,目前我正在编写着色器,但我很困惑为什么gl_Position
变量是vec4
而不是vec3
,因为我期待。我当然希望这是因为它使用3D空间,而不是4D。
我希望我至少正确地假设gl_Position
的前三个字段确实是该位置的x,y和z坐标。
如果我的问题不够明确:gl_Position
的第四个字段是什么。
顺便说一下,我正在使用OpenGL 3.2和GLSL 1.5。
答案 0 :(得分:2)
gl_Position
是Homogeneous 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
是剪辑空间坐标。在剪辑空间中,执行场景剪辑
如果x
,y
和z
组件位于由反向w
组件和w
组件定义的范围内,则点位于剪辑空间中点的齐次坐标:
-w <= x, y, z <= w.