3D仿射变换矩阵推导

仿射变换包括线性变换和平移变换,先来说线性变换中的旋转变换,这个稍微要复杂一点.

讲这个之前,我假设你已经对线性代数有一定的了解,比如三角函数,向量,以及矩阵的相关知识(以及他们所代表的几何意义),如果以上知识不熟悉,很难看懂下面讲的内容.

仿射变换包括旋转,缩放,平移,切变,反射...等等,在3D空间中,,所有这些效果都是通过矩阵来完成,也就是矩阵乘法实现,矩阵的乘法是满足结合律的,也就是说,我们可以通过先处理平移矩阵,再处理旋转矩阵,来达到平移并旋转物体到最终的位置,也可以先将平移和旋转两个矩阵组合成一个最终的矩阵,一次性应用到物体上,从而达到效果.

当然旋转可以是x轴,y轴,z轴中的任意维度的组合,基于以上推论,我们只需推导出任意一个轴的旋转即可,然后将三个维度的旋转组合成最终的矩阵应用到物体上.

那么我们就拿Z轴来说吧,如果绕Z轴旋转,相当于Z轴的坐标不变,我们将空间中的任何一点N投影到XY所在的平面,不考虑Z轴,假设投影点为P(x,y),当绕着Z轴旋转时(想象一下这个场景,有助于理解下面的证明),投影点旋转一定的角度到达P1(x1,y1)点,如下图:


根据矩阵的乘法运算规则,即可以得到绕Z轴旋转的矩阵M,同理如果我们绕X轴,或者Y轴也可以很简单的证明出来.

下面给出更为直观的理解:

我们知道3D空间中的任何点或者向量都可以表示成基向量的组合(分别是X,Y,Z方向的单位向量),在物体空间中,我们将坐标轴的范围定义为[-1,1],在未进行任何线性变换之前,三个基向量的分别为X(1,0,0), Y(0,1,0),Z(0,0,1),见下图,如果是绕X轴旋转,即ZY平面的旋转,如下:



扫描二维码关注公众号,回复: 169841 查看本文章

同理:绕Y轴旋转为:


绕Z轴旋转为:


以上图片来自 Angles to Axes

这是从两种角度来看旋转矩阵,殊途同归,但是下面一种,直观,简洁,非常适合理解,不需要证明.

根据矩阵乘法的规则,缩放前的坐标和缩放后的坐标分别为:

 

即x' = ax, y' = ay, z' = az

则缩放矩阵为:


平移矩阵为:


为什么到平移变换就变成了四维矩阵(4x4),根据最终运算的结果

x' = x+t

y' = y+t

z' = z+t

如果不增加一个维度,无法使用统一的矩阵乘法来表示平移变换(投影矩阵也是通过增加一个维度,来统一了变换),只需要简单的增加一个维度,就完美的将所有的变换操作进行了统一,即通过乘法运算,将线性变换和平移变换统一起来(仿射变换),方便计算.

使用仿射变换,通过Model Matrix 就可以将物体从模型空间坐标系转换到世界空间坐标系

通过View Matrix 就可以将物体从世界控件坐标系转换到视图(摄像机)空间坐标系

通过Projection Matrix,就可以将物体从视图(摄像机)空间坐标系转换到屏幕上


下一篇:投影矩阵



猜你喜欢

转载自blog.csdn.net/l491337898/article/details/80199533