我正在学习OpenGL,目前我正在编写一个着色器,但我不明白为什么gl_Position
变量是一个vec4
,而不是我期望的vec3
。我当然希望这样,因为它使用的是3D空间,而不是4D空间。
我希望我的假设至少是正确的,即gl_Position
的前三个字段确实是位置的x、y和z坐标。
如果我的问题不够清楚:gl_Position
的第四个字段是什么。
顺便说一下,我使用的是GLSL3.2和OpenGL 1.5。
发布于 2018-04-12 02:43:28
gl_Position
是一个Homogeneous coordinates。在orthographic projection中,第4个组件的w
为1。作为perspective projection的结果,该组件假定为1以外的另一个值。
在归一化的设备空间中,gl_Position
可以被Perspective divide转换为Cartesian coordinate。
vec3 ndc = gl_Position.xyz / gl_Position.w;
gl_Position
是剪辑空间坐标。在剪辑空间中,执行场景的剪辑。
如果x
、y
和z
分量位于由点的齐次坐标的反向w
分量和w
分量定义的范围内,则该点位于剪裁空间中:
-w <= x, y, z <= w.
https://stackoverflow.com/questions/49782148
复制相似问题