【问题标题】:How to make SCNNode rotate/spin horizontally如何使 SCNNode 水平旋转/自旋
【发布时间】:2017-12-26 21:35:53
【问题描述】:

我正在尝试让我的 SCNNode 自动水平旋转。这是我到目前为止的代码:

box.scale = SCNVector3(x: 0.26, y: 0.26, z: 0.26)
box.position = SCNVector3(0.15, 3.85, -3)

如何让这个盒子自动水平旋转?另外,有没有办法在启用用户交互的情况下实现它?谢谢!

更新:如果我说的不是很清楚,这就是我的意思:你知道什么时候用手指旋转篮球,它是如何水平旋转的吗?这就是我想要达到的效果!谢谢!

【问题讨论】:

    标签: scenekit swift4 scnnode xcode9


    【解决方案1】:

    你可以

    编辑:

    let action = SCNAction.repeatForever(SCNAction.rotate(by: .pi, around: SCNVector3(0, 1, 0), duration: 5))
    box.runAction(action)
    

    你可以像这样改变变换

    let oldTransform = box.transform
    let rotation = SCNMatrix4MakeRotation(axis.x, axis.y, axis.z angle)
    SCNTransaction.begin()
    SCNTransaction.animationDuration = 0.5
    box.transform = SCNMatrix4Mult(rotation, oldTransform)
    SCNTransaction.commit()
    

    要使用用户输入,您可以使用手势识别器更改旋转角度或持续时间

    【讨论】:

    • axis.x、y、z 和角度是什么?当我执行 SCNMatrix4MakeRotation 时,它会将其设置为默认值:角度、x、y、z。我不知道在这些值中添加什么?我是否放置与我的位置相同的xyz?我做了 360 度的来回角度让它完全旋转?谢谢!
    • 我更新了问题以使其听起来更清晰。我想要篮球的旋转效果!
    • axis 是您要绕其旋转的轴,例如[0, 1, 0]worldUp,具体取决于您要绕局部y 轴还是全局y 轴旋转,而angle是以弧度为单位的旋转角度,所以.pi * 2 表示完全旋转。
    • 哦,好吧,所以我可以将轴设置为 0 并更改角度?还是我将 xyz 设置为与我的位置相同?
    • 轴是旋转轴,所以如果要绕x轴旋转,使用(1, 0, 0),(0,1,0)为节点y轴,(0, 0,1) 对于 z
    【解决方案2】:

    使用 SceneView 的 SwiftUI 使用稍微更新的语法更新了已接受的答案。

    在 iOS14/iOS15 上运行良好

        let oldTransform = cubeNode.transform
        let rotation = SCNMatrix4MakeRotation(GLKMathDegreesToRadians(90), 0, 1, 0)
        SCNTransaction.begin()
        SCNTransaction.animationDuration = 0.5
        cubeNode.transform = SCNMatrix4Mult(rotation, oldTransform)
        SCNTransaction.commit()
    

    【讨论】:

      猜你喜欢
      • 2018-01-20
      • 1970-01-01
      • 2016-03-18
      • 2021-07-09
      • 1970-01-01
      • 1970-01-01
      • 2013-12-11
      • 2019-09-29
      • 1970-01-01
      相关资源
      最近更新 更多