我正在努力将Razer Hydra整合到我的项目中。整合并不困难,基本功能已经运行良好。 不过,我有一个问题,我自己无法解决。 这是关于轮换的。问题是Sixense SDK空间和我的空间不一样。但唯一的区别是Z轴的标志。 在这里,您可以在图片上看到它以便更好地理解:
现在我从每个hydra控制器获得一个3x3旋转矩阵。 但要使用它我必须将旋转矩阵转换为我的空间的旋转矩阵。我是这样做的:
if (clonedUserGuess.PegPosition1 != null && clonedGeneratedPegs.Contains(clonedUserGuess.PegPosition1.Colour))
pegResultContainer.ResultPegs.Add(new Peg { Colour = PegColour.White });
if (clonedUserGuess.PegPosition2 != null && clonedGeneratedPegs.Contains(clonedUserGuess.PegPosition2.Colour))
pegResultContainer.ResultPegs.Add(new Peg { Colour = PegColour.White });
if (clonedUserGuess.PegPosition3 != null && clonedGeneratedPegs.Contains(clonedUserGuess.PegPosition3.Colour))
pegResultContainer.ResultPegs.Add(new Peg { Colour = PegColour.White });
if (clonedUserGuess.PegPosition4 != null && clonedGeneratedPegs.Contains(clonedUserGuess.PegPosition4.Colour))
pegResultContainer.ResultPegs.Add(new Peg { Colour = PegColour.White });
return pegResultContainer;
现在使用此旋转矩阵的结果当然是错误的。但我无法找到解决它的方法。我尝试了大量的配置,首先通过转换矩阵来反转z值,因为我不确定sixense矩阵的结构。
有人可以帮助我吗?
答案 0 :(得分:0)
我认为,sixense矩阵是某种模型变换。您将在空间A(sixense空间)中获得此变换,并且您希望表示空间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
的第三行(假设列主矩阵)。看起来这可能是代码中的所有z
。但它也可以是所有..3
。