gpt4 book ai didi

ios - 如何更改 ARKit 更新函数频率 (FPS)?

转载 作者:行者123 更新时间:2023-11-28 07:30:53 36 4
gpt4 key购买 nike

我目前正在努力限制我的 ARKit iOS 应用程序的 CPU 负载。为此,我需要限制每秒调用 session(_ didUpdate: 函数的时间。我尝试更改我的 ARSCNView 的 preferredFramesPerSecond 属性。这确实减慢了传入视频源的 fps,但是更新函数仍然每秒被调用一次疯狂的次数。我的另一个解决方案是使用传入 ARFrame 的 timeStamp 属性并计算上次保存的渲染时间之间的差异。我正在尝试在 Swift Playgrounds 上运行该程序并且无论出于何种原因,在具有类型 TimeInterval 的渲染循环中设置变量失败。此解决方案确实适用于普通的 iOS 应用程序。是否有任何正确的方法可以直接设置 ARKit 更新功能的频率?

当前代码:

我的 AR 属性:

private lazy var lastRenderTime = Date().timeIntervalSince1970

private lazy var sceneView: ARSCNView = {
let sceneView = ARSCNView()
sceneView.session.delegate = self
sceneView.preferredFramesPerSecond = 30
sceneView.debugOptions = [.showFeaturePoints]
sceneView.translatesAutoresizingMaskIntoConstraints = false
return sceneView
}()

委托(delegate)实现:

extension MainViewController: ARSessionDelegate {
func session(_ session: ARSession, didUpdate frame: ARFrame) {
let timeSinceLastUpdate = lastRenderTime - frame.timestamp

if timeSinceLastUpdate >= 0.1 || timeSinceLastUpdate < 0 {
lastRenderTime = frame.timestamp
// Do Updating Stuff
}
}
}

最佳答案

所以我遇到了同样的问题,我找到了解决这个问题的合适方法。您可以设置一个计时器变量,然后根据计时器在 didUpdate 函数中调用您需要的任何内容。我将在下面提供一些代码示例,其中我将每 0.5 秒调用一次 session Didupdate 帧函数。 (你可以改变它以适应任何看起来最好的)

代码示例:

//setting up timer variables and functions 
var time = 0.0
var timer = Timer()

func startTimer() {
timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(updateTime), userInfo: nil, repeats: true)
}

func resetTimer() {
timer.invalidate()
time = 0
startTimer()
}

@objc func updateTime() {
if time < 0.5 {
time += 0.1
} else {
resetTimer()
}
}

在你的 viewdidload 或 viewwillappear 调用

startTimer()

最后在你的 didUpdate 函数中做一个条件语句

if time != 0.5 {
return
} else {
* your code *
}

关于ios - 如何更改 ARKit 更新函数频率 (FPS)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54738548/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com