Matrix 两空间间的旋转矩阵

Matrix 两空间间的旋转矩阵,matrix,graphics,3d,rotation,coordinate-systems,Matrix,Graphics,3d,Rotation,Coordinate Systems,我正在努力将Razer Hydra整合到我的项目中。集成并不困难,基本功能已经运行良好。 然而,我有一个问题,我自己解决不了。 这是关于旋转的。问题是Sixense SDK空间和我的空间不一样。但唯一的区别是Z轴的符号。 为了更好地理解,您可以在图片上看到: 现在我从每个hydra控制器得到一个3x3旋转矩阵。 但要使用它,我必须将旋转矩阵转换为空间的旋转矩阵。我是这样做的: float (*mat)[3]; mat = hydra.controllerRight.rot_mat;

我正在努力将Razer Hydra整合到我的项目中。集成并不困难,基本功能已经运行良好。 然而,我有一个问题,我自己解决不了。 这是关于旋转的。问题是Sixense SDK空间和我的空间不一样。但唯一的区别是Z轴的符号。 为了更好地理解,您可以在图片上看到:

现在我从每个hydra控制器得到一个3x3旋转矩阵。 但要使用它,我必须将旋转矩阵转换为空间的旋转矩阵。我是这样做的:

  float (*mat)[3];
  mat = hydra.controllerRight.rot_mat;

  float x1 = mat[0][0];
  float x2 = mat[0][1];
  float x3 = mat[0][2];
  float x4 = 0;

  float y1 = mat[1][0];
  float y2 = mat[1][1];
  float y3 = mat[1][2];
  float y4 = 0;

  float z1 = mat[2][0];
  float z2 = mat[2][1];
  float z3 = mat[2][2];
  float z4 = 0;

  float w1 = 0;
  float w2 = 0;
  float w3 = 0;
  float w4 = 1;

  // my 4x4 rotation matrix
  MatrixF rotMat( x1, x2, x3, x4,
                  y1, y2, y3, y4,
                  z1, z2, z3, z4,
                  w1, w2, w3, w4 );
当然,使用这个旋转矩阵的结果是错误的。但我不知道该怎么做来修复它。我尝试了大量的配置,首先通过变换矩阵来反转z值,因为我不确定sixense矩阵的结构


有人能帮我吗?

我想,sixense矩阵是一种模型变换。你在空间A(sixense空间)中得到了这个变换,你想在空间B(你的空间)中表示这个变换

您知道,两个空间之间的系统变换是一个简单的反射矩阵:

          / 1  0  0  0 \
T(B<-A) = | 0  1  0  0 |
          | 0  0 -1  0 |
          \ 0  0  0  1 /

这等于对矩阵的第三行求反
M_A
(假设为列主矩阵)。看起来这可能是代码中的所有
z
s。但是它也可以是所有的
.3
s.

我假设,sixense矩阵是某种模型变换。你在空间A(sixense空间)中得到了这个变换,你想在空间B(你的空间)中表示这个变换

您知道,两个空间之间的系统变换是一个简单的反射矩阵:

          / 1  0  0  0 \
T(B<-A) = | 0  1  0  0 |
          | 0  0 -1  0 |
          \ 0  0  0  1 /
这等于对矩阵的第三行求反
M_A
(假设为列主矩阵)。看起来这可能是代码中的所有
z
s。但它也可以是所有的
.3
s