坐标系变化矩阵的构建
基向量法和TSR复合矩阵
我们涉及到的坐标系变换构建矩阵的时候,无论是世界坐标系到子坐标系,还是反之,只需要构建后者的变化坐标系,前者就可以用逆矩阵得到。
而构建后者通常有两个方法,一个是根据变换中的缩放旋转平移步骤乘起来构建变化坐标系,称为TSR复合矩阵。
另一种方法就是直接取新的子坐标系的三条基向量,然后直接构建变化矩阵,这本质和第一种方法一样,这三条基向量可以理解为原世界坐标系向量缩放和旋转的矩阵结果,由于他们是线性变化,自然构建出了我们的新基向量。
也可以推导为:将世界坐标的原点通过子坐标系的三条基向量(请记住子坐标系的基向量本质是用世界坐标系表达的),平移到子坐标点位置。这也是下面参考材料里面的证明方法。
参考:
UnityShader入门精要69页-72页
关于两种方法里面的旋转缩放和平移
如果你有心观察,你似乎会发现一个问题,我们经常会把基向量法的三条坐标先归一得到矩阵(看起来类似旋转矩阵),然后再执行缩放,实现分离步骤。
基向量法的缩放和旋转似乎是对于TSR法是反过来的?矩阵的缩放和旋转不符合结合律啊?
因为这就是一个误解,基向量归一后的这个矩阵压根就不是TSR里面的旋转矩阵,它更类似旋转矩阵和缩放矩阵的结合!
也就是说,基向量归一化后,其并不等价为TSR的旋转矩阵。而是包含了旋转和缩放因子后的一个特殊矩阵。
而后面的缩放,则是将其复原回原RS矩阵的矩阵乘法结果。这个缩放和TSR里面的S也可能是不同的。(非均匀缩放情况下不同)
当缩放是均匀的,基向量的归一化完全等同方法一的R矩阵,并且方法一此时旋转和缩放的顺序可以交换。如果非均匀,则会不同。这是由于不均匀的缩放会导致旋转的结果方向发生变化。
但是两个方法的平移矩阵是一模一样的
所以,你可以认为基向量里面的子坐标基向量的归一化,可以认为是对TSR法的RS矩阵的归一化
可以认为,基向量法更类似线性组合的思路,TSR法更类似空间变化的思路。
这也间接证明,通过一个初始向量矩阵乘法得到一个结果相同的向量,其过程的旋转矩阵和缩放矩阵是可以不同的
对于均匀缩放,归一化后的基向量矩阵正好等同于TSR方法中的旋转矩阵,此时旋转和缩放可以交换顺序。
而在非均匀缩放下,由于缩放各方向不相同,旋转和缩放的顺序影响了结果,归一化后的矩阵无法完全剥离旋转信息。
下一节会对缩放问题对矩阵构建的影响进行解释
均匀缩放和非均匀缩放
均匀缩放下的情况
在均匀缩放(所有轴的缩放因子相同)的情况下,提取变换矩阵中的基向量后对其归一化,得到的矩阵确实可以看作纯旋转矩阵。此时,原始变换矩阵可以分解为旋转矩阵和均匀缩放因子的乘积为何会出现这种情况?
这种情况之所以成立,正是因为均匀缩放不会改变各坐标轴之间的相对比例,归一化操作后保留的就是旋转信息。而在非均匀缩放中,不同轴上的缩放因子不同,会导致原始矩阵中的各基向量长度不一,简单归一化无法完全分离出旋转部分,因为旋转和非均匀缩放在数学上是非交换的操作。
换句话说,非均匀缩放会“干扰”基向量的方向信息,使得归一化后得到的矩阵不仅包含旋转信息,还隐含了由于不同缩放因子引起的扭曲。正是这种干扰导致在非均匀缩放下不能简单地通过归一化得到一个纯粹的旋转矩阵。
总结
简单来说,归一化基向量始终保留了原向量的方向信息,但如果变换中存在非均匀缩放,各个轴的缩放因子不同会改变基向量间的相对方向。这样,即使归一,得到的矩阵也不是TSR分解中纯粹的旋转矩阵,而是包含了非均匀缩放影响后的结果。这就导致直接用基向量归一的方法,在非均匀缩放的情况下,无法正确分离出原始的旋转矩阵和缩放矩阵。
点积概念推导总结
点积算法为什么是坐标相乘相加
可以理解为先有了点积是|a||b|cosθ的概念,然后反向推得这个算法
参考资料和推导:
(21 封私信 / 80 条消息) 点积为什么等于对应坐标相乘再相加? - 知乎
为什么全局向量可以通过点积直接乘于局部正交归一基,得到局部坐标?
这是读虎书时提到的一种方法
过程可以认为:
1.假设全局向量A(a,b,c),局部坐标基u v w
2.A可以视为a(局部)u+b(局部)v+c(局部)w 的线性组合
3.A 点积 u = (a(局部)u+b(局部)v+c(局部)w)*u
4.由于u v w正交归一,所以u*u=1 v*u=0 w*u=0 显然可以得到 A 点积 u=a(局部),即我们通过点积得到了其中一条局部坐标
5.同理可得到所有的局部坐标。
上文4的推导也解释了:1.为什么这种点积法只能用在正交归一基上。