原文地址:https://www.jianshu.com/p/ac1b34420be7工具
遇到可让你开窍的文章,最好保存起来,好查找,要不看完了开窍了,过两天忘了想再看看就找不到了.net
另外一个大神的文章:http://blog.csdn.net/popy007/article/details/17971213d
对于一个三维坐标(x, y, z),咱们想让它往x轴正方向移动1个单位,往y轴正方向移动1个单位,往z轴正方向移动1个单位,则可让它加上一个向量(1, 1, 1)orm
对于一个三维坐标(x, y, z),让其绕x, y, z轴旋转θ角的方法是在其左边乘上一个旋转矩阵。绕x轴,绕y轴,绕z轴的旋转矩阵分别是:blog
PS:若是咱们想更加通用一点,即点(x, y, z)绕轴(u, v, w)旋转θ的矩阵是什么?
若是u, v, w三者的平方和为1,即该向量是个单位向量,那么矩阵以下:游戏
对于一个三维坐标(x, y, z),咱们想让它扩大2倍,则可让它变成(2x, 2y, 2z)。写成矩阵乘法的话,V2 = M*V1,M以下图:ci
有没有什么方法让位移,旋转,缩放都成为统一的一种形式?
答:将三维坐标转换为四维坐标,而后使用线性变换。io
线性变换(Linear Transformation / Xforms)是渲染和游戏引擎等图形学工具进行坐标变换的方式,是可逆的。
线性变换的等式以下:
V2 = M*V1form
对于三维坐标(x, y, z),将其转换为四维坐标,能够直接加个1,即变成(x, y, z, 1)
对于四维坐标(x, y, z, w),都除以w便可转换为三维坐标,即(x/w, y/w, z/w)class
1. 四维位移
2. 四维旋转
3. 四维缩放
可关联(associative)
你可让一个坐标乘上一个旋转矩阵,再乘上一个位移矩阵,再乘上一个缩放矩阵,再乘上一个旋转矩阵………………
旋转和缩放矩阵可交换(communicative)
先旋转后缩放和先缩放后旋转的结果是同样的。RS = SR
位移不知足交换律
先位移再旋转和先旋转再位移结果是不同的!由于旋转以后模型的正面朝向就变了,因此会向新的方向位移。
TS!=ST, TR!=RT
对于任何一个线性变换矩阵,咱们能够把它拆解(decompose)为TRS或TSR三个矩阵的乘积的形式。
1)首先提取最后一列,获得位移
2)剩余的矩阵是R和S相乘的矩阵
咱们能够先看一下S和R相乘的结果是什么样的
因为线性变换是可逆的,因此咱们能够看一下位移旋转缩放的逆矩阵。
1. 位移
T的逆矩阵是-T,即向反方向移动。
2. 旋转
R的逆矩阵是R的转置矩阵,即以对角线翻转矩阵。
怎么理解呢?好比R是绕X轴旋转θ,那么逆操做就是绕X轴旋转-θ,带入-θ就会发现它变成了转置矩阵。
3. 缩放
S的逆矩阵是1/S,即把对角线上的三个元素都变成倒数,即反向缩放。
4. 线性变换Xforms
TSR的逆矩阵 = R的逆×S的逆×T的逆