Swift Scenekit - 多重旋转

3

我有一个问题,需要将一个节点旋转多次。我正在制作一个滚动球的游戏,虽然我可以沿一个轴旋转球,或者通过相同的角度沿两个轴旋转,但我无法以部分角度旋转。

示例:

// 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个回答

6

要结合旋转矩阵的效果,使用矩阵乘法。

在SceneKit中,您可以选择:

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

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


有一件事值得注意,也许大家都知道,但我一开始并没有意识到。在旋转之前,节点的轴与父节点的轴相匹配。一旦节点被旋转,第二次旋转是相对于其新轴而不是原始/父节点轴进行的。现在我知道了,这似乎很合理,但仍在适应三维思维。感谢rickster的帮助。 - Matthew Baker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接