将一个坐标系的旋转转换为另一个坐标系所需的矩阵

Cap*_*ash 2 c++ rotation matrix collada

我在“自制”GL 坐标系中有旋转矩阵,并希望将它们应用于 collada 坐标系。

我知道我需要一个矩阵来乘以 GL 旋转以将它们转换为 collada 坐标系(其中 Z 实际上是 UP)。坐标系如下图所示:

在此处输入图片说明

我需要从左系统到右系统的转换..为了更多的理解:
ColladaMatrix=GLRotMatrix*NeededMatrix

有人知道我需要的矩阵吗?

Dr_*_*Sam 5

我认为你需要乘以两个矩阵来改变你的旋转矩阵的基础。

事实上, ColladaMatrix 是一个([col] 表示在 collada 坐标中,[gl] 在 GL 坐标中)

y[col] = R[col,col] x[col]

但是如果你想使用GL矩阵,你需要将x[col]转换成GL坐标,然后在GL基础上应用旋转,最后回到Collada坐标。所以

y[col] = B[gl->col] R[gl,gl] B[col->gl] x[col]

所以,

R[col,col] = B[gl->col] R[gl,gl] B[col->gl]

这里 B[gl->col] 和 B[col->gl] 是一样的,所以

                  [1 0 0                  [1 0 0
MatrixCollada  =   0 0 1   * MatrixGL *    0 0 1
                   0 1 0]                  0 1 0]
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!

备注:对角化矩阵时也会发生同样的情况(实际上是基的变化),您需要对要对角化的矩阵进行前乘和后乘。

编辑:我为矩阵编写了两个坐标系,因为一般来说,矩阵可以将向量从一个坐标系发送到另一个坐标系。这样就更清楚了。