Jac*_*rby 4 opengl shader glsl perspectivecamera
我正在学习 OpenGL,目前我正在编写一个着色器,但我很困惑为什么gl_Position变量是 avec4而不是 a vec3,正如我所期望的。我当然希望这样做,因为它使用 3D 空间,而不是 4D。
我希望我至少正确地假设 的前三个字段gl_Position确实是位置的 x、y 和 z 坐标。
如果我的问题还不够清楚:gl_Position.的第四个字段是什么?
顺便说一下,我使用的是 OpenGL 3.2 和 GLSL 1.5。
gl_Position是 齐次坐标。在正交投影中,第 4 个分量w是 1。作为透视投影的结果,该分量采用 1 以外的其他值。
gl_Position可以通过透视除法转换为归一化设备空间中的笛卡尔坐标。
vec3 ndc = gl_Position.xyz / gl_Position.w;
Run Code Online (Sandbox Code Playgroud)
gl_Position是剪辑空间坐标。在剪辑空间中执行场景的剪辑。
如果x、y和z分量在由倒置w分量和w点的齐次坐标分量定义的范围内,则点在裁剪空间中:
-w <= x, y, z <= w.
Run Code Online (Sandbox Code Playgroud)
另见变换模型矩阵