投影变换的推导

投影变换的推导

五月 31, 2020

这里我们说到的投影分为两种:

  • 正交投影(Orthographic projection (O))
  • 透视投影(Perspective projection (P))

img

正交投影(Orthographic projecton)

先来说一说最简单的正交投影,我们需要做的是:

  • 定义一个的立方体
  • 然后将定义的立方体转换成“标准(canonical)”立方体

img

如上图,我们想要把最左边的长方体变成最右边的立方体,需要两步:

  • 平移(Translate)
  • 缩放(Scale)

平移(Translate)

首先我们要做的操作就是平移,先把长方体的中心点移至原点(origin)。因为我们已经知道l,r,b,t,f,n六个参数,所以我们可以计算出当前长方体的中心点,即:

那么平移变换矩阵就应该是一个单位矩阵加上平移部分,要想将长方体的中心点移至原点(origin),只需要把所有点都减去长方体的中心点即可。

缩放(Scale)

有了平移变换,接下来要做的就是缩放了,将每个点都等比缩放至立方体上。那么的比例为的比例为的比例为(因为相机照像方向,所以大)。

两种变换相乘

将平移和缩放融合在一起,即两矩阵相乘:

透视投影(Perspective projection)

透视投影相对于正交投影就比较困难了,不过我们可以换一种思路

  • 首先,把视锥体(view frustum)挤扁成一个立方体(cuboid)()
  • 然后,我们通过正交投影,即可把远平面投影至近平面

img

把视锥体(view frustum)挤扁成一个立方体(cuboid)

在挤压的过程中,我们需要规定几件事情:

  • 近平面上的任意点都不会改变
  • 远平面上的值不变,永远都是
  • 远平面上的中心点不变

下面我们来寻找一下近平面和远平面之间的点的关系,从视锥体的右侧观察,如下图:

img

通过相似三角形的性质,可以得出,同理,

因为暂时未知,那么我们可以得出,点经过变换后,可以得到点

通过齐次坐标,我们可以将点转换为点

所以,

根据上述等式,我们已经可以反推出:

那么未知的第三行应该如何推算呢?我们可以思考两个特殊条件:

  • 近平面上任意点在做变换后,不会改变
  • 远平面上任意点的z值在做变换后,不会改变

近平面上任意点变换后不会改变

取近平面上点,通过齐次坐标,可以转换为点。则:

我们单独解出变换矩阵的第三行,即:

因为等式结果等于,与值并没有关系,所以得出:

可得出(1)式,

远平面上任意点的z值变换后不会改变

因为开始时,我们规定远平面中心点在变换后,仍然不改变,所以我们取远平面的中心点,通过齐次坐标,我们可以将点转换为

则,

因为等式结果等于,与值并没有关系,所以得出:

可得出(2)式,

由(1)式和(2)式解得:

所以,得出:

通过正交投影把远平面投影至近平面

正交投影的变换矩阵在上边我们已经求出,且也已求出,所以我们可以通过矩阵乘法求得

即,