2019-07-20

接着,我们说过齐次裁剪空间的z坐标范围有两种,一个是[0,1],一个是[-1,1],我们先计算[0,1]。这种转换,近裁剪面(n)转换到0,远裁剪面(f)转换到1,于是我们将坐标代入(注意我们所说的裁剪面n和f是距离)得到方程组

解方程组得到的结果是

将结果代入到转换矩阵里,我们就能得到最终的转换矩阵:
P_1=\begin{bmatrix}-\cot({\frac{xfov}{2}}) && 0 && 0 && 0\\ 0 && aspect·(-\cot{\frac{xfov}{2}}) && 0 && 0\\ 0 && 0 && \frac{f}{f-n} && \frac{n·f}{f - n}\\ 0 && 0 && 1 && 0\end{bmatrix}
投影矩阵有很多变种,嗯,多到头晕的变种。比如,之前我们为了方便计算,对转换后的坐标值乘以了一个z得到的

显然,我可以不乘z,如果我乘以一个-z得到的结果会是什么呢?

用这个结果去推导投影矩阵,得到的结果是:
P_2 = \begin{bmatrix}\cot({\frac{xfov}{2}}) && 0 && 0 && 0\\ 0 && aspect·(\cot{\frac{xfov}{2}}) && 0 && 0\\ 0 && 0 && \frac{f}{n-f} && \frac{n·f}{n - f}\\ 0 && 0 && -1 && 0\end{bmatrix}
很明显,P2 = -P1。这两个矩阵效果都一样吗?事实是,不一样!P1是一个无效的透视矩阵,P2才是有效的矩阵。这里涉及到裁剪的相关原理。

你可能感兴趣的:(2019-07-20)