2017-07-26 140 views
1

嘿,我試圖不斷獲得設備相機/ ARCamera的價值。據我所知,只有一個功能允許我訪問這些ARCamera特性。也就是說此功能在這裏:如何不斷獲取旋轉/歐拉角值ARCamera

代碼:

// Only gets called couple times when camera state changes 

func session(_ session: ARSession, cameraDidChangeTrackingState camera: ARCamera) 

    print("\(camera.eulerAngles)") 

} 

我一直在想,也許使用一些詭計喜歡把重複的計時器中,將調用該值的功能。但是我不能打電話給一個本地選擇器。什麼我更追求的是沿着這個功能是如何行的東西:

func renderer(_ aRenderer: SCNSceneRenderer, updateAtTime time: TimeInterval) { 
// This constantly gets called. 
} 

我不知道是否有以納入ARCamera到函數的方式。

回答

1

如果你想持續獲得相機狀態更新,實現ARSessionDelegate.session(_:didUpdate:)

class MyDelegate: ARSessionDelegate { 

    func session(_ session: ARSession, didUpdate frame: ARFrame) { 
    print("\(frame.camera)") 
    } 

    /* ... */ 
} 

的ARFrame對象應包含所有必要的信息camera領域。


如果你只是想跟蹤狀態發生變化時就知道了,你可能想將狀態從session(_:cameraDidChangeTrackingState:)存儲在一個領域,是指它在你的渲染循環:

class MyDelegate: SCNSceneRendererDelegate, ARSessionObserver { 

    var camera: ARCamera! = nil 

    func session(_ session: ARSession, cameraDidChangeTrackingState camera: ARCamera) { 
    self.camera = camera 
    } 

    func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) { 
    print("\(self.camera.trackingState)") 
    } 

    /* ... more methods ... */ 
} 
+0

謝謝您的回答非常感謝,但不幸的是,(cameraDidChangeTrackingState)只有在狀態改變時纔會被調用。所以它實際上沒有記錄camera.eulerAngles /特性。每一秒。所以(updateAtTime)將繼續打印相同的東西。不幸的是,在這方面還沒有任何信息。由於ARKits只有一兩天的時間。 – Hunter

+0

你可以讓你的類'ARSessionDelegate',它將接收'session(_:didUpdate:)'。第二個參數只是一個ARFrame,其中包含當前ARCamera實例的'camera'字段。更多:https://developer.apple.com/documentation/arkit/arsessiondelegate/2865611-session –