GLSL gl_Position 中的第四维是什么?

What's the fourth dimension in a GLSL gl_Position?

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

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

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

顺便说一下,我使用的是 OpenGL 3.2 和 GLSL 1.5。

gl_Position 是一个 Homogeneous coordinates. At orthographic projection the 4th component w is 1. As a result of a perspective projection,该组件采用不同于 1 的另一个值。

gl_Position可以转化为Cartesian coordinate in normalized device sapce by a Perspective divide

vec3 ndc = gl_Position.xyz / gl_Position.w;

gl_Position 是剪辑 space 坐标。在剪辑 space 中执行场景剪辑。
如果 xyz 分量在反转 w 分量和 [=13= 定义的范围内,则点在剪辑 space 中] 点的齐次坐标分量:

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

另见