每秒以特定速率获取框架的位置

时间:2018-08-28 08:36:42

标签: swift scenekit arkit

我试图通过添加渲染器委托方法(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 fps。 可以在5、15、20、30、45或60下正常工作,但为什么不能在25 fps下工作?

override func viewDidLoad() {

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

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

非常感谢!

1 个答案:

答案 0 :(得分:2)

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

#include <iostream>
#include <vector>

using namespace std;

int main()
{

    vector<int> vt;
    vt.push_back(0);
    vt.push_back(1);

    vector<int>::iterator it1 = vt.begin();
    vector<int>::iterator it2 = ++vt.begin();
    cout << vt[0];  // 0
    cout << vt[1] << endl; // 1

    swap(it1, it2);

    cout << vt[0]; // still 0
    cout << vt[1] << endl; // still 1

    system("pause");
    return 0;
}

它也将有助于在不降低常规fps的情况下运行您的应用。