从剪辑空间到屏幕坐标的转换是什么时候发生的?

Geo*_*y91 31 opengl graphics rendering hlsl

我正在研究渲染管道,当我到达剪辑阶段时,我们解释说,从视图(眼睛或相机)空间我们必须传递到剪辑空间,也称为规范化设备空间(NDC),即立方体空间从-1到1.

但是,现在我不明白从这个空间到屏幕坐标空间的通道何时发生:

  1. 剪切后和光栅化之前?

  2. 光栅化后和剪刀和z测试之前?

  3. 在写入帧缓冲区之前的最后?

And*_*man 45

不,剪辑空间和NDC空间不是一回事.

剪辑空间实际上距离NDC一步,所有坐标除以Clip.W产生NDC.该范围以外的任何东西[ -1,1 ]中得到的NDC空间对应于一个点,是剪辑体积之外.NDC之前的坐标空间被称为剪辑空间是有原因的;)

然而,严格来说,NDC空间不一定是立方的.确实,NDC空间是OpenGL中的一个多维数据集,但在Direct3D中它不是.在D3D中,NDC空间中的Z坐标范围为0.01.0,而GL中的范围从-1.01.0.X和Y在GL和D3D中表现相同(即,它们的范围从-1.01.0).NDC是标准坐标空间,但它在不同的API中具有不同的表示.

最后,在光栅化期间发生NDC空间到屏幕空间(AKA窗口空间),并由视口和深度范围定义.片段位置在任何其他坐标空间中都没有意义,这就是光栅化产生的:片段.


更新:

在OpenGL 4.5中引入,扩展GL_ARB_clip_control允许您在GL中采用D3D的NDC约定.

传统的OpenGL行为是:

glClipControl (GL_LOWER_LEFT, GL_NEGATIVE_ONE_TO_ONE);
Run Code Online (Sandbox Code Playgroud)

Direct3D行为可以通过以下方式实现:

glClipControl (GL_UPPER_LEFT, GL_ZERO_TO_ONE); // Y-axis is inverted in D3D
Run Code Online (Sandbox Code Playgroud)

  • 这个答案可能有点误导.剪辑空间和NDC在概念上是相同的东西,只是以不同的形式表示 - 一个在齐次坐标中,另一个在笛卡尔坐标中.在这种转换中唯一丢失的是能够在无穷远处表示点数.所以是的,虽然它们在实践中是不同的东西(也就是说,你必须做一个从一个到另一个的操作),它们实际上代表了相同的底层模型. (9认同)
  • 这是正确的,但是关于剪辑空间的事情是,它没有被标准化:) `w` 坐标定义了剪辑空间和 NDC 空间中剪辑体积的范围,但在 NDC 空间中,`w` 是**1.0** 一切都已标准化。在剪辑空间中,每个顶点都可以以不同的“w”坐标定义自己的比例存在;一旦转换到 NDC 空间,所有顶点都一致并且更易于使用。 (2认同)
  • @AndonM.Coleman - 感谢非常有用的评论!我还是有疑问,请问可以帮忙吗?基本上,在我在网上找到的所有来源([链接一个以供参考](http://www.songho.ca/opengl/gl_projectionmatrix.html))中,NDC 空间显示为立方体。我应该如何看待剪辑空间?它也是一个立方体,还是一个像眼睛空间一样的透视截头体(因为在它的内部我们可以表示无穷远的点)?将从剪辑到 NDC 的操作视为将第一个射线映射到第二个点中是否正确,还是 1 比 1? (2认同)

use*_*490 11

剪辑空间和NDC(规范化设备坐标)不是一回事,否则它们将没有不同的名称.

剪辑空间是投影矩阵在点变换之后但在归一化之前空间点所处的位置w.

NDC空间是归一化后的空间点w.

http://www.scratchapixel.com/lessons/3d-basic-rendering/perspective-and-orthographic-projection-matrix/projection-matrix-GPU-rendering-pipeline-clipping

Camera space --> 
x projection matrix ---> 
Clip space (before normalisation) --->
Clipping ---> 
Normalisation by w (x/w, y/w, z/w) --->
NDC space (in the range [-1, 1] in x and y)
Run Code Online (Sandbox Code Playgroud)

  • 不要挑剔,但有很多坐标空间有多个名字.例如,不幸的是,眼睛空间,视野和相机空间都是一样的.窗口空间和屏幕空间也是同一个词的两个词._NDC和剪辑空间绝对不是两个意思相同的词,那是真的. (15认同)
  • 将每个分量除以"w"分量的步骤不称为"归一化",它被称为*透视分割*,其目的是将顶点从均匀空间转换为笛卡尔空间(即投影它们).确实,它们最终会出现在标准化的设备空间中,但这并不意味着顶点是"标准化的".归一化实际表示为向量的顶点是非常不同的. (3认同)