Scenekit - SCNNode的多次旋转和轴的方向

时间:2017-10-11 05:21:43

标签: ios swift 3d rotation scenekit

我有一个SCNNode,我继续以平移手势旋转90度增量。前几个旋转按预期工作,通过节点轴在相反方向上旋转的情况,旋转以错误的方向执行。如何在每次旋转后确定轴的方向?

场景(为简单起见使用多维数据集):

  • 我沿Y轴旋转立方体90deg。 Y点依然向上,X现指向相机,Z指向右
  • 我沿着Y再次旋转立方体90度.X现在指向左边,Z指向相机
  • 问题 - 我现在尝试沿X轴旋转90度。因为X旋转了180度,现在旋转了。

我如何理解何时旋转(-1,0,0)和何时(1,0,0)?

我对3D数学世界很陌生,我希望我能正确解释我的问题。

1 个答案:

答案 0 :(得分: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)