我正在学习 OpenGL,目前我正在编写一个着色器,但我很困惑为什么 gl_Position
变量是 vec4
而不是 vec3
,正如我所料。我当然希望这样做,因为它使用 3D 空间,而不是 4D。
我希望我至少对 gl_Position
的前三个字段的假设是正确的。确实是位置的 x、y 和 z 坐标。
如果我的问题不够清楚: gl_Position
的第四个字段是什么? .
顺便说一下,我使用的是 OpenGL 3.2 和 GLSL 1.5。
最佳答案
gl_Position
是 Homogeneous coordinates .在 orthographic projection第四部分 w
是 1。由于 perspective projection ,该分量采用 1 以外的其他值。gl_Position
可以转换为Cartesian coordinate在标准化设备空间中由 Perspective divide .
vec3 ndc = gl_Position.xyz / gl_Position.w;
gl_Position
是剪辑空间坐标。在剪辑空间中执行场景的剪辑。如果
x
,一个点在裁剪空间中, y
和 z
组件在倒置 w
定义的范围内组件和 w
点齐次坐标的分量:-w <= x, y, z <= w.
另见 Transform the modelMatrix
关于opengl - GLSL gl_Position 中的第四维是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49782148/