OpenGL为什么在剪辑坐标中执行图元的剪辑?至少理论上可以在规范化的设备坐标中完成吗?

#1 楼

剪辑空间之后的空间是归一化设备坐标空间,该空间是通过将clip.xyz除以clip.w获得的。如果W为零...哎呀。

哦,可以的,您可以进行条件测试以查看W是零还是非常接近零。或者,您可以只在剪辑空间中进行剪辑数学,而不必担心。裁剪后的顶点不能将W设置为零,因为每个顶点的裁剪框都基于处于封闭范围内(-W,W)。并且如果W为0,则闭合范围为空集,因此顶点不在该范围内。

此外,W的负值在剪切空间之外。闭合范围(-W,W)在W为负的情况下反转,但范围本身的含义不是。考虑W为-1;范围变为(1,-1)。没有同时大于1和小于-1的数字。因此,该空间为空。

但是,用负W进行除法仍然可以将NDC点降落在[-1,1] NDC空间范围内,如果您不这样做,它们将不会被裁剪。事先剪一下。

评论


$ \ begingroup $
此外,W <0表示摄像机后方的点。因此,如果先除以W,则无法分辨点/图元是在相机后面还是在相机前面。
$ \ endgroup $
–内森·里德(Nathan Reed)
17年11月26日在3:05

$ \ begingroup $
最后一个事实对我来说似乎最重要
$ \ endgroup $
–诺兰
17年11月28日在12:46

$ \ begingroup $
但是我怀疑这是真的。您可以证明还是提供示例?
$ \ endgroup $
–诺兰
17年11月28日在14:44

$ \ begingroup $
@Nolan:点(0,0,0,-1)。除以-1,并且在[-1,1]范围内。但这不能在[1,-1]范围内,因为那是一个空集。
$ \ endgroup $
–尼科尔·波拉斯(Nicol Bolas)
17年11月28日在15:10

$ \ begingroup $
乘以投影矩阵后,无法获得点(0,0,0,-1)。它要求初始点的w坐标等于0或具有怪异的投影平面(例如,负近点或远近点近)。
$ \ endgroup $
–诺兰
17年11月28日在16:50

#2 楼

可以在归一化的设备坐标中进行裁剪,因为所有z坐标在-1到1之外的图元都在裁剪平面之外。但是,没有理由不考虑剪辑坐标中从-w到w的z坐标。

从理论上讲是可能的。但是,似乎在剪辑坐标中进行剪辑时性能有所提高。通过先比较透视图分割之前的z坐标,它可以通过不为裁剪后的图元计算透视图分割来节省时间。这意味着更少的分割操作。这种有利的浮点除法可能需要几个处理周期。

另请参阅此相关问题中的答案