齐次裁剪空间 Homogenous Clip Space
在OpenGL等图形API中,顶点在通过顶点着色器(Vertex Shader)处理后,通常会输出一个 vec4 类型的位置变量,称为 gl_Position。这个 gl_Position 就处于 齐次裁剪空间(Homogeneous Clip Space)。
gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(vertexPosition, 1.0);该坐标将由GPU自动做以下处理:
- 裁剪:在齐次裁剪空间中,GPU会对坐标进行视锥体裁剪,规则如下:
-w ≤ x ≤ w-w ≤ y ≤ w-w ≤ z ≤ w只有满足这些条件的顶点,才会被继续处理,进入后续的光栅化步骤。否则,这个顶点所在的图元(如三角形)会被剔除或剪裁。
- 透视除法:将未被剔除的坐标进行透视除法计算,以获得
[-1, 1]范围的归一化设备坐标(NDC):x_ndc = x / wy_ndc = y / wz_ndc = z / w
归一化设备坐标 NDC
归一化设备坐标(Normalized Device Coordinates,简称 NDC)是图形渲染管线中的一个核心中间阶段,表示所有顶点在视图投影后的统一空间坐标,它是从齐次裁剪空间通过透视除法得到的。 归一化设备坐标是一个三维坐标系,其范围严格限制在:
x ∈ [-1, 1]y ∈ [-1, 1]z ∈ [-1, 1](OpenGL)、z ∈ [0, 1](DirectX) 在这个坐标系中:- x = -1 表示最左边,x = 1 表示最右边;
- y = -1 表示最下边,y = 1 表示最上边;
- z = -1(OpenGL)或 0(DirectX) 表示最前面,z = 1 表示最远处。
提示
NDC 是一个与分辨率、窗口大小无关的坐标系统。