Skip to content

Latest commit

 

History

History
35 lines (24 loc) · 2.82 KB

关于透视投影矩阵的推导.md

File metadata and controls

35 lines (24 loc) · 2.82 KB

关于透视投影矩阵的推导

图形学:正交/透视投影矩阵的推导(多个思路) - 知乎 (zhihu.com)


介绍

透视投影的目标是:将摄像机前方一个截锥体体积范围内的坐标映射到方形的视图体积($[l,r]\times[b,t]\times[n,f]$)中。

对每个坐标分量的要求: 对于 x 分量和 y 分量而言,只需要按照 z 轴的距离按比例缩小到近平面就行,期望的大小是$xn / z$和$yn / z$。

对于 z 分量而言,我们希望变换后的 z 分量$x'$保持两个特性:

  1. 在近平面上,z'=n。而在远平面上,z'=f。
  2. 而当 z'介于 n 和 f 之间时,我们希望 z'能够保持单调性,即当存在近远两个物体时,变换后,远物体仍然比近物体远,而近物体仍然比远物体近。(无需保证其线性的性质,事实上,处理后的 z'时关于 z 的反比例函数)

推导

接下来跟着作者的思路推导投影变换公式: 首先对于 x 和 y,我们希望它能保持相对的大小,缩放的事情交给透视除法(w'负责缩放),而且它们和其他的分量不存在线性关系(x 和 y 都与 z 有关,但不是线性的关系)。 $$\begin{bmatrix} x'\y'\z'\w' \end{bmatrix}=\begin{bmatrix} 1&0&0&0\0& 1&0&0\ \cdot&\cdot&\cdot&\cdot \ \cdot&\cdot&\cdot&\cdot \end{bmatrix}\cdot \begin{bmatrix} x\y\z\1 \end{bmatrix}$$ 接下来考虑矩阵的第四行,第四行控制新向量的 w‘,这里的 w'只会和 z 有关(我们需要透视除法帮我们纠正 x'和 y') $$\begin{bmatrix} x'\y'\z'\w' \end{bmatrix}=\begin{bmatrix} 1&0&0&0\0& 1&0&0\ \cdot&\cdot&\cdot&\cdot \ 0&0& \frac{1}{n} &0 \end{bmatrix}\cdot \begin{bmatrix} x\y\z\1 \end{bmatrix}$$ 再之后是矩阵的第三行,它控制的是 z',显然 z'应当与 x 和 y 都无关: $$\begin{bmatrix} x'\y'\z'\w' \end{bmatrix}=\begin{bmatrix} 1&0&0&0\0& 1&0&0\ 0&0&\cdot&\cdot \ 0&0& \frac{1}{n} &0 \end{bmatrix}\cdot \begin{bmatrix} x\y\z\1 \end{bmatrix}$$ 此时矩阵剩下最后两个参数,先考虑单参的情况:

  1. 如果 P33 是参数,解出来的 z'是一个与 z 无关的量,意味着远近的物体不再有 z 轴上的区别,这不是我们想要的。
  2. 如果 P34 是参数,能得到一个与 z 相关的 z',但是两个边界条件(在近平面上,z'=n。而在远平面上,z'=f)解出来的 P34 是不同的,说明 P34 单参的情况无解。

因此可以确定最后两个空位都是参数,两个参数待定求解出来得到完整的投影矩阵: $$\begin{bmatrix} x'\y'\z'\w' \end{bmatrix}=\begin{bmatrix} 1&0&0&0\0& 1&0&0\ 0&0&\ \frac{n+f}{n}&-f \ 0&0& \frac{1}{n} &0 \end{bmatrix}\cdot \begin{bmatrix} x\y\z\1 \end{bmatrix}$$