2017-07-04 68 views

回答

1

我只是跑了一個快速測試,看到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>)