对于一个三维坐标(x, y, z)我们想讓它往x轴正方向移动1个单位,往y轴正方向移动1个单位往z轴正方向移动1个单位,则可以让它加上一个向量(1, 1, 1)
对于一个三维坐标(x, y, z)让其绕x, y, z轴旋转θ角的方法是在其左边乘上一个旋转矩阵。绕x轴,绕y轴,绕z轴的旋转矩阵分别是:
PS:如果我们想更加通用一点即点(x, y, z)绕轴(u, v, w)旋转θ的矩阵是什么?
如果u, v, w三者的平方和为1,即该向量是个单位向量那么矩阵如下:
对于一个三维坐标(x, y, z),我们想让它扩大2倍則可以让它变成(2x, 2y, 2z)。写成矩阵乘法的话V2 = M*V1,M如下图:
有没有什么方法让位移图形的坐标变化规律旋转,缩放都成为统一的一种形式
答:将三维坐标转换为四维坐标,然后使用线性变换
线性变换(Linear Transformation / Xforms)是渲染和游戏引擎等图形学工具进行坐标变换的方式,是可逆的
- 当w=1時,四维坐标会变成三维坐标
对于三维坐标(x, y, z)将其转换为四维坐标,可以直接加个1即变成(x, y, z, 1)
对于四维坐标(x, y, z, w),都除以w即可转换為三维坐标即(x/w, y/w, z/w)
从上图中可以看到,四维位移图形的坐标变化规律矩阵是在一个四维单位矩阵(就是对角线都是1,其他都是0的矩阵)的最后一列放入你想要位移图形的坐标变化规律的向量(tx, ty, tz)
从上图中可以看到,四维旋转矩阵是在我们上面刚说的三维绕轴旋转矩陣的基础上,在最后一行和最后一列补上一个(00,01)。
-
你可以让一个坐标乘上一个旋转矩阵再乘上一个位移图形的坐标变化规律矩陣,再乘上一个缩放矩阵再乘上一个旋转矩阵………………
-
先旋转后缩放和先缩放后旋转的结果是一样的。RS = SR
位移图形的坐标变化规律不滿足交换律 先位移图形的坐标变化规律再旋转和先旋转再位移图形的坐标变化规律结果是不一样的!因为旋转之后模型的正面朝向就变了所以会向新的方向位移图形的坐标变化规律。
-
对于任何一个线性变换矩阵我们可以把它拆解(decompose)为TRS或TSR三个矩阵的乘积的形式。
1)首先提取最后一列得到位移图形的坐标变化规律
2)剩余的矩阵是R和S相乘的矩阵
我们可以先看一下S和R相乘的结果是什么样的
SR相乘, 以Z轴旋转为例
從图中可以看出,SR矩阵第一行的平方和开根就是Sx,第二行的平方和开根就是Sy第三行的平方和开根就是Sz。第一行除以Sx第二行除以Sy,第彡行除以Sz即可得到旋转矩阵。
6. 四维变换的逆变换
由于线性变换是可逆的所以我们可以看一下位移图形的坐标变化规律旋转缩放的逆矩陣。
1. 位移图形的坐标变化规律 T的逆矩阵是-T即向反方向移动。
2. 旋转 R的逆矩阵是R的转置矩阵即以对角线翻转矩阵。
怎么理解呢比如R是绕X軸旋转θ,那么逆操作就是绕X轴旋转-θ,带入-θ就会发现它变成了转置矩阵。
3. 缩放 S的逆矩阵是1/S即把对角线上的三个元素都变成倒数,即反向缩放