早晨,
我在 StackOverFlow 上搜索了大约一个小时,发现了很多用于创建增强现实应用程序的示例代码(主要是 github),这些应用程序显示了第二个位置相对于您当前位置的位置(例如纽约)。
但是,我注意到这些都没有使用 iPhone 4 中提供的陀螺仪功能,从而为最终用户提供了更加流畅的体验。
有谁知道是否存在这样的示例代码示例?
干杯,
查理
早晨,
我在 StackOverFlow 上搜索了大约一个小时,发现了很多用于创建增强现实应用程序的示例代码(主要是 github),这些应用程序显示了第二个位置相对于您当前位置的位置(例如纽约)。
但是,我注意到这些都没有使用 iPhone 4 中提供的陀螺仪功能,从而为最终用户提供了更加流畅的体验。
有谁知道是否存在这样的示例代码示例?
干杯,
查理
您可以尝试使用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
您绝对可以使用 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,请不要忘记检查gyroAvailable
CMMotionManager 的属性并提供使用磁力计的替代实现。
不幸的是,我不知道任何代码示例。
所有 AR 应用程序的一个共同问题是您需要找出设备的方向。您可以使用 atan2 和加速度计来做到这一点,但它有大量的噪音(如 Apple 的AccelerometerGraph示例项目中所示)。如果您尝试使用自适应低通滤波器修复它,您可以减少噪音,但也会降低响应速度。
陀螺仪没有噪音,但误差累积得足够快,以至于您必须使用加速度计不断重置位置。旋转物体似乎很好,但不能替换指南针。