2017-10-11 94 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),情况会不会相同? –