使用陀螺仪的增强现实示例代码

时间:2011-03-06 10:28:58

标签: iphone augmented-reality gyroscope

上午,

我已经在StackOverFlow周围寻找了大约一个小时,并发现了许多示例代码(主要是github),用于创建增强现实应用程序,显示第二个位置相对于当前位置的位置(例如纽约)。

但是,我注意到这些都没有使用iPhone 4中提供的陀螺仪功能,为最终用户提供了更加流畅的体验。

有没有人知道这样的示例代码示例是否存在?

干杯,

查理

3 个答案:

答案 0 :(得分:3)

您绝对可以使用CoreMotion从陀螺仪中获取数据。基本方法是获取CMAttitude.rotationMatrix并将其反转(转置)乘以您最初设置的参考矩阵。 developer.apple.com上的Teapot示例项目显示了使用CoreMotion的基本方法。

对于真正的增强现实应用,您需要使用OpenGL ES创建模型。在尝试了GL ES 2.0之后,我个人发现v1.1在iOS上更可靠。茶壶样品也使用GLES 1.1。

使用陀螺仪比使用Magneotmeter更准确和“平滑”使设备围绕其参考轴旋转。诀窍是如何初始校准参考矩阵以获得设备的真正“航向”并将GL ES模型对象放置在摄像机周围的正确位置。完成后,您可以通过将GL的viewMatrix与CMAttitude.rotationMatrix的倒数相乘来在3D中旋转模型。

最后,如果您打算同时支持iPhone 3Gs,请不要忘记检查CMMotionManager的gyroAvailable属性,并使用磁力计提供替代实现。

答案 1 :(得分:3)

您可以尝试使用CMMotionManager实例方法

startDeviceMotionUpdatesToQueue:withHandler:startGyroUpdatesToQueue:withHandler:

 [CMMotionManagerObject startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^ (CMDeviceMotion *devMotion, NSError *error)
         {   
             CMAttitude *currentAttitude = devMotion.attitude;
             xRotation = currentAttitude.roll*180/M_PI;
             yRotation = currentAttitude.pitch*180/M_PI;
             zRotation = currentAttitude.yaw*180/M_PI;
         }];

如果您使用startGyroUpdatesToQueue:withHandler:,则可以通过属性gyroData

获取结果

答案 2 :(得分:0)

不幸的是,我不知道任何代码示例。

所有AR应用程序常见的问题是您需要找出设备的方向。你可以用atan2和加速度计做到这一点,但它有一些不合理的噪音(如Apple的AccelerometerGraph示例项目中所示)。如果您尝试使用自适应低通滤波器进行修复,则可以降低噪声,但也会降低响应速度。

陀螺仪没有噪音,但误差累积得足够快,您必须使用加速度计不断重置位置。旋转物体似乎很好,但不能更换罗盘。