投影矩阵的具体推导

正交投影

正交投影的步骤是先平移到世界原点,然后进行缩放,把视界体缩放成长度为2的正方体,取值为$[-1,1]^3$:

Untitled

左极端点为$(left,bottom,-near)$,右极端点为$(right,top,-far)$

用矩阵变换描述上述过程:

其中,平移的时候,应当让视见体的中心$\left(
\frac{right+left}{2},
\frac{top+bottom}{2},
-\frac{near+far}{2}
\right)$移动到世界原点,于是平移矩阵如下:

然后进行放缩,将长度为$right-left,top-bottom,near-far$的长宽高的视界体放缩为长宽高均为2的正方体$[-1,1]^3$。

显然,放缩矩阵为:

因此:

透视投影

Untitled

步骤为,先压扁,后正交:

首先计算$M_p$,根据相似三角形:

Untitled

注意这里的n和z的实际值都是负值,n是near:

这样就可以得到:

不难得出:

为了求解完整的矩阵,可以参考透视投影矩阵的两个规则:

(1) 近平面内的所有坐标的z在变换后保持不变

(2) 远平面内的所有坐标的z在变换后保持不变

对于(1)而言,任意近平面的坐标为$\left[\begin{matrix}
x & y & -n & 1
\end{matrix}\right]$,那么:

可以知道$M_P$的第三行为$\left[\begin{matrix}
0 & 0 & A & B
\end{matrix}\right]$,使得:

计算得出:

对于(2)而言,任意远平面的坐标为$\left[\begin{matrix}
x & y & -f & 1
\end{matrix}\right]$,那么:

可以知道$M_P$的第三行为$\left[\begin{matrix}
0 & 0 & A & B
\end{matrix}\right]$,使得:

计算得出:

联立方程组,解出:

所以:

所以:

简化透视投影矩阵

上面的透视投影矩阵推导是基于视见体函数的推导:

Untitled

我们可以使用转换成基于透视函数的推导(消除$left,right,bottom,top$):

Untitled

只需要将视见体函数的参数修改为标准对称的视见体:

$fov$ 为视场角,$aspect$ 是宽长比,一般为窗口的宽长比值:

Untitled

这样透视投影矩阵就可以简化成:

又因为:

所以进一步得到最简形式:

Author

InverseDa

Posted on

2023-03-17

Updated on

2023-03-30

Licensed under

Comments

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×