【问题标题】:Swift: Access ARsession parameters through a UIbuttion clickSwift:通过 UI 按钮单击访问 ARsession 参数
【发布时间】:2020-11-16 00:17:17
【问题描述】:

我正在尝试打印 ARsession 的参数,如下所示。当我在会话中执行此操作时,它会起作用。

func session(_ session: ARSession, didUpdate frame: ARFrame) {
          guard let arCamera = session.currentFrame?.camera else { return }
          print("ARCamera ProjectionMatrix = \(arCamera.projectionMatrix)")
    }

结果:

ARCamera ProjectionMatrix = simd_float4x4([[1.774035, 0.0, 0.0, 0.0], [0.0, 2.36538, 0.0, 0.0], [-0.0011034012, 0.00073593855, -0.99999976, -1.0], [0.0, 0.0, -0.0009999998, 0.0]])

但是,我想在单击按钮时访问/打印参数。我尝试了以下方法:

@IBAction private func startPressed() {
    print(ARSession.init().currentFrame?.camera.projectionMatrix)
}

但是上面的结果返回nil。我是否遗漏了一些明显的东西,有人可以帮助我解决这个问题,以便在单击按钮时正确访问相机参数吗?

提前致谢!

【问题讨论】:

    标签: swift scenekit arkit projection-matrix arcamera


    【解决方案1】:

    您正在通过调用ARSession.init() 来初始化一个新会话,所以难怪它会返回nil。您应该改用当前正在运行的ARSession 的实例。假设您使用 ARSCNView 来呈现 AR 体验,正确的代码如下所示:

    @IBAction private func startPressed() {
        if let matrix = sceneView.session.currentFrame?.camera.projectionMatrix {
           print(matrix)
        }
    }
    

    【讨论】:

    • 这里只是跟进,可以只打印矩阵编号吗?我也在打印类型和可选。 Optional(simd_float4x4([[1.774035, 0.0, 0.0, 0.0], [0.0, 2.36538, 0.0, 0.0], [-0.0011034012, 0.00073593855, -0.99999976, -1.0], [0.0, 0.0, -0.0009999998, 0.0]]))
    • 你可以解开matrix属性来去掉打印结果中的“可选”。我已经用一个例子更新了答案。
    • 谢谢!我用 !它走了!还有 simd_float4x4 矩阵类型。有没有办法不显示?
    • 据我所知没办法:)
    猜你喜欢
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多