6

早晨,

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

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

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

干杯,

查理

4

3 回答 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

于 2011-03-14T10:23:03.287 回答
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,请不要忘记检查gyroAvailableCMMotionManager 的属性并提供使用磁力计的替代实现。

于 2011-03-14T10:14:42.687 回答
0

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

所有 AR 应用程序的一个共同问题是您需要找出设备的方向。您可以使用 atan2 和加速度计来做到这一点,但它有大量的噪音(如 Apple 的AccelerometerGraph示例项目中所示)。如果您尝试使用自适应低通滤波器修复它,您可以减少噪音,但也会降低响应速度。

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

于 2011-05-19T08:07:02.693 回答