2
我嘗試從ARSession的currentFrame.camera
屬性獲取相機轉換。 爲什麼我一直得到sceneView.session.currentFrame?
爲nil
?iOS ARKit會話currentFrame始終爲零
我嘗試從ARSession的currentFrame.camera
屬性獲取相機轉換。 爲什麼我一直得到sceneView.session.currentFrame?
爲nil
?iOS ARKit會話currentFrame始終爲零
我只是跑了一個快速測試,看到session.currentFrame
零通過渲染循環的第一次通過。這種滯後各不相同,可能是兩到十幾個。但最終currentFrame
來臨。
class ViewController: UIViewController, ARSCNViewDelegate, ARSessionDelegate, SCNSceneRendererDelegate {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Create a session configuration
let configuration = ARWorldTrackingSessionConfiguration()
configuration.worldAlignment = .gravityAndHeading
configuration.planeDetection = .horizontal
sceneView.session.delegate = self
// Run the view's session
sceneView.session.run(configuration)
print(#function, sceneView.session.currentFrame)
}
// MARK: - SCNSceneRendererDelegate
func renderer(_ renderer: SCNSceneRenderer, didRenderScene scene: SCNScene, atTime time: TimeInterval) {
print(#function, sceneView.session.currentFrame)
}
// MARK: - ARSessionDelegate
func session(_ session: ARSession, didUpdate frame: ARFrame) {
print(#function, sceneView.session.currentFrame)
}
給我們
renderer(_:didRenderScene:atTime:) nil
...
session(_:didUpdate:) Optional(<ARFrame: 0x1c42cff10 timestamp=6334.963644 capturedImage=0x1c0124d80 camera=0x1c41262c0 lightEstimate=0x1c4238640 | no anchors, 0 features>)
...
renderer(_:didRenderScene:atTime:) Optional(<ARFrame: 0x1c02c9c30 timestamp=6334.996948 capturedImage=0x1c0124b00 camera=0x1c0124920 lightEstimate=0x1c02251a0 | no anchors, 0 features>)