如果我这样做positionVector*worldMatrix
,该位置将转换为世界空间。但是,如果我worldMatrix*positionVector
在 3d 空间中以相反的方式 ( ) 这样做会发生什么?
我注意到结果与第一个不同。我已经用谷歌搜索了矩阵,他们解释了很多数学但不是这个,至少我找不到它。
正如其他人所指出的 - 交换乘法的顺序相当于乘以转置。碰巧的是,旋转矩阵是一种特殊类型的矩阵,称为正交矩阵,它为您提供了许多简洁的属性。
最有趣的可能是矩阵的转置是它的逆。对于您的世界变换乘以倒数相当于在世界空间中获取一个位置并将其拉入变换关联的对象的局部坐标中。
例如,考虑一个在世界中任意定向的盒子 - 乘以逆世界变换可以(当然完全取决于应用程序:))将您置于轴对齐的空间中,并且如果您有兴趣寻找与在盒子的本地空间中进行计算的其他对象会使这更容易。
在矩阵向量中,您的向量将被解释为列向量。在向量矩阵中,它将被解释为行向量。2x2 示例:
/ a b \ / e \ / ae+bf \
| | * | | = | |
\ c d / \ f / \ ce+df /
/ a b \
( e f ) * | | = ( ea+fc eb+fd )
\ c d /
如您所见,结果是不同的。
顺便说一句,在转置矩阵后做一个与做另一个相同。
在 3D 空间方面,如果您认为这两个选项之一是线性变换,我不知道对另一个选项是否有任何明智的解释。这个 Wikipedia 部分对此进行了说明,但这超出了我对线性代数的理解。
(matrix * vector) 等价于 (vector * transpose(matrix))
矩阵数学规则:
给定矩阵A和B,大小为 MxN 和 OxP,
另一个重要规则是矩阵乘法不可交换。 A * B != B * A
通常在计算机图形学中,位置向量是一个 4x1 矩阵,而世界视图矩阵是正方形,4x4。因此,您应该期望将世界视图矩阵与位置向量预乘是未定义的。将世界视图矩阵应用于位置向量的正确方法是按另一个顺序,将位置向量与世界视图矩阵预乘。(我说的是数学,这里)
要获得更多矩阵数学的乐趣,请查看本教程。