【问题标题】:Get frame's position at an specific rate per second以每秒特定的速率获取帧的位置
【发布时间】:2018-08-29 18:10:37
【问题描述】:

我正在尝试在场景中添加渲染器委托方法(ARSCNViewDelegate 中的方法)获取camera 的当前位置:

func renderer(_ renderer: SCNSceneRenderer, willRenderScene scene: SCNScene, atTime time: TimeInterval) {

    guard let pointOfView = sceneView.pointOfView else { return }
    let transform = pointOfView.transform
    let position = SCNVector3Make(transform.m41, transform.m42, transform.m43)
    let orientation = SCNVector3Make(transform.m31, transform.m32, transform.m33)
    ...
}

并且我想在每秒特定数量的帧(在我的情况下为 25 fps)获得这些位置。我可以通过修改这个参数来得到这个:preferredFramesPerSecond 但它总是自动调整到 30 fps,而不是 25。 它适用于 5、15、20、30、45 或 60,但为什么不适用于 25 fps?

override func viewDidLoad() {

    super.viewDidLoad()
    ...
    sceneView.preferredFramesPerSecond = 25
    ...
}

无论如何,当然降低 FPS 意味着更差的 AR 性能,所以......有没有另一种方法可以在我每次需要时向 ARKit 询问帧相机位置?特别是每 25 fps。

提前非常感谢!

【问题讨论】:

  • 如果你没有想到,你可以使用线程每1/25秒更新一次,得到你的位置
  • 嗨@alok-subedi,我该如何实现呢?提前致谢!

标签: swift scenekit arkit


【解决方案1】:

这用于在秒的特定时间后运行代码块。 (你的情况是 1/25)

func recurringFunction(){
    // your code here
    guard let pointOfView = sceneView.pointOfView else { return }
    let transform = pointOfView.transform
    let position = SCNVector3Make(transform.m41, transform.m42, transform.m43)
    let orientation = SCNVector3Make(transform.m31, transform.m32, transform.m33)
    ....

    DispatchQueue.main.asyncAfter(deadline: .now() + 1/25) {
        self.recurringFunction()
    }
}

它还有助于在不降低您通常的 fps 的情况下运行您的应用程序。

【讨论】:

  • 感谢这个很棒的提示,但是,我如何在 recurringFunction 中添加我的渲染器函数以获取和渲染位置?
  • 我进行了编辑。你只需要在 dispatchQueue 上面添加你的代码
  • 这是我尝试的第一件事,但它根本不渲染也不计算任何位置:func recurringFunction(){ func renderer(_ renderer: SCNSceneRenderer, willRenderScene scene: SCNScene, atTime time: TimeInterval) {...我的代码...} DispatchQueue.main.asyncAfter(deadline: .now() + 1/25) {self.recurringFunction()}}
  • 我已经编辑了,看看。你不需要func renderer(_ renderer:
  • 使用调度源可能比不断排队块更好,请参阅developer.apple.com/documentation/dispatch/dispatchsourcetimer
猜你喜欢
  • 2022-12-20
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
相关资源
最近更新 更多