Swift Scenekit - 多次旋转

时间:2014-12-16 11:29:26

标签: swift rotation scenekit

我有多次旋转节点的问题。我正在进行一个带滚球的游戏,虽然我可以沿一个轴或两个轴旋转相同数量的球,但我无法以部分角度旋转。

示例:

// Roll right  90 - 
SCNNode.pivot = SCNMatrix4MakeRotation(Float(M_PI_2), 0, 1, 0)

// Roll right 180 - 
SCNNode.pivot = SCNMatrix4MakeRotation(Float(M_PI_2) * 2, 0, 1, 0)

// Roll up     90 - 
SCNNode.pivot = SCNMatrix4MakeRotation(Float(M_PI_2), 1, 0, 0)

// Roll up & right 90 - 
SCNNode.pivot = SCNMatrix4MakeRotation(Float(M_PI_2), 1, 1, 0)

所有这些都有效,但是如果我需要将球向上滚动180°并且向上90°,我就会卡住。

即使有某种方法可以将载体添加到一起,也可以这样做。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:5)

要结合rotation matrices的效果,请使用矩阵乘法。

要在SceneKit中执行此操作,您可以:

  • 使用SCNMatrix4Mult创建单独的旋转矩阵并将它们相乘。
  • 使用SCNMatrix4Rotate将旋转直接应用于现有矩阵。 (这相当于SCNMatrix4MakeRotation + SCNMatrix4Mult选项;它只是将这些步骤合并为一个函数调用。)

如果转换顺序对您的应用很重要,请记住matrix multiplication order is the reverse of transformation order