投影变换的推导
五月 31, 2020
这里我们说到的投影分为两种:
- 正交投影(Orthographic projection (O))
- 透视投影(Perspective projection (P))
正交投影(Orthographic projecton)
先来说一说最简单的正交投影,我们需要做的是:
- 定义一个的立方体
- 然后将定义的立方体转换成“标准(canonical)”立方体
如上图,我们想要把最左边的长方体变成最右边的立方体,需要两步:
- 平移(Translate)
- 缩放(Scale)
平移(Translate)
首先我们要做的操作就是平移,先把长方体的中心点移至原点(origin)。因为我们已经知道l,r,b,t,f,n六个参数,所以我们可以计算出当前长方体的中心点,即:
那么平移变换矩阵就应该是一个单位矩阵加上平移部分,要想将长方体的中心点移至原点(origin),只需要把所有点都减去长方体的中心点即可。
缩放(Scale)
有了平移变换,接下来要做的就是缩放了,将每个点都等比缩放至立方体上。那么和的比例为,和的比例为,和的比例为(因为相机照像方向,所以比大)。
两种变换相乘
将平移和缩放融合在一起,即两矩阵相乘:
透视投影(Perspective projection)
透视投影相对于正交投影就比较困难了,不过我们可以换一种思路
- 首先,把视锥体(view frustum)挤扁成一个立方体(cuboid)()
- 然后,我们通过正交投影,即可把远平面投影至近平面
把视锥体(view frustum)挤扁成一个立方体(cuboid)
在挤压的过程中,我们需要规定几件事情:
- 近平面上的任意点都不会改变
- 远平面上的值不变,永远都是
- 远平面上的中心点不变
下面我们来寻找一下近平面和远平面之间的点的关系,从视锥体的右侧观察,如下图:
通过相似三角形的性质,可以得出,同理,。
因为暂时未知,那么我们可以得出,点经过变换后,可以得到点。
通过齐次坐标,我们可以将点转换为点。
所以,
根据上述等式,我们已经可以反推出:
那么未知的第三行应该如何推算呢?我们可以思考两个特殊条件:
- 近平面上任意点在做变换后,不会改变
- 远平面上任意点的z值在做变换后,不会改变
近平面上任意点变换后不会改变
取近平面上点,通过齐次坐标,可以转换为点。则:
我们单独解出变换矩阵的第三行,即:
因为等式结果等于,与和值并没有关系,所以得出:
可得出(1)式,
远平面上任意点的z值变换后不会改变
因为开始时,我们规定远平面中心点在变换后,仍然不改变,所以我们取远平面的中心点,通过齐次坐标,我们可以将点转换为。
则,
因为等式结果等于,与和值并没有关系,所以得出:
可得出(2)式,
由(1)式和(2)式解得:
所以,得出:
通过正交投影把远平面投影至近平面
正交投影的变换矩阵在上边我们已经求出,且也已求出,所以我们可以通过矩阵乘法求得。
即,
查看评论