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 中执行场景剪辑。
如果 x
、y
和 z
分量在反转 w
分量和 [=13= 定义的范围内,则点在剪辑 space 中] 点的齐次坐标分量:
-w <= x, y, z <= w.
另见
我正在学习 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 中执行场景剪辑。
如果 x
、y
和 z
分量在反转 w
分量和 [=13= 定义的范围内,则点在剪辑 space 中] 点的齐次坐标分量:
-w <= x, y, z <= w.
另见