如何创建新的CMAttitude参考框架以使重力位于Y轴上

Poc*_*chi 19 iphone xcode gyroscope core-motion

我希望能够更改设备运动管理器参考框架(用于陀螺仪),以便我的重力矢量在Y轴上.

通常,当您启动Device Motion Manager更新时,您只能使手机的z轴与重力对齐.

您可以更改此项以使用磁力计使x轴与磁北极或真北极对齐.有了这个,我的X轴指向北方,我的Z轴指向下方.

我想要做的是让我的Y轴(负)指向下方(使其与重力对齐)并使我的X轴指向真正的磁极.

我想要的结果是,当我的手机静止在垂直(纵向)方向时,手机的右侧将与北极对齐,我的所有读数(滚动,俯仰,偏航)将读为0.然后使用如果我在X轴上旋转手机,音高会改变,如果我绕Y轴旋转,偏航会改变.

到目前为止,我知道我可以设置自己的参考框架,如果我乘以先前存储的态度的倒数,(就像我可以手动设置我的手机这种方向,保存这种态度,并简单地将新态度乘以逆这个存储的一个和我的所有读数将完全像我想要的那些).

但是手动设置它不是一个选项,所以我如何以编程方式进行此操作?

我不认为有一个函数来创建我自己的态度参考框架,或者如果至少有一个函数将态度乘以旋转矩阵,那么我可以解决这个问题.(因为我只是将所有态度乘以90度的音高变化).

我希望我能清楚地解释清楚,

我将不胜感激任何建议.谢谢

PD:这些是iPhone Orientation坐标:

在此输入图像描述

Nit*_*Nit -1

我希望这能帮到您

您可以更改 CMAttitude 实例使用的参考系。为此,缓存包含该参考系的姿态对象并将其作为参数传递给multiplyByInverseOfAttitude:。接收消息的态度参数被更改以表示相对于该参考系的态度变化。

要了解这有何用处,请考虑一场棒球比赛,其中用户旋转设备进行挥杆。通常,在投球开始时,球棒会处于某种静止方向。之后,球棒的渲染方向取决于设备的姿态相对于投球开始时的变化情况。

-(void) startPitch {

// referenceAttitude is an instance variable

referenceAttitude = [motionManager.deviceMotion.attitude retain];
Run Code Online (Sandbox Code Playgroud)

}

- (void)drawView {

CMAttitude *currentAttitude = motionManager.deviceMotion.attitude;

[currentAttitude multiplyByInverseOfAttitude: referenceAttitude];

// render bat using currentAttitude .....

[self updateModelsWithAttitude:currentAttitude];

[renderer render];
Run Code Online (Sandbox Code Playgroud)

}

有关更多信息,请参阅下面的链接,了解您想要的相同内容。

http://db-in.com/blog/2011/04/cameras-on-opengl-es-2-x/

  • 这并不能解决问题。这是来自苹果开发文档,当然我可以缓存该参考姿态,但是如果您检查该方法,它需要运行时,因为它使用设备运动调用当前姿态,我想知道如何创建我自己的姿态参考系,以便我可以以不同的方向“启动”它。 (3认同)
  • 这是从苹果网站抄袭的,没有任何出处。 (2认同)