OpenGL:Cubemap hack 总是有 z=1

OpenGL : Cubemap hack to always have z=1

在立方体贴图 this resource 之后,它使用了一个技巧,使立方体贴图始终位于 z=1 和 gl_Position = pos.xyww。使用透视分割,每个像素的深度将设置为 w / w = 1。我对此有一些疑问。

void main()
{
    vec4 pos = projection * view * vec4(aPos, 1.0);
    gl_Position = pos.xyww;
} 

以及一些辅助问题:

剪辑是在剪辑 space 中完成的,而不是在标准化设备 space 中完成的。裁剪规则为-w < x, y, z < w。如果 w < 0,则不满足此规则。所以剪辑坐标 w < 0 被剪辑。在透视投影中,相机“后面”的剪辑位置具有负 w 分量。透视划分是渲染管线的一部分。当 w==z.
时,您可以相信 z/w 为 1 您不能在顶点着色器中进行透视划分,因为透视划分从剪辑 space 转换为规范化设备 space。结果,裁剪不再有效,因为 -1 < z/w < 1 也满足 w < 0z == w.