2017-06-27 12 views
0

以下のコードを使用して、パンジェスチャーを使用してノードを回転しています。ノードをy軸だけ回転させるのが好きです。SceneKit iOSのパンジェスチャーを使用してノードを回転する

let translation = gestureRecognize.translation(in: gestureRecognize.view!) 

let x = Float(translation.x) 
let y = Float(-translation.y) 
let anglePan = (sqrt(pow(x,2)+pow(y,2)))*(Float)(Double.pi)/180.0 

var rotationVector = SCNVector4() 
rotationVector.x = 0.0 
rotationVector.y = x 
rotationVector.z = 0.0 
rotationVector.w = anglePan 


node.rotation = rotationVector 

if(gestureRecognize.state == UIGestureRecognizerState.ended) { 
    let currentPivot = node.pivot 
    let changePivot = SCNMatrix4Invert(node.transform) 

    node.pivot = SCNMatrix4Mult(changePivot, currentPivot) 
    node.transform = SCNMatrix4Identity 

} 

これは、オイラーが(x:0、y:0、z:0)に設定されたノードで有効です。しかし私のノードはオイラー(x:-90、y:0、z:0)を持っています。上記の私のオイラー値では、オブジェクトが間違った角度で回転します。自分の/異なるオイラー値でノードを回転させるにはどうすればよいですか?

+0

オイラー角を設定しているときに回転軸をノードとともに回転させたいのですか? – orangenkopf

+0

私はそう思います。私はシーンキットを初めて使っているので、回転がオイラーに影響するのか分かりません。しかし、私が必要とするのは、ノードを水平に(y軸)、オイラーのx値を-90に設定して回転させることです – prabhu

答えて

0

回転ベクトルは次のようになります。

rotation = SCNVector4(x: 0, y: 1, z: 0, w: some_angle_in_radians) 

X、Y、Zは、正規化部ベクトル wはラジアンで

であるおそらく

ようなものであるべきで、Y、Xの値を確認するあなたの数学

let anglePan = (sqrt(pow(x,2)+pow(y,2)))*(Float)(Double.pi)/180.0 

をチェック

let anglePan = (sqrt(pow(x*deg2rd,2)+pow(y*deg2rad,2))) 
関連する問題