的请多多包涵一个单一轴的旋转,我在矩阵数学是非常糟糕的。我有一层,我希望在参考环境中保持“静止”,而手机旋转到其他姿态。我有一个很好的MotionManager中工作,现在用在目前的态度multiplyByInverseOfAttitude,并应用所产生的增量为旋转使用CMRotationMatrix我的层(做独立CATransform3DRotates的俯仰,滚转和偏航引起的轴附近相当的古怪)。它的基本灵感来自代码like this example。反向CMRotationMatrix
我Concat的这另一个变换之前,我应用旋转到我的层应用M34角度把戏。
[attitude multiplyByInverseOfAttitude:referenceAttitude];
CATransform3D t = CATransform3DIdentity;
CMRotationMatrix r = attitude.rotationMatrix;
t.m11=r.m11; t.m12=r.m12; t.m13=r.m13; t.m14=0;
t.m21=r.m21; t.m22=r.m22; t.m23=r.m23; t.m24=0;
t.m31=r.m31; t.m32=r.m32; t.m33=r.m33; t.m34=0;
t.m41=0; t.m42=0; t.m43=0; t.m44=1;
CATransform3D perspectiveTransform = CATransform3DIdentity;
perspectiveTransform.m34 = 1.0/-650;
t = CATransform3DConcat(t, perspectiveTransform);
myUIImageView.layer.transform = t;
结果是漂亮,就像你所期望的,该层保持静止的重力为我四处移动我的手机,除了单个轴,y轴;手机保持平放并滚动,图层按照手机的方向双倍滚动,而不是保持静止。
我不知道为什么这样一个轴移动,而其他移动应用multiplyByInverseOfAttitude之后正确错误。当使用单独的CATransform3DRotates进行俯仰,偏航,滚动时,我可以通过将滚动矢量乘以-1来轻松地解决问题,但我不知道如何将其应用于旋转矩阵。这个问题显然只有在你将观点引入方程后才可见,所以也许我做错了。反转我的m34值可以修正摇摆,但会在球场上产生同样的问题。我需要弄清楚为什么这个轴上的旋转是向后的,通过矩阵反转该轴上的旋转,或者以某种方式修正透视。
谢谢,马库斯,该代码完美地工作。在我旋转手机时,图层看起来在所有轴上保持静止。 虽然,结果引入了另一个问题。我希望通过使用矩阵数学,我会避免在轴上的任何奇怪行为,但是会发生一些奇怪的事情。当我拨动我的手机,穿过图层的“顶部边缘”时,图层不会继续平稳地旋转。相反,当我接近轴线时,图层偏离轴线,所以我无法直接穿过它的边缘。这是我正在做的旋转类型的标准特征吗? –