2017-10-11 9 views
0

私は90度単位でパンのジェスチャーで回転し続けるSCNNodeを持っています。最初のいくつかの回転は、ノード軸が反対方向に回転し、回転が間違った方向に実行されるシナリオによって、意図したとおりに動作しています。どのように回転ごとに軸の向きを決定できますか? (簡単にするためにキューブを使用して)シーンキット - SCNNodeの複数回転と軸の方向

シナリオ:

  • iがY軸に沿ってキューブ90degを回転させます。 Y点は依然としてアップ、Xは今カメラを指し、Z点右
  • 私は今再び90deg Y. Xに沿ってキューブを回転させるカメラに左、Z
  • PROBLEMポイント - 私は現在、X軸に沿っ90degを回転させるように試みます。 Xが180度回転したので、回転が反転します。

(-1,0,0)と(1,0,0)を回転するタイミングをどのように理解できますか?

私は3D数学の世界では新しく、私は正しく問題を説明してくれることを願っています。

答えて

0

さらなる研究の後、私は完全に間違ったアプローチを選択したことを認識しました。私が望むものを達成する方法は、rootNodeの軸を使ってノードを回転させることでした。この方法では、自分のノードのローカル軸について心配する必要はありません。

EDIT:別のノードを使用して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

もう1つ質問があります - 回転ノードの位置が(0,0,0)でない場合も同じことが適用されますか? –

関連する問題