上午,
我已经在StackOverFlow周围寻找了大约一个小时,并发现了许多示例代码(主要是github),用于创建增强现实应用程序,显示第二个位置相对于当前位置的位置(例如纽约)。
但是,我注意到这些都没有使用iPhone 4中提供的陀螺仪功能,为最终用户提供了更加流畅的体验。
有没有人知道这样的示例代码示例是否存在?
干杯,
查理
答案 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示例项目中所示)。如果您尝试使用自适应低通滤波器进行修复,则可以降低噪声,但也会降低响应速度。
陀螺仪没有噪音,但误差累积得足够快,您必须使用加速度计不断重置位置。旋转物体似乎很好,但不能更换罗盘。