我试图通过添加渲染器委托方法(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。
非常感谢!
答案 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的情况下运行您的应用。