2017-10-11 72 views
0

我有一個SCNNode,我繼續以90deg的增量旋轉平移手勢。前幾次旋轉按照預期工作,其中節點軸沿相反方向旋轉,旋轉方向錯誤。我如何確定每次旋轉後軸的方向?Scenekit - SCNNode的多次旋轉和軸的方向

方案(使用爲了簡單立方體):

  • 我旋轉沿Y軸的立方體90度。 Y點仍然向上,X現在指向相機,Z點右邊
  • 我再次旋轉立方體90deg沿着Y. X現在點左邊,Z到相機
  • 問題 - 我現在試着沿X軸旋轉90deg 。由於X旋轉了180度,旋轉現在被顛倒過來。

我該如何理解何時旋轉(-1,0,0)和何時(1,0,0)?

我對3D數學的世界很陌生,我希望我正確地解釋了我的問題。

回答

0

經過進一步的研究,我意識到我選擇了完全錯誤的方法。實現我想要的方式是使用rootNode的軸旋轉節點 - 這樣我就不需要擔心節點的局部座標軸。

編輯:基於Xartec的建議

let rotation = SCNMatrix4MakeRotation(angle, x, y, Float(0)) 
let newTransform = SCNMatrix4Mult(bricksNode.transform, rotation) 
let animation = CABasicAnimation(keyPath: "transform") 
animation.fromValue = bricksNode.transform 
animation.toValue = scnScene.rootNode.convertTransform(newTransform,from: nil) 
animation.duration = 0.5 
bricksNode.addAnimation(animation, forKey: nil) 
+1

使用另一個節點更新的代碼基本上代表世廣是不是達到你想要的最直接的方法。如果是場景,則可以使用rootNode而不是虛擬節點。而不是worldTransform,你可以使用.transform,並以相反的順序乘以矩陣。 – Xartec

+0

感謝寶貴意見Xartec,我會更新答案! –

+0

還有一個問題,如果我可以 - 如果旋轉節點的位置不是(0,0,0),情況會不會相同? –