浏览量:1,078

齐次表示

齐次表示在图形学中占有非常重要的位置。点表示三维空间中的一个位置,向量表示一个方向,没有具体的位置。使用\(3\times 3\)的矩阵,可以对坐标进行仿射变换,比如旋转、缩放以及错切变换等,然而使用这种矩阵并不能进行平移变换。点的平移是有意义的,但是向量的平移是没有意义的。

简单来说,在三维空间上,点和向量的表示都是3维的,把扩展1维,就得到齐次向量表示,即\(\vec{p}=\left( {{p}_{x}},{{p}_{y}},{{p}_{z}},{{p}_{w}} \right)\)。若\({{p}_{w}}\)为零,\(\vec{p}\)表示一个三维向量;若\({{p}_{w}}\)非零,则\(\vec{p}\)表示点\(\left( {{p}_{x}}/{{p}_{w}},{{p}_{y}}/{{p}_{w}},{{p}_{z}}/{{p}_{w}} \right)\)

齐次向量扩展1维,那么原先由\(3\times 3\)的矩阵表示的变换也需要扩展1维,变成\(4\times 4\)的齐次矩阵。\(4\times 4\)的齐次矩阵可以实现旋转、缩放和错切变换,形式为:

\[M = \left( {\begin{array}{*{20}{c}}{{m_{00}}}&{{m_{01}}}&{{m_{02}}}&0\\{{m_{10}}}&{{m_{11}}}&{{m_{12}}}&0\\{{m_{20}}}&{{m_{21}}}&{{m_{22}}}&0\\0&0&0&1\end{array}} \right)\]

\(3\times 3\)矩阵不能表示的位移变换,也可以采用\(4\times 4\)的齐次矩阵来表示

\[T = \left( {\begin{array}{*{20}{c}}1&0&0&{{t_x}}\\0&1&0&{{t_y}}\\0&0&1&{{t_z}}\\0&0&0&1\end{array}} \right)\]

易知,若\(\vec{v}\)是一个向量\(\vec{v}=\left( {{v}_{x}},{{v}_{y}},{{v}_{z}},0 \right)\),则\(T\cdot \vec{v}\)得到的结果仍等于\(\vec{v}\),因为向量的位移是没有意义的。

2016-09-24

图1. 点的透视投影

齐次表示除了能表表三维空间上所有的仿射变换(两条互相平面的直线,变换后,仍然互相平行),还可以表示透视变换,参见文章《OpenGL原理介绍》,如图1所示。一个点\(P=\left( {{p}_{x}},{{p}_{y}},{{p}_{z}} \right)\)投影到照相机的近平面上\(\left( {{x}^{*}},{{y}^{*}} \right)\)\({{p}_{z}}\)是在\(z\)轴的负方向上,\(N\)表示投影平面到源点的距离,则有\({{x}^{*}}/{{p}_{x}}=N/\left( -{{p}_{z}} \right)\),则\({{x}^{*}}=N{{p}_{x}}/\left( -{{p}_{z}} \right)\),同理,有\({{y}^{*}}=N{{p}_{y}}/\left( -{{p}_{z}} \right)\),即:

\(\left( {{x}^{*}},{{y}^{*}} \right)=\left( N\frac{{{p}_{x}}}{-{{p}_{z}}},N\frac{{{p}_{y}}}{-{{p}_{z}}} \right)\)

透视变换不能把深度信息给丢弃掉,所以图形学里面引入了伪深度的概念,来表示\(z\),透视变换后的坐标为:

\(\left( {{x}^{*}},{{y}^{*}},{{z}^{*}} \right)=\left( N\frac{{{p}_{x}}}{-{{p}_{z}}},N\frac{{{p}_{y}}}{-{{p}_{z}}},\frac{a{{p}_{z}}+b}{-{{p}_{z}}} \right)\)

其中,\(a=-\frac{F+N}{F-N},b=-\frac{2NF}{F-N}\)

我们很容易用4x4的齐次矩阵来表示透视变换,如下所示:

\[\left( {\begin{array}{*{20}{c}}N&0&0&0\\0&N&0&0\\0&0&a&b\\0&0&{ - 1}&0\end{array}} \right)\left( {\begin{array}{*{20}{c}}{wp}\\{w{p_y}}\\{w{p_z}}\\w\end{array}} \right) = \left( {\begin{array}{*{20}{c}}{wN{p_x}}\\{wN{p_y}}\\{w(a{p_z} + b)}\\w\end{array}} \right)\]

\(4\times 4\)的齐次矩阵既可以表示仿射变换也可以表示透视变换,大大简化了硬件的设计要求,图形学中起到了非常重要的位置。

 

 

spacer

Leave a reply