US2S1L9——复合运算
回顾各个变换矩阵
-
平移矩阵
100001000010txtytz1
-
旋转矩阵
绕 x 轴旋转 β 度,旋转矩阵为:
10000cosβsinβ00−sinβcosβ00001
绕 y 轴旋转 β 度,旋转矩阵为:
cosβ0−sinβ00100sinβ0cosβ00001
绕 z 轴旋转 β 度,旋转矩阵为:
cosβsinβ00−sinβcosβ0000100001
-
缩放矩阵
kx0000ky0000kz00001
复合运算
所谓的复合运算,其实就是我们在计算矩阵变换时,可以把平移、旋转、缩放等计算组合起来,
通过结合多矩阵的乘法,来形成一个复杂的变换过程。
比如:我们可以将一个模型,先缩放到2倍大小,再绕y轴旋转60°,最后再向x轴平移5个单位。
这种复合变换过程,我们可以通过矩阵的串联来实现。
我们之前的知识点讲过,我们通过列矩阵的形式进行计算时,利用乘法结合律
可以从右往左去计算:先缩放、后旋转、再平移。
P新=M平移M旋转M缩放P老
简而意之:复合运算就是把各种矩阵变换组合起来,形成一个复杂的变换过程
计算顺序对结果的影响
在进行复合运算时,变换的结果依赖于变换的顺序
原因:矩阵乘法不满足交换律
也就是说,不同的变换顺序得到的计算结果也可能是不一样的。
比如:一个人先往前一步,再左转 和 一个人先左转,再往前一步
得到的结果是不一样的,在矩阵运算的乘法运算中也会出现这样的情况
主要原因,就是因为矩阵乘法不支持交换律
Unity中需要遵守的规则
-
在进行平移、旋转、缩放的复合运算时
绝大多数情况下,我们约定的变换顺序为:先缩放、再旋转、后平移
-
在进行x轴、y轴、z轴旋转的复合运算时
绝大多数情况下,我们约定的变换顺序为:z -> x -> y
之后我们在Unity中进行Shader开发时,遵从这两个规则即可