【问题标题】:Swift Scenekit - Multiple rotationsSwift Scenekit - 多次旋转
【发布时间】:2015-02-14 16:52:33
【问题描述】:

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

示例:

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

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

非常感谢任何帮助。

【问题讨论】:

    标签: swift rotation scenekit


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我确实发现了一件值得注意的事情,这可能是其他人都知道的,但我一开始并没有意识到。在旋转它之前,节点的轴与父节点的访问相匹配。旋转节点后,将相对于其新轴进行第二次旋转,而不是相对于原始/父节点轴。现在我知道这似乎很合乎逻辑,但仍在适应三维思维。感谢 rickster 的帮助。
    猜你喜欢
    • 2018-03-22
    • 2015-03-05
    • 2014-10-08
    • 2018-06-05
    • 2018-01-31
    • 2014-10-05
    • 2018-12-17
    • 2017-11-18
    • 2017-07-26
    相关资源
    最近更新 更多