围绕俯仰欧拉角

时间:2017-08-17 00:34:24

标签: android math opengl-es

我的3D场景相机根据需要旋转了,但为了做到这一点,我使用SensorManager.getOrientation(rotationMatrixIn, eulerAnglesOut);转换为欧拉角,所以我可以在重新计算旋转矩阵之前将90加到音高上修正的欧拉角。我在音高上添加了90,所以我的旋转可用于立方体贴图,当手机垂直于地面时Y向上。

我使用欧拉角,因为这使得将音高旋转90度变得直观。但是,当手机靠近垂直并且音高接近-90或90度时,我现在正遭受万向节锁定。当视图接近这些角度时,视图会快速旋转180度(在滚动和方位角轴上)。当我使用未修改的旋转矩阵时不会发生这种情况,但是我没有进行我需要的方向修正。

我在绕过欧拉角转换所需的数学运算时遇到困难,并将旋转矩阵直接旋转90度,绕欧拉角的X轴旋转并反转滚动。我可以从一个库(Matrix和Quaternion)访问各种数学类,它们可以相互相乘并转换为Euler和从Eulers转换。

我想围绕什么是X轴进行旋转。有没有办法在不引入云台锁的情况下做到这一点?

澄清:我所谈论的欧拉角是-Z,X,Y顺序,其中X是音高。

1 个答案:

答案 0 :(得分:0)

正如@meowgoesthedog在删除的评论中所述,旋转矩阵应预先乘以一个围绕X轴旋转90度的矩阵。

Android传感器的旋转矩阵将设备方向转换为世界方向,因此将其预先乘以其他矩阵就像在转换坐标系之前首先对设备应用旋转。

我也被Android的行主矩阵排序绊倒了。必须反转矩阵才能使其进入OpenGL的列主要排序。我的欧拉角度工作正常,因为他们隐藏了这种不一致。