Swift Scenekit - 多次旋转

Mat*_*ker 3 rotation scenekit swift

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

例:

// 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)
Run Code Online (Sandbox Code Playgroud)

所有这些都会奏效,但是如果我需要将球向上滚动180和90,我就会卡住.

即使有某种方法可以将载体添加到一起,这对我有用.

任何帮助非常感谢.

ric*_*ter 5

要组合旋转矩阵的效果,请使用矩阵乘法.

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

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

如果转换顺序对您的应用程序很重要,请记住矩阵乘法顺序与转换顺序相反.