景观模式中的增强现实应用

时间:2012-08-10 17:37:19

标签: ios matrix augmented-reality linear-algebra core-motion

我正在尝试使用CoreMotion框架构建增强现实应用程序。我试图取消Apple的pARk示例代码项目,但它只适用于纵向模式。我需要它在景观中工作。当切换到横向模式时,叠加视图中的子视图以相反的方向和错误的速率移动(它们在屏幕上移动得太快或太慢)

我已阅读提供两种解决方案的other postings

  • 根据CoreMotion Tea Pot示例中的建议,创建参考态度并将该态度的反转应用于当前态度。

  • 将态度的四元数表示旋转90度

我不认为第一个会起作用,因为我的增强现实应用程序要求它被引用为真正的北方。

我也不明白做第二次所需的数学。

关于如何解决这个复杂问题的任何建议我都欢迎。

2 个答案:

答案 0 :(得分:0)

您现在在增强现实应用中有多远?我想从Apple开始看看PARK是非常严厉的。你需要有一些高级的数学理解。但如果你这样做,为什么不呢!

你可以看看这个repository,这是一个致力于纵向和横向模式的增强现实项目。以下是旋转的处理方式:

- (void)deviceOrientationDidChange:(NSNotification *)notification {

prevHeading = HEADING_NOT_SET; 

[self currentDeviceOrientation];

UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];

// Later we may handle the Orientation of Faceup to show a Map.  For now let's ignore it.
if (orientation != UIDeviceOrientationUnknown && orientation != UIDeviceOrientationFaceUp && orientation != UIDeviceOrientationFaceDown) {

    CGAffineTransform transform = CGAffineTransformMakeRotation(degreesToRadian(0));
    CGRect bounds = [[UIScreen mainScreen] bounds];

    switch (orientation) {
        case UIDeviceOrientationLandscapeLeft:
            transform          = CGAffineTransformMakeRotation(degreesToRadian(90));
            bounds.size.width  = [[UIScreen mainScreen] bounds].size.height;
            bounds.size.height = [[UIScreen mainScreen] bounds].size.width;
            break;
        case UIDeviceOrientationLandscapeRight:
            transform          = CGAffineTransformMakeRotation(degreesToRadian(-90));
            bounds.size.width  = [[UIScreen mainScreen] bounds].size.height;
            bounds.size.height = [[UIScreen mainScreen] bounds].size.width;
            break;
        case UIDeviceOrientationPortraitUpsideDown:
            transform = CGAffineTransformMakeRotation(degreesToRadian(180));
            break;
        default:
            break;
    }


    [displayView setTransform:CGAffineTransformIdentity];
    [displayView setTransform: transform];
    [displayView setBounds:bounds];  

    degreeRange = [self displayView].bounds.size.width / ADJUST_BY;

}
}

您必须在设备旋转后旋转所有注释,然后旋转覆盖视图!

答案 1 :(得分:0)

如果您真的被困,并愿意使用其他工具包,请尝试iPhone-AR-Toolkit。它适用于肖像和风景。