Получить положение кадра с определенной скоростью в секунду - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь получить текущую позицию camera в сцене, добавляя метод делегата рендерера (метод в ARSCNViewDelegate):

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 кадров в секунду в моем случае). Я могу получить это, изменив этот параметр: favourFramesPerSecond , но он всегда автоматически настраивается на 30 кадров в секунду, а не на 25. Работает нормально для 5, 15, 20, 30, 45 или 60, но почему не для 25 кадров в секунду?

override func viewDidLoad() {

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

В любом случае, конечно, снижение FPS означает более низкую производительность AR, так что ... есть ли другой способ запрашивать у ARKit положение камеры в кадре каждый раз, когда мне это нужно? особенно каждые 25 кадров в секунду.

Заранее большое спасибо!

1 Ответ

0 голосов
/ 29 августа 2018

Используется для запуска блока кода через определенное время в секундах. (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.

...