2016-09-24 10 views
0

SceneKitでBlender 3Dモデル(地球テクスチャを持つ球)をインポートしましたが、これをパンジェスチャーで回転しようとしています。 SceneKitの回転システムはBlenderで採用されている回転システムとは異なるため、私は精神的にx軸とy軸を交換する必要があります。インポートされたブレンダーモデルが正しく回転しません

これは私が地球のオブジェクトを回転させる方法である:

func pan(gesture:UIPanGestureRecognizer) 
{ 
    let translation = gesture.translation(in: self.view) * 0.05 
    let intensity = Float(magnitude(point: translation)) // Euclidean distance 

    let rotation = SCNMatrix4MakeRotation(intensity, Float(translation.y), Float(translation.x), 0.0) // I invert the x and y because of the different coordinate system 
    earth.transform = SCNMatrix4Mult(earth.transform, rotation) 

    gesture.setTranslation(CGPoint(x:0.0, y:0.0), in: self.view) 
} 

y軸周りの回転が正しいですが、私は垂直方向にパンニングによりx軸に沿って回転しようとすると、それがXの場合のように思えます地球の軸は斜めであり、y軸に垂直ではない。私が最初に上向きにして、下方向に指をドラッグし、この動画では

https://www.youtube.com/watch?v=7YumAB_rXlk

+0

それはあなたがモデルを回転させるのではなく、オブジェクトの周りにカメラを回転させることができます可能ですか?これは、この種のことを行う「通常の」方法です。それは正しいことだと言っているわけではありません。私はあなたの究極の目的が何であるか分からず、オブジェクトの周りのカメラの動きよりもむしろモデルの回転を必要とするかもしれません。 – Confused

+0

@Confusedオブジェクトをシーンに追加して1つだけ回転させたい場合、それは機能しません。私は、カメラを動かさずにオブジェクトを回転させる適切な方法を学びたいと思っています。 –

+0

あなたはこれをチェックしましたか:http://stackoverflow.com/questions/38834092/how-to-rotate-an-scnbox – Confused

答えて

0

あなたがジェスチャーを持つノードを回転させたときは、それがノードの軸に対して行われます。ノードが元のデフォルトの方向、つまり+ X方向にあるとします。左から右へのスワイプでYについて180°回転させます。上下スワイプを適用すると、ノードは下方向ではなくXを中心に上に回転します。これは、最初のスワイプが反対方向を指しているようにX軸を振ったためです。これはちょうど極端な例です。最初のY回転が180度未満だった場合、Xをスワイプすると、ビデオなどの斜め方向にノードが回転します。

これに対処する1つの方法は、アースノードを別のノード(「コンテナノード」)に配置することです。アースノードをY回転に使用し、別々にX回転にコンテナノードを使用します。

しかし、私はこれに対処する方法は、ここで見つけることができます:How to rotate an SCNBox

+0

アップロードした映画では、回転を開始する前にy軸を中心に回転しませんでした。 x軸。 –

+0

あなたの質問はより明確にする必要があると思います。説明とビデオがどのように関連しているかは不明です。 – bpedit

+0

また、エディタ内でBlender DAEのネイティブ軸方向を調べましたか? – bpedit

関連する問題