我在多次旋转节点时遇到问题。我正在制作一个带有滚动球的游戏,虽然我可以将球沿一个轴或两个轴旋转相同的量,但我不能以部分角度旋转。

例子:

// 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 度,我就被卡住了。

即使有某种方法可以将向量加在一起也可以。

非常感谢任何帮助。

最佳答案

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

要在 SceneKit 中做到这一点,您可以:

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

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

    关于Swift Scenekit - 多次旋转,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27503597/

    10-11 22:37
    查看更多