首页 文章

Scenekit - SCNNode 的多次旋转和轴的方向

提问于
浏览
1

我有一个 SCNNode,我继续旋转平移手势 90 度增量。前几个旋转按预期工作,通过节点轴在相反方向上旋转的情况,旋转以错误的方向执行。如何在每次旋转后确定轴的方向?

场景(为简单起见使用多维数据集):

  • 我沿 Y 轴旋转立方体 90deg。 Y 点仍然向上,X 现指向相机,Z 指向右

  • 我沿着 Y 再次旋转立方体 90 度.X 现在指向左边,Z 指向相机

  • 问题 - 我现在尝试沿 X 轴旋转 90 度。因为 X 旋转 180 度,旋转现在反转。

如何理解何时旋转(-1,0,0)和何时(1,0,0)?

我对 3D 数学世界很陌生,我希望我正确地解释了我的问题。

1 回答

  • 0

    进一步研究后,我意识到我选择了完全错误的方法实现我想要的方法是使用 rootNode 的轴旋转节点 - 这样我就不必担心节点的局部轴。

    编辑:根据 Xartec 的建议更新代码

    let rotation = SCNMatrix4MakeRotation(angle,  x, y, Float(0))
    let newTransform = SCNMatrix4Mult(bricksNode.transform, rotation)
    let animation = CABasicAnimation(keyPath: "transform")
    animation.fromValue = bricksNode.transform
    animation.toValue = scnScene.rootNode.convertTransform(newTransform,from: nil)
    animation.duration = 0.5
    bricksNode.addAnimation(animation, forKey: nil)
    

相关问题