横向模式下的增强现实应用程序

Posted

技术标签:

【中文标题】横向模式下的增强现实应用程序【英文标题】:Augmented Reality App in Landscape Mode 【发布时间】:2012-08-10 17:37:18 【问题描述】:

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

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

按照 CoreMotion 茶壶示例中的建议,创建参考姿态并将该姿态的倒数应用于当前姿态。

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

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

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

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

【问题讨论】:

【参考方案1】:

您现在在增强现实应用中的进展如何?我认为首先看一下 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;



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

【讨论】:

【参考方案2】:

如果您真的遇到困难,并且愿意使用其他工具包,请尝试iPhone-AR-Toolkit。它适用于纵向和横向。

【讨论】:

我试过你的框架,但是覆盖视图的移动太不稳定了。 Apple's park 中的移动要顺畅得多。

以上是关于横向模式下的增强现实应用程序的主要内容,如果未能解决你的问题,请参考以下文章

横向模式下的 iPhone MPMoviePlayer

方向改变时相机出现问题

横向模式下的 TabBar 问题

横向模式下的 UINavigationController 后退按钮问题?

横向模式下的闪屏

修复横向模式下的旋转问题