在开发 3D 渲染器时,我遇到了这个问题。从我读到的内容来看,剪辑通常会在规范视图下像这样完成:
我对canonical view clipping的理解
但是,如果顶点像这样位于视锥之后:
相机后面的顶点
规范的视图体积变换会将顶点放在一个无意义的位置。
要裁剪这个三角形,我只能想到解决它与视锥体的交集。有没有办法用规范的视图体积来做到这一点?
今天我自己也为此苦苦挣扎。
根据...:
..裁剪是(并且必须)在透视划分之前执行。
引用重点:
您不能在顶点着色器中应用透视划分,因为那样会将位于相机后面的点投射到相机前面。由于顶点着色器不适用于整个图元,如果至少一个顶点位于相机后面而另一个顶点位于它前面,这将完全搞砸那里的任何图元。为了处理这种情况,必须在划分之前应用裁剪 - 因此名称为裁剪空间。
对我来说,这是有道理的,因为如果在透视划分(又名去均匀化/除以 w)之后进行裁剪,那么裁剪空间将与 NDC 几乎相同,这将使其变得多余。 (即,如果存在从剪辑空间到 NDC 的线性映射,为什么还要有剪辑空间?,您可以根据 NDC 定义剪辑,避免不必要的剪辑空间坐标系的复杂性。)
我不是很了解clip space,但是我找到了一些解释图形管线裁剪的其他相关资源: