2 #import <CoreMotion/CoreMotion.h>
3 #import <GLKit/GLKit.h>
40 [
self startMotionManager:1.0 / 20.0];
43 printf(
"Starting Motion Manager\n");
53 [_motionManager stopDeviceMotionUpdates];
55 printf(
"Stopping Location Manager\n");
61 - (
void)startMotionManager:(
double)intervalTimeSEC
72 [_motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXMagneticNorthZVertical
73 toQueue:[NSOperationQueue currentQueue]
74 withHandler:^(CMDeviceMotion* motion, NSError* error) {
75 [
self performSelectorOnMainThread:@selector(onDeviceMotionUpdate:)
82 [_motionManager stopDeviceMotionUpdates];
86 - (
void)onDeviceMotionUpdate:(CMDeviceMotion*)motion
89 CMAttitude* attitude = motionData.attitude;
93 CMQuaternion q = attitude.quaternion;
106 GLKQuaternion qNWU = GLKQuaternionMake(q.x, q.y, q.z, q.w);
107 GLKQuaternion qRot90Z = GLKQuaternionMakeWithAngleAndAxis(GLKMathDegreesToRadians(90), 0, 0, 1);
108 GLKQuaternion qENU = GLKQuaternionMultiply(qRot90Z, qNWU);
112 _updateCB(qENU.q[0], qENU.q[1], qENU.q[2], qENU.q[3]);
typedef void(SL_STDCALL *cbOnImGuiBuild)(SLScene *s
Callback function typedef for ImGui build function.
CMMotionManager * _motionManager