以每秒特定速率获取帧的位置
Get frame's position at an specific rate per second
我试图通过添加渲染器委托方法(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)
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 的情况下安装您的应用程序。
我试图通过添加渲染器委托方法(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)
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 的情况下安装您的应用程序。