【问题标题】:How to rotate a Virtual Object in ARKit with Swift 4如何使用 Swift 4 在 ARKit 中旋转虚拟对象
【发布时间】:2017-11-20 13:23:41
【问题描述】:

我正在尝试在 Apple 的新 ARKit 中旋转虚拟对象。我希望对象无限旋转直到它停止。我尝试了多种方法,例如:

angleDegrees = Int(((object.eulerAngles.y) * 180) / Float.pi) % 360
object.eulerAngles.y = initialObjectAngle + amoutnToSpinPerSpin

...但似乎没有任何效果。我已经设置了虚拟对象,只需按一下按钮,我希望对象旋转。
我怎样才能做到这一点?

【问题讨论】:

    标签: ios swift scenekit xcode9-beta arkit


    【解决方案1】:

    请记住,ARKit 不是一种渲染/显示技术。 ARKit 为您做的主要事情是进行设置,以便您选择的任何图形技术(SceneKit、Unity、您自己的自定义引擎等)都可以轻松地在相机源上以一种提供良好 AR 体验的方式进行渲染。因此,任何关于如何绘制或动画 AR 内容的问题实际上都是关于您使用哪种显示技术的问题。

    在这种情况下,它看起来像 SceneKit。您是否看过 SceneKit 的(诚然相当稀疏的)documentation,其中包括其几种制作动画的方法?从今年(和过去几年)开始,SceneKit WWDC session 还附加了示例代码,它展示了......嗯,很多东西,但那里有连续的旋转动画。

    【讨论】:

    • 谢谢。我不确定在使用 ARKit 时是否需要不同的代码,或者它是否与通常的 SceneKit 相同。不过谢谢。
    【解决方案2】:

    所有“传统”技术都可以在 AR World 中旋转对象。例如,您可以使用 CABasicAnimation(repeatCount = .infinity),或者您可以使用 SCNAction(repeatForever)。 Bellow 是围绕 y 轴旋转对象节点的简单代码:

    let action = SCNAction.rotateBy(x: 0, y: CGFloat(2 * Double.pi), z: 0, duration: 10)
    let repAction = SCNAction.repeatForever(action)
    node.runAction(repAction, forKey: "myrotate")
    

    停止:

    node.removeAction(forKey: "myrotate")
    

    【讨论】:

      【解决方案3】:

      这很简单,你只需添加并运行一个动作来旋转这样的虚拟对象

          let rotateOne = SCNAction.rotateBy(x: 0, y: CGFloat(Float.pi), z: 0, duration: 5.0)
         // let hoverUp = SCNAction.moveBy(x: 0, y: 0.2, z: 0, duration: 2.5) // to hover up  with rotation
         // let hoverDown = SCNAction.moveBy(x: 0, y: -0.2, z: 0, duration: 2.5) // to hover down with rotation
         // let hoverSequence = SCNAction.sequence([hoverUp, hoverDown]) // to do this in sequence first it will hover up and then hover down
         // let rotateAndHover = SCNAction.group([rotateOne, hoverSequence]) // rotation with hovering
         // let repeatForever = SCNAction.repeatForever(rotateAndHover) // to rotate the object continuously with hovering
          let repeatForever = SCNAction.repeatForever(rotateOne) // to rotate the object continuously without hovering
          node.runAction(repeatForever) // here node is your virtual object
      

      【讨论】:

        猜你喜欢
        • 2018-10-26
        • 2018-01-30
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-20
        • 2020-02-17
        相关资源
        最近更新 更多