2017-02-10 37 views
1

我正在一個包含場景(SceneKit)的iOS/Swift項目。 我想要做的是在用戶旋轉手機時旋轉SCNCameraSCNCamera運動同步到iPhone加速計

這裏是我做了什麼:

motionManager = CMMotionManager() 
    motionManager.accelerometerUpdateInterval = 0.1 

    motionManager.startAccelerometerUpdates(to: OperationQueue.main) { [weak self] (data: CMAccelerometerData?, error: Error?) in self?.update_rotation(p: (data?.acceleration)!) } 

,並在update_rotation功能:

camera_node.eulerAngles = SCNVector3Make(angle_x,angle_y,angle_z) 

camera_node是我SCNNode相機對象。根據加速度計數據計算angle_xangle_z。 (我只是將加速度計值乘以90,然後將其轉換爲弧度)。從指南針(北角)計算出angle_y

我的問題來自angle_z。這很奇怪,因爲eulerAngles.z屬性的行爲取決於angle_y的值。換句話說,如果朝北方向看,一切都很好。 當我向南看時,angle_z需要倒置。 我不明白爲什麼。

回答

0
let motionManager = CMMotionManager() 
motionManager.deviceMotionUpdateInterval = 1.0/60.0 
if motionManager.isDeviceMotionAvailable { 
    motionManager.startDeviceMotionUpdates(to: OperationQueue.main, withHandler: { (devMotion, error) -> Void in 
     cameraNode.eulerAngles = SCNVector3(
      -Float((devMotion?.attitude.roll)!) - Float(M_PI_2), 
      Float((motionManager.deviceMotion?.attitude.yaw)!), 
      -Float((motionManager.deviceMotion?.attitude.pitch)!) 
     ) 
    })} 

我嘗試這與iPad的

我的操場應用
+0

有完全相同的問題。我刪除了SCNVector3中的兩個減號,因爲我正在使用Landscape - home left。如果我將手機向左/向右傾斜,當我向後看時,這不起作用 – Bob5421