透视投影理解

透视投影以视锥体为核心,将视锥体的点对应到\((-1,-1,-1) - (1,1,1)\)的立方体盒,\(视锥体 \to 裁剪坐标系\)

1. 投影面

\(d\)

高为\(2\),垂直于\(z\)轴的平面,距原点的距离为

\[\frac1d = tan(\frac{\alpha}2) \Rightarrow d=\frac1{tan(\frac{\alpha}2)}=cot(\frac{\alpha}2) \]

\((x_d, y_d)\)

任意点\(P\) 点投影到投影平面,其投影关系为:

\[\frac{y_d}d=\frac yz \Rightarrow y_d = \frac {y\cdot d}z = \frac {y\cdot cot(\frac{\alpha}2)}z \]

同理,

\[x_d = \frac {x\cdot cot(\frac{\alpha}2)}z \]

由于投影面\(XY\)存在宽高比 \(ar=\frac WH\),视锥体内\(x_d\) 还需要变换到\([-1,1]\)内,

\[x_{da} = \frac{x_d}{ar} \]

\((x_{da}, y_d)\)齐次化

用齐次坐标表示上述\((x_{da},y_d)\)坐标为

\[\begin{pmatrix} x_{da}\\ y_d\\ 0\\ 1 \end{pmatrix}=\begin{pmatrix} \frac {x\cdot cot(\frac{\alpha}2)}{ar\cdot z}\\ \frac {y\cdot cot(\frac{\alpha}2)}z\\ 0\\ 1 \end{pmatrix} = \frac1z \begin{pmatrix} \frac {x\cdot cot(\frac{\alpha}2)}{ar}\\ y\cdot cot(\frac{\alpha}2)\\ 0\\ z \end{pmatrix}\sim \begin{pmatrix} \frac {x\cdot cot(\frac{\alpha}2)}{ar}\\ y\cdot cot(\frac{\alpha}2)\\ 0\\ z \end{pmatrix} \]

上述坐标用矩阵可以描述为

\[\begin{pmatrix} \frac1{ar} &0 & 0 & 0\\ 0 &1 & 0 & 0\\ 0 &0 & 1 & 0\\ 0 &0 & 0 & 1\\ \end{pmatrix}\begin{pmatrix} cot(\frac{\alpha}2) & 0 & 0 & 0\\ 0 & cot(\frac{\alpha}2) & 0 & 0\\ 0 & 0 & 0 & 0\\ 0 & 0 & 1 & 0\\ \end{pmatrix}\begin{pmatrix} x\\ y\\ z\\ 1\\ \end{pmatrix} \tag{A-1} \]

在这里,没有使用\(z\)值,造成了中间矩阵为奇异阵。由于\(z=0\),上述映射关系不是线性变换,更不是线性同构。

裁剪坐标系

为了使投影成为一种变换,需要将\(z\)值考虑进来,我们考虑线段的缩放: \([n,f] \to[-1,1]\) ,设\(f(z) = Az + B\),经过透视除法之后结果变为下面的式子

\[A + \frac Bz \]

\(n,f\)代入上式,得

\[A + \frac Bn = -1 \\ A + \frac Bf = 1 \\ \]

\[\left.\begin{matrix} A + \frac Bn = -1 \\ A + \frac Bf = 1 \end{matrix}\right\}\Rightarrow B(\frac1f-\frac1n) = 2 \Rightarrow B = \frac{2nf}{n-f} \]

\[\left.\begin{matrix} B = \frac{2nf}{n-f} \\ A + \frac Bf = 1 \end{matrix}\right\}\Rightarrow A = 1 - \frac{2n}{n-f} = \frac{-n-f}{n-f} \]

我们将\((A-1)\)式中第三行替换成\([0 ,0, A, B]\), \((A-1)\)式变成

\[\begin{pmatrix} \frac1{ar} &0 & 0 & 0\\ 0 &1 & 0 & 0\\ 0 &0 & 1 & 0\\ 0 &0 & 0 & 1\\ \end{pmatrix}\begin{pmatrix} cot(\frac{\alpha}2) & 0 & 0 & 0\\ 0 & cot(\frac{\alpha}2) & 0 & 0\\ 0 & 0 & \frac{-n-f}{n-f} & \frac{2nf}{n-f} \\ 0 & 0 & 1 & 0\\ \end{pmatrix}\begin{pmatrix} x\\ y\\ z\\ 1\\ \end{pmatrix} =\begin{pmatrix} \frac {x\cdot cot(\frac{\alpha}2)}{ar}\\ y\cdot cot(\frac{\alpha}2)\\ Az+B\\ z \end{pmatrix}\sim \begin{pmatrix} \frac {x\cdot cot(\frac{\alpha}2)}{z\cdot ar}\\ \frac{y\cdot cot(\frac{\alpha}2)}z\\ A+\frac Bz\\ 1 \end{pmatrix} \tag{A-2} \]

最终的变换矩阵如下:

\[\begin{pmatrix} \frac1{ar}cot(\frac{\alpha}2) & 0 & 0 & 0\\ 0 & cot(\frac{\alpha}2) & 0 & 0\\ 0 & 0 & \frac{-n-f}{n-f} & \frac{2nf}{n-f} \\ 0 & 0 & 1 & 0\\ \end{pmatrix}\tag{A-3} \]

在用投影矩阵乘上顶点坐标之后,顶点坐标被变换到我们所说的裁剪坐标系之下,在执行透视除法之后顶点坐标被变换到了 NDC 坐标系(NormalizedDeviceCoordinates)之下。

\(\alpha\neq 0,n\neq f\)的情况下,\((A-3)\)式矩阵可逆矩阵,其变换为线性变换,并且是同构变换。

posted @ 2021-07-08 17:19  一花一世界,一叶一乾坤  阅读(435)  评论(0编辑  收藏  举报