在此tutorial on shadow volumes处,无穷远处有必要的顶点。我理解无限远点的概念,我只是不明白它们如何与openGL一起工作。
如果顶点的w为0,则透视除法会发生什么?无穷远处的所有点是否都映射到NDC空间中-1到1范围边缘的某个点?这是如何实现的?
答案 0 :(得分:3)
我不知道硬件内部如何工作,但这取决于您的投影矩阵。 我会尝试一个有希望的直观解释: 根据{{3}}中的透视投影矩阵 如果您的远平面处于有限距离,则任何具有w = 0的顶点将被剪掉,因为投影矩阵乘以(x,y,z,0)将导致[-1,1]之外的值。 阴影卷将缺少后盖并提供错误的结果(有限阴影卷可以解决此问题)。 如果您的远平面位于无穷远处,则投影矩阵将如下所示:
* 0 0 0
0 * 0 0
0 0 -1 *
0 0 -1 0
在透视分割之后,与(x,y,z,0)的乘法导致(*,*,z,z)=(*,*,1)。 z组件(阴影卷的后盖)现在位于[-1,1]内,并将被深度缓冲区捕获。
有关无限投影矩阵的更多信息:http://www.songho.ca/opengl/gl_projectionmatrix.html