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

6

早上好,

我在StackOverFlow上搜寻了约一个小时,并找到了许多与创建增强现实应用程序相关的示例代码(主要是github),这些应用程序显示第二个位置相对于您当前位置的位置(例如纽约)。

然而,我注意到这些示例代码都没有使用iPhone 4提供的陀螺仪功能,这会给最终用户带来更平滑的体验。

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

谢谢,

查理


你可以在这里找到一个示例,详细描述了构建简单AR应用程序所需的所有步骤(iPhone的姿态是从CMDeviceMotion获取的)。 - blobnl
3个回答

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获取结果。

3
您可以使用CoreMotion从陀螺仪获取数据。基本方法是获取CMAttitude.rotationMatrix并将其逆矩阵(转置)乘以一个参考矩阵,该参考矩阵最初由您设置。developer.apple.com上的Teapot示例项目展示了使用CoreMotion的基本方法。
对于真正的增强现实应用程序,您需要使用OpenGL ES创建模型。在尝试了GL ES 2.0之后,我个人发现v1.1在iOS上更可靠。Teapot示例还使用GLES 1.1。
使用陀螺仪比使用磁力计更准确和“平滑”,以获取设备围绕其参考轴的旋转。诀窍在于如何最初校准参考矩阵,以获得设备的真实“航向”,并将GL ES模型对象放置在摄像机周围的正确位置。在实现了这一点之后,您可以通过将GL的viewMatrix与CMAttitude.rotationMatrix的逆矩阵相乘来在3D中旋转模型。
最后,如果您打算支持iPhone 3Gs,则不要忘记检查CMMotionManager的gyroAvailable属性,并使用磁力计提供替代实现。

0

很遗憾,我没有任何代码示例。

所有AR应用程序共同的问题是需要找出设备的方向。您可以使用atan2和加速度计来完成此操作,但它具有难以置信的噪声(如Apple的AccelerometerGraph示例项目中所示)。如果您尝试使用自适应低通滤波器修复它,则会减少噪声,但响应速度也会降低。

陀螺仪没有噪音,但误差累积得足够快,以至于您必须经常使用加速度计重置位置。它似乎对旋转对象很好,但不适用于替换罗盘。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接