Matrix 两空间间的旋转矩阵
我正在努力将Razer Hydra整合到我的项目中。集成并不困难,基本功能已经运行良好。 然而,我有一个问题,我自己解决不了。 这是关于旋转的。问题是Sixense SDK空间和我的空间不一样。但唯一的区别是Z轴的符号。 为了更好地理解,您可以在图片上看到: 现在我从每个hydra控制器得到一个3x3旋转矩阵。 但要使用它,我必须将旋转矩阵转换为空间的旋转矩阵。我是这样做的: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;
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