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

假设现在世界空间里的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)
在这里插入图片描述
世界坐标系下的圆柱中心为 ( h x , h y , h z ) \left( h_x,h_y,h_z \right) (hx,hy,hz)

我们不妨把这个过程拆开想一下,先把眼移动到原点的位置,则因为圆柱和眼的相对位置不变,故其也应跟眼睛应用同样的变换在这里插入图片描述

那么接下来显然只需旋转 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旋转矩阵,同理,圆柱因为与眼睛的相对关系不变所以也跟着旋转,用图像表示这一过程:
在这里插入图片描述

用矩阵形式表述上面的转换过程则为:
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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一丈鹿原

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值