苹果陀螺仪示例代码

我正在计划开发一个基于陀螺仪的项目,如使用陀螺仪数据旋转opengl纹理 ,有没有从苹果发布关于陀螺仪的示例代码或任何有关将陀螺仪与openGL集成的教程…我search谷歌我没有发现除了核心运动指南和事件处理指南 。

更新:请让我知道,如果有任何样品..

要获取陀螺仪更新,您需要创build一个运动pipe理器对象,并可选(但build议)一个参考态度对象

所以在你的界面定义中添加:

CMMotionManager *motionManager; CMAttitude *referenceAttitude; 

根据文档,您应该只为每个应用程序创build一个这样的pipe理器。 我build议让motionManager通过一个singleton来访问,但这只是一些额外的工作,如果你只实例化一次你的类,你可能不需要做这些工作。

然后在你的init方法中,你应该像这样分配运动pipe理器对象;

 motionManager = [[CMMotionManager alloc] init]; referenceAttitude = nil; 

当你想启动运动更新时,你可以创build一个enableMotion方法,或者只是从init方法中调用它。 下面将存储初始设备姿态并使设备继续对陀螺仪进行采样并更新其姿态属性。

 -(void) enableMotion{ CMDeviceMotion *deviceMotion = motionManager.deviceMotion; CMAttitude *attitude = deviceMotion.attitude; referenceAttitude = [attitude retain]; [motionManager startDeviceMotionUpdates]; } 

对于使用陀螺仪和OpenGL的虚拟现实应用来说非常简单。 您需要获得当前的陀螺仪姿态(旋转),然后将其存储在兼容OpenGL的matrix中。 下面的代码检索并保存当前的设备动作。

 GLfloat rotMatrix[16]; -(void) getDeviceGLRotationMatrix { CMDeviceMotion *deviceMotion = motionManager.deviceMotion; CMAttitude *attitude = deviceMotion.attitude; if (referenceAttitude != nil) [attitude multiplyByInverseOfAttitude:referenceAttitude]; CMRotationMatrix rot=attitude.rotationMatrix; rotMatrix[0]=rot.m11; rotMatrix[1]=rot.m21; rotMatrix[2]=rot.m31; rotMatrix[3]=0; rotMatrix[4]=rot.m12; rotMatrix[5]=rot.m22; rotMatrix[6]=rot.m32; rotMatrix[7]=0; rotMatrix[8]=rot.m13; rotMatrix[9]=rot.m23; rotMatrix[10]=rot.m33; rotMatrix[11]=0; rotMatrix[12]=0; rotMatrix[13]=0; rotMatrix[14]=0; rotMatrix[15]=1; } 

根据你想要做什么,你可能不得不颠倒它,这是很容易的。 旋转的反转就是它的转置,意味着交换行和列。 所以上面变成:

 rotMatrix[0]=rot.m11; rotMatrix[4]=rot.m21; rotMatrix[8]=rot.m31; rotMatrix[12]=0; rotMatrix[1]=rot.m12; rotMatrix[5]=rot.m22; rotMatrix[9]=rot.m32; rotMatrix[13]=0; rotMatrix[2]=rot.m13; rotMatrix[6]=rot.m23; rotMatrix[10]=rot.m33; rotMatrix[14]=0; rotMatrix[3]=0; rotMatrix[7]=0; rotMatrix[11]=0; rotMatrix[15]=1; 

如果你想偏航,俯仰和滚转angular度,那么你可以轻松地使用它们

 attitude.yaw attitude.pitch attitude.roll 

我一直在寻找一些示例代码作为一个非常简单的项目。 经过几天的search,我终于find了。 在这里,你去你们!

http://cs491f10.wordpress.com/2010/10/28/core-motion-gyroscope-example/

CoreMotion是如何获得陀螺仪的数据。 查看CMGyrodata的原始数据或使用DeviceMotion姿态和旋转速率属性。

如果您是注册的苹果开发人员,我build议您观看“Device Motion”WWDC会话。

以下是CoreMotion框架的一些Apple示例代码: http : //developer.apple.com/library/ios/#samplecode/pARk/Introduction/Intro.html#//apple_ref/doc/uid/DTS40011083

和老式UIAccelerometer(但它有一些很好的示例代码与OpenGL的工作): http : //developer.apple.com/library/ios/#samplecode/GLGravity/Listings/Classes_GLGravityView_m.html#//apple_ref/doc/ UID / DTS40007327-Classes_GLGravityView_m-DontLinkElementID_6