0

我正在尝试打印 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。我是否遗漏了一些明显的东西,有人可以帮助我解决这个问题,以便在单击按钮时可以正确访问相机参数吗?

提前致谢!

4

1 回答 1

1

您正在通过调用初始化一个新会话ARSession.init(),因此它返回也就不足为奇了nil。您应该改用当前正在运行的实例ARSession。假设您正在使用ARSCNView渲染 AR 体验,正确的代码如下所示:

@IBAction private func startPressed() {
    if let matrix = sceneView.session.currentFrame?.camera.projectionMatrix {
       print(matrix)
    }
}
于 2020-07-27T13:57:47.877 回答