2

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

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

在此处输入图像描述

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

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

4

3 回答 3

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]

希望能帮助到你!

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

编辑:我为矩阵编写了两个坐标系,因为通常,矩阵可以将向量从坐标系发送到另一个坐标系。这使它更清楚。

于 2013-04-03T13:20:17.243 回答
0

我明白了,我误读了您问题中有关旋转矩阵的部分。我以为您要的是旋转矩阵,它将 GL 坐标转换为 COLLODA 坐标。

这些是将左系统(您标记为“GL”的系统)转换为右系统(“COLLADA”)的矩阵:

1 0 0
0 0 1
0 1 0

以另一种方式转换您将使用相同的矩阵。

于 2013-04-03T13:20:07.993 回答
0

DirectX 和许多库和游戏引擎(不是 OpenGL)使用左手规则系统,几乎所有你会发现的数学模型和设备都使用右手规则,这被称为向量的数学叉积。

这就是为什么不可能将一个系统转换为另一个抛出简单旋转的原因。

你必须选择一个坐标系来工作,尝试使用最常用的,然后做一些有用的函数来转换一个坐标系到另一个坐标系。

作为经验,我可以告诉你四元数是避免这个问题的最好方法,选择正确的矩阵来计算命运的手系统。

如果你有旋转问题(如果你使用超过 90° 的俯仰,你会遇到),搜索云台锁,然后使用四元数,这将节省大量时间和精力。

然后看这个:Euler to Quaternion,并通过 -sin(x) 更改 sin(x) 以在一个坐标系统之间切换到另一个坐标系统。

最好的祝福。

于 2013-04-03T15:11:15.597 回答