让我们考虑一个简单的情况,我们有一个带有转换矩阵的对象,然后我们进行了简单的变换:
在通常情况下,我会做C * B * A,那将是故事的结尾。但是,据我们所知,它所做的是将新的变换应用于由先前的变换创建的局部坐标系中。我不喜欢。
在某些情况下,我想做的是在世界坐标系中局部旋转和在其他时候旋转。我的意思是,如果我有M = B * A矩阵(但是我没有X1和Y1角;我只有M角),我想在世界坐标系中应用C ,则输出的新转换矩阵将具有以下内容:
有什么方法可以实现?
编辑
我想我解释错了。
让我们假设在矩阵M所描述的位置处有一个对象A。M具有旋转,缩放和平移。我想沿着位于对象A的中心但与基本坐标系的轴平行的轴旋转对象。毕竟,我也希望对象停留在基本坐标系的(x,y,z)。
答案 0 :(得分:1)
在通常情况下,我会做C * B * A,那将是故事的结尾。但是据我们所知,它所做的是将新的变换应用于由先前的变换创建的局部坐标系。
不正确。
考虑测试点p
。 B * A * p
的局部坐标系中的B * A
的坐标只是p
的世界空间分量-因为变换只是坐标系的改变。
因此,将p
替换为C * p
将在本地应用转换 ,即:
C * (B * A)
在世界坐标系中应用C
(B * A) * C
在C
B * A
编辑
要围绕对象p
的位置旋转对象:
-p
进行翻译C
+p
进行翻译以恢复原始位置最终矩阵为T * C * inv(T) * M
,其中T
是p
的翻译,而M
是原始矩阵。 p
由M
的最后一列给出。