两个空间之间的旋转矩阵
Rotation matrix between two spaces
我正在努力将 Razer Hydra 九头蛇整合到我的项目中。集成并不困难,基本功能已经运行良好。
然而,我有一个问题,我自己无法解决。
这是关于轮换。问题是Sixense SDK space 和我的space 不一样。但唯一的区别是 Z 轴的符号。
在这里你可以在图片上看到它以便更好地理解:
现在我从每个九头蛇控制器得到一个 3x3 旋转矩阵。
但是要使用它,我必须将旋转矩阵转换为 space 的旋转矩阵。我是这样做的:
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 矩阵是某种模型变换。你在 space A(sixense space)中得到了这个变换,你想在 space B(你的 space)中表示这个变换。
你知道两个 space 之间的系统变换是一个简单的反射矩阵:
/ 1 0 0 0 \
T(B<-A) = | 0 1 0 0 |
| 0 0 -1 0 |
\ 0 0 0 1 /
要将 space A M_A
中的模型转换转换为 space B M_B
中的模型转换,您必须乘以:
M_B = T(B<-A) * M_A
这等于对矩阵的第三行取反 M_A
(假设是列主矩阵)。看起来这可能是您代码中的所有 z
。但它也可以是所有 ..3
s.
我正在努力将 Razer Hydra 九头蛇整合到我的项目中。集成并不困难,基本功能已经运行良好。 然而,我有一个问题,我自己无法解决。 这是关于轮换。问题是Sixense SDK space 和我的space 不一样。但唯一的区别是 Z 轴的符号。 在这里你可以在图片上看到它以便更好地理解:
现在我从每个九头蛇控制器得到一个 3x3 旋转矩阵。 但是要使用它,我必须将旋转矩阵转换为 space 的旋转矩阵。我是这样做的:
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 矩阵是某种模型变换。你在 space A(sixense space)中得到了这个变换,你想在 space B(你的 space)中表示这个变换。
你知道两个 space 之间的系统变换是一个简单的反射矩阵:
/ 1 0 0 0 \
T(B<-A) = | 0 1 0 0 |
| 0 0 -1 0 |
\ 0 0 0 1 /
要将 space A M_A
中的模型转换转换为 space B M_B
中的模型转换,您必须乘以:
M_B = T(B<-A) * M_A
这等于对矩阵的第三行取反 M_A
(假设是列主矩阵)。看起来这可能是您代码中的所有 z
。但它也可以是所有 ..3
s.