超级简单的获得变换矩阵(物体在新坐标系的坐标)的方法

概述

在图形渲染过程的开始阶段,存在不同的坐标空间(例如,模型空间,世界空间,摄像头空间等)。我们需要计算出一个变换矩阵,从而在已知物体在旧坐标系的坐标的情况下,通过这个变换矩阵获得物体在新坐标系的坐标。这篇文章讲述的是一个获得这个变化矩阵的方法。这个方法是在参考资料里的视频学到的,有兴趣的同学可以查看。

预备知识

物体变-坐标系不变

“物体变-坐标系不变”指的是一般的变换情况:在同一个坐标系下,物体做变换(位移,旋转,缩放等),通过一个变换矩阵,获得物体变换后的坐标。即,变换矩阵M*物体旧坐标=物体变换后的新坐标。如下图所示。
物体变-坐标系不变

物体不变-坐标系变

“物体不变-坐标系变“指的是:在物体不变的情况,在一个新坐标下,通过一个变换矩阵,获得物体在新坐标系的坐标。即,变换矩阵M*物体旧坐标系坐标=物体新坐标系坐标。如下图所示。
物体不变-坐标系变

通过“物体变-坐标系不变”来解决“物体不变-坐标系变”

我们要讲的重点就是一种可以获得“物体不变-坐标系变“里的这个变换矩阵M的方法。这个方法就是:通过“物体变-坐标系不变”来解决“物体不变-坐标系变”。让我们一步一步来看。

1. 坐标系和物体一起变换时,物体的坐标不变

一个很关键的点:当坐标系和物体一起做相同的变换时(移动,旋转,缩放等),物体在坐标系的坐标是不变的!!如下图所示。
坐标系和物体一起变换时,物体的坐标不变

2. 使新坐标系与旧坐标系重合的变换矩阵M

我们可以将“新坐标系”当作一个在旧坐标系下的普通物体。“新坐标系”是物体,“旧坐标系”是坐标系,“新坐标系”可以做随意的变换,因此,这是一个“物体变-坐标系不变“的问题。

如果我们知道有一个变换矩阵M,如果新坐标系做了这个变换矩阵M表示的变换后,可以与旧坐标系重合(新坐标系的原点与旧坐标系的原点重合,坐标轴重合,坐标轴单位相同),那么,这个矩阵M就是我们要找的答案:变换矩阵M*物体旧坐标系坐标=物体新坐标系坐标。但是,为什么呢??看下图就一目了然了。
在这里插入图片描述

3. 获得变换矩阵M

我们已经知道让新坐标系变换到与旧坐标系重合的变换矩阵M就是我们要的答案。现在我们就来求这个变换矩阵M。方法很简单,一句话来说就是“先位移再其他”。例如,对于我们的例子,即为M=R*T(R表示相应的旋转变换矩阵,T表示相应的位移变换矩阵。另外,举例使用的是列向量,所以在右边的变换矩阵表示先执行)。对于物体在旧坐标系的任一个点p,可以得出其在新坐标系的坐标为p’=M*p=R*T*p。

其实,也是可以“先其他再位移”来求这个变换矩阵M,但是会比“先位移再其他”复杂一点。对于我们的例子,如果先旋转再位移的话,变换矩阵M需要这样获得:M=T*R’=T*(T_Inverse*R*T)(注意,R’!=R。可以这样简单的理解,一般来说,其他变换是对“原点敏感”的,需要先位移到原点,再进行变换,再位移回原来的位置。否则,可能不会得到想要的结果。这也说明,一般来说变换矩阵是不可交换的:M1*M2!=M2*M1)。另外,可以注意到T*(T_Inverse*R*T)=(T*T_Inverse)*R*T=R*T。所以,无论“先位移再其他”还是“先其他再位移”都是可以的,关键是使用正确的变换矩阵。“先位移再其他”会比较简单一点。

结语

通过“物体变-坐标系不变”来解决“物体不变-坐标系变”,感觉这种方式真的很好理解。几个关键点:“一起变换,坐标不变”,“坐标系重合”,“先位移再其他”。这样,我们不但可以获得“用于获得物体在新坐标系的坐标”的变换矩阵,还理解了这样做是可行的原因。

参考资料

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值