【问题标题】:ARKit ARCamera transform incorrectly rotated 90 degrees clockwiseARKit ARCamera 变换错误地顺时针旋转了 90 度
【发布时间】:2019-12-21 09:39:36
【问题描述】:

我正在关注其中一个关于 ARKit 的较早的 WWDC 视频,可在此处找到: https://developer.apple.com/videos/play/wwdc2017/602/

在此视频中,他们创建了一个 AR 应用程序,该应用程序可以侦听轻击手势并使用场景视图的快照创建图像平面。

以下是视频中的相关代码:

但是,当我在我的设备上运行代码时,生成的平面总是相对于我的设备方向顺时针旋转 90 度。 例如,当我的设备处于纵向模式时,生成的平面如下所示:

同样,如果我将设备横向放置在右侧,图像平面的“顶部”将指向下方。

ARCamera 变换似乎总是相对于设备方向偏离 90 度是否有原因?

【问题讨论】:

    标签: ios swift scenekit augmented-reality arkit


    【解决方案1】:

    默认情况下,iPhone 或 iPad 的摄像头拍摄的图像以摄像头传感器的原生 横向 方向进行编码。当你拍摄快照时(即使你的设备是纵向的),iOS 会写入一个方向值:

    CGImagePropertyOrientation.right
    

    在生成的图像文件中。 ARKit 应用程序从文件的元数据中读取该值,然后应用 90° ClockWise 旋转显示图像,因此您捕获的图像以预期摄影师的方向显示。

    你需要应用相反的操作——旋转图像90° CounterClockWise

    所以,请阅读this post 了解如何使用CVPixelBuffer 制作它。

    此外,以下带有扩展的方法也可以帮助您:

    extension CGImagePropertyOrientation {
    
        init(_ uiOrientation: UIImage.Orientation) {
    
            switch uiOrientation {
                case .up: self = .up
                case .upMirrored: self = .upMirrored
                case .down: self = .down
                case .downMirrored: self = .downMirrored
                case .left: self = .left
                case .leftMirrored: self = .leftMirrored
                case .right: self = .right
                case .rightMirrored: self = .rightMirrored
                @unknown default: fatalError()
            }
        }
    } 
    extension UIImage.Orientation {
    
        init(_ cgOrientation: UIImage.Orientation) {
    
            switch cgOrientation {
                case .up: self = .up
                case .upMirrored: self = .upMirrored
                case .down: self = .down
                case .downMirrored: self = .downMirrored
                case .left: self = .left
                case .leftMirrored: self = .leftMirrored
                case .right: self = .right
                case .rightMirrored: self = .rightMirrored
                @unknown default: fatalError()
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-05
      • 1970-01-01
      • 2020-11-30
      • 1970-01-01
      相关资源
      最近更新 更多