【问题标题】:Rotation matrix between two spaces两个空间之间的旋转矩阵
【发布时间】:2015-06-24 09:49:40
【问题描述】:

我正在努力将 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 矩阵的结构。

有人可以帮帮我吗?

【问题讨论】:

    标签: matrix graphics 3d rotation coordinate-systems


    【解决方案1】:

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

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

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

    要将空间 A M_A 中的模型变换转换为空间 B M_B 中的模型变换,您必须乘以:

    M_B = T(B<-A) * M_A
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-30
      • 2018-05-02
      • 1970-01-01
      • 2016-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多