2016-11-15 50 views
2

我有一個關於在沒有在SceneKit中旋轉的情況下向上/向下和向左/向右移動攝像頭的問題。我發現了很多關於旋轉相機的討論,我正在使用它來旋轉。但我不知道如何移動相機而不旋轉它。我試圖模仿,允許攝像頭控制,用戶可以用兩根手指平移以改變攝像頭的x和y位置。這裏是我的平底手勢識別器的代碼,任何幫助將不勝感激,謝謝!在Scenekit中移動攝像機

func handlePan(gestureRecognize: UIPanGestureRecognizer) { 

    let numberOfTouches = gestureRecognize.numberOfTouches 

    var translation = gestureRecognize.translation(in: gestureRecognize.view!) 
    var widthRatio = Float(translation.x)/Float(gestureRecognize.view!.frame.size.width) + lastWidthRatio 
    var heightRatio = Float(translation.y)/Float(gestureRecognize.view!.frame.size.height) + lastHeightRatio 

    if (numberOfTouches==fingersNeededToPan) { 


     self.cameraOrbit.eulerAngles.y = Float(-2 * M_PI) * widthRatio 
     self.cameraOrbit.eulerAngles.x = Float(-M_PI) * heightRatio 

     //for final check on fingers number 
     lastFingersNumber = fingersNeededToPan 
    } 

    if numberOfTouches == 2 { 

     self.cameraNode.position.x = -(Float(translation.x)/Float(gestureRecognize.view!.frame.size.width) + lastWidthRatio) 
     self.cameraNode.position.y = -(Float(translation.y)/Float(gestureRecognize.view!.frame.size.height) + lastHeightRatio) 

    } 


    lastFingersNumber = (numberOfTouches>0 ? numberOfTouches : lastFingersNumber) 

    if (gestureRecognize.state == .ended && lastFingersNumber==fingersNeededToPan) { 
     lastWidthRatio = widthRatio 
     lastHeightRatio = heightRatio 
    } 
} 
+0

澄清:你是否想橫向移動,而不改變攝像機角度?例如。我面向東北方向,在向東北方向繼續前進的同時,向左側(西北向左側,東南向右側)行進? –

+0

是的,我只是試圖移動相機左/右或上/下旋轉,就像是可能withCameraControl,抱歉的混亂@HalMueller –

回答

3

如果你想滑動左/右,或上/下,那麼你不需要cameraOrbit節點(這是Scenekit camera orbit around object用途)。

取而代之,您只需滑動左/右(X軸)或上/下(Y軸)以響應觸摸。看起來你正在那樣做。但是,如果cameraNodecameraOrbit的孩子,那麼您將在cameraOrbit的座標系中移動,該座標系也由您的手勢處理程序進行旋轉!使相機節點成爲場景根節點的子節點。

現在,當你的相機沒有與根座標系統排列在一起時,會發生混雜的事情。如果相機的X,Y和Z軸與場景的X/Y/Z軸平行,則可以調整相機的X/Y位置以進行移動。但是,如果相機已旋轉或指向Z軸,則需要調整相機節點transform,以在相機的平面中左右移動或向上/向下移動。我會盡快展開這個答案來證明這一點。

+0

這幫助我弄明白了,謝謝! –

相關問題