我有多次旋转节点的问题。我正在进行一个带滚球的游戏,虽然我可以沿一个轴或两个轴旋转相同数量的球,但我无法以部分角度旋转。
示例:
// 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°,我就会卡住。
即使有某种方法可以将载体添加到一起,也可以这样做。
非常感谢任何帮助。
答案 0 :(得分:5)
要结合rotation matrices的效果,请使用矩阵乘法。
要在SceneKit中执行此操作,您可以:
SCNMatrix4Mult
创建单独的旋转矩阵并将它们相乘。SCNMatrix4Rotate
将旋转直接应用于现有矩阵。 (这相当于SCNMatrix4MakeRotation
+ SCNMatrix4Mult
选项;它只是将这些步骤合并为一个函数调用。)如果转换顺序对您的应用很重要,请记住matrix multiplication order is the reverse of transformation order。