关于透视投影矩阵的讲解,网上有不少教程,但是有一点大家基本上都没有讲清楚:就是z轴坐标(这里的Z轴相当于景深)的推导过程,基本上是一笔带过。
下面先从头开始讲推导过程,再慢慢说Z轴的推导过程。
透视投影如下图:
透视投影的过程如下:所观察的物体在一个半截面的方锥形中,设坐标为P,将P投影到近截面上,坐标为P’;如下图:
推导P'很简单,就是几何概念相似三角形,推导过程如下图:
大家注意,P’处的Z'坐标就是从视点O到近截面的距离。
但是大家可以考虑这样一个问题:那所有的物体在近截面的投影Z坐标都一样,那这样Z坐标就会失去它的作用:确定物体的远近距离。所以此时Z’先保留Z的原本值,不取OQ’这个值。
在视点O处,就是摄影机的位置,有一个长度为1的正方体(概念上叫视锥体),P'再次归一化(归一化的概念大家请看齐次坐标学习!)到这个正方体中(有点像咱们在电脑上处理图片的时候,把图片缩小到一个长和宽都为1的相框里),如下图:
推导P'’的过程如下:
首先先明确一个概念:近截面的长为W,宽为H,那么近截面的X轴正方向坐标的最大坐标(H/2, 0),归一化到正方体上的坐标是(1,0),同理负坐标(-H/2, 0)对应到(-1,0),同理Y轴正方向(0, W/2)归一化到(0,1),Y轴负方向(0, -W/2)归一化到(0,-1)。
又因为P''和P'的坐标关系是线性关系
同时
所以可以推导出
所以
同理可以推导出X''坐标
至此我们推导出了P''处X''和Y‘’,我们还没有推导出Z'',先看P‘’处坐标
此时,我们就需要齐次坐标了,将P''改为齐次坐标
同时我们设透视投影矩阵为
可得
大家如果看网上的资料,上面的推导过程大家可能都说的一样,但下面这一点我是基本上没看见有人说的,那就是因为在齐次坐标中,如下图
即:P‘’*W = P
然后我们另W=-Z,可得
代入透视投影矩阵:
所以可得Z‘’和Z关系:
再有
可得
所以透视投影矩阵为: