坐标变换矩阵与视角矩阵推导

假设现在世界空间里的3个坐标轴为 x = ( 1 , 0 , 0 ) T \boldsymbol{x}=\left( 1,0,0 \right) ^T x=(1,0,0)T, y = ( 0 , 1 , 0 ) T \boldsymbol{y}=\left(0,1,0\right)^T y=(0,1,0)T, z = ( 0 , 0 , 1 ) T \boldsymbol{z}=\left(0,0,1\right)^T z=(0,0,1)T,局部空间中使用的三个坐标轴为 u \boldsymbol{u} u, v \boldsymbol{v} v, w \boldsymbol{w} w,则假设局部空间的旋转矩阵为 O 2 W \boldsymbol{O2W} O2W,即经过此矩阵变换,能在保持相对空间中的 x \boldsymbol{x} x, y \boldsymbol{y} y, z \boldsymbol{z} z相互垂直的情况下,将其旋转至和世界空间 u \boldsymbol{u} u, v \boldsymbol{v} v, w \boldsymbol{w} w朝向完全重合.用矩阵运算表示即为: ( O 2 W ) x = u \left( \boldsymbol{O}2\boldsymbol{W} \right) \boldsymbol{x}=\boldsymbol{u} (O2W)x=u ( O 2 W ) y = v \left( \boldsymbol{O}2\boldsymbol{W} \right) \boldsymbol{y}=\boldsymbol{v} (O2W)y=v ( O 2 W ) z = w \left( \boldsymbol{O}2\boldsymbol{W} \right) \boldsymbol{z}=\boldsymbol{w} (O2W)z=w
我们先来关注下第一个式子,将其展开,即为
[ ? ? ? ? ? ? ? ? ? ] [ 1 0 0 ] = [ u x u y u z ] \left[ \begin{matrix} ?& ?& ?\\ ?& ?& ?\\ ?& ?& ?\\ \end{matrix} \right] \left[ \begin{array}{c} 1\\ 0\\ 0\\ \end{array} \right] =\left[ \begin{array}{c} u_x\\ u_y\\ u_z\\ \end{array} \right] ?????????100=uxuyuz
看到这个应该就能立马得到第一列即为 u \boldsymbol{u} u,故
[ u x ? ? u y ? ? u z ? ? ] [ 1 0 0 ] = [ u x u y u z ] \left[ \begin{matrix} u_x& ?& ?\\ u_y& ?& ?\\ u_z& ?& ?\\ \end{matrix} \right] \left[ \begin{array}{c} 1\\ 0\\ 0\\ \end{array} \right] =\left[ \begin{array}{c} u_x\\ u_y\\ u_z\\ \end{array} \right] uxuyuz??????100=uxuyuz
同理,我们运用第二三个式子则可以推断出 O 2 W \boldsymbol{O2W} O2W的最终形式: O 2 W = [ u x v x w x u y v y w y u z v z w z ] \boldsymbol{O}2\boldsymbol{W}=\left[ \begin{matrix} u_x& v_x& w_x\\ u_y& v_y& w_y\\ u_z& v_z& w_z\\ \end{matrix} \right] O2W=uxuyuzvxvyvzwxwywz
则它的逆矩阵 W 2 O \boldsymbol{W2O} W2O,也可轻松获得,因为 O 2 W \boldsymbol{O2W} O2W是正交矩阵,故其逆矩阵就等于它的转置,即
W 2 O = [ u x u y u z v x v y v z w x w y w z ] \boldsymbol{W}2\boldsymbol{O}=\left[ \begin{matrix} u_x& u_y& u_z\\ v_x& v_y& v_z\\ w_x& w_y& w_z\\ \end{matrix} \right] W2O=uxvxwxuyvywyuzvzwz
这个矩阵的含义为已知世界空间中的坐标,则右乘 W 2 O \boldsymbol{W2O} W2O就可得到局部空间中的坐标,如: W 2 O ⋅ u = [ u x u y u z v x v y v z w x w y w z ] [ u x u y u z ] = [ 1 0 0 ] \boldsymbol{W}2\boldsymbol{O}\cdot \boldsymbol{u}=\left[ \begin{matrix} u_x& u_y& u_z\\ v_x& v_y& v_z\\ w_x& w_y& w_z\\ \end{matrix} \right] \left[ \begin{array}{c} u_x\\ u_y\\ u_z\\ \end{array} \right] =\left[ \begin{array}{c} 1\\ 0\\ 0\\ \end{array} \right] W2Ou=uxvxwxuyvywyuzvzwzuxuyuz=100
上述式子根据正交性得到.所以可以看到世界坐标下的 u \boldsymbol{u} u经变换得到了它的局部坐标 [ 1 , 0 , 0 ] T \left[ 1,0,0 \right] ^T [1,0,0]T

现在一旦我们掌握了上述内容就可以轻松推导出视角矩阵,即view矩阵,view矩阵即把世界坐标的点转换到视角空间,眼的坐标为 ( c x , c y , c z ) \left( c_x,c_y,c_z \right) (cx,cy,cz)
坐标变换矩阵与视角矩阵推导_第1张图片
世界坐标系下的圆柱中心为 ( h x , h y , h z ) \left( h_x,h_y,h_z \right) (hx,hy,hz)

我们不妨把这个过程拆开想一下,先把眼移动到原点的位置,则因为圆柱和眼的相对位置不变,故其也应跟眼睛应用同样的变换坐标变换矩阵与视角矩阵推导_第2张图片

那么接下来显然只需旋转 u \boldsymbol{u} u, v \boldsymbol{v} v, w \boldsymbol{w} w轴,使其与 x \boldsymbol{x} x, y \boldsymbol{y} y, z \boldsymbol{z} z重合,即应用 W 2 O \boldsymbol{W2O} W2O旋转矩阵,同理,圆柱因为与眼睛的相对关系不变所以也跟着旋转,用图像表示这一过程:
坐标变换矩阵与视角矩阵推导_第3张图片

用矩阵形式表述上面的转换过程则为:
V i e w = W 2 O ⋅ T = [ u x u y u z 0 v x v y v z 0 w x w y w z 0 0 0 0 1 ] [ 1 0 0 − c x 0 1 0 − c y 0 0 1 − c z 0 0 0 1 ] = [ u x u y u z − c ⋅ u v x v y v z − c ⋅ v w x w y w z − c ⋅ w 0 0 0 1 ] \boldsymbol{View}=\boldsymbol{W}2\boldsymbol{O}\cdot \boldsymbol{T}=\left[ \begin{matrix} u_x& u_y& u_z& 0\\ v_x& v_y& v_z& 0\\ w_x& w_y& w_z& 0\\ 0& 0& 0& 1\\ \end{matrix} \right] \left[ \begin{matrix} 1& 0& 0& -c_x\\ 0& 1& 0& -c_y\\ 0& 0& 1& -c_z\\ 0& 0& 0& 1\\ \end{matrix} \right] \\ =\left[ \begin{matrix} u_x& u_y& u_z& -\boldsymbol{c}\cdot \boldsymbol{u}\\ v_x& v_y& v_z& -\boldsymbol{c}\cdot \boldsymbol{v}\\ w_x& w_y& w_z& -\boldsymbol{c}\cdot \boldsymbol{w}\\ 0& 0& 0& 1\\ \end{matrix} \right] View=W2OT=uxvxwx0uyvywy0uzvzwz00001100001000010cxcycz1=uxvxwx0uyvywy0uzvzwz0cucvcw1

你可能感兴趣的:(图形学,矩阵,线性代数,图形渲染)