【问题标题】:Do you know how to rotate 3D model to face camera using ARKIT?你知道如何使用 ARKIT 将 3D 模型旋转到面对相机吗?
【发布时间】:2018-06-21 17:27:40
【问题描述】:

我有 2 个问题要放置 3D 对象。

  1. 如果一个 3D 对象(例如汽车)创建为面向汽车的门侧作为相机的正面,如何旋转 3D 对象使其正常?比如,旋转汽车,将汽车的发动机侧作为摄像头的正面。

2.如何将 3D 对象放置在平面表面上,将对象面向相机。移动手机摄像头以查看对象的背面。

我正在使用 XCode 9.1 和 iOS 11 及更高版本,ARKIT

【问题讨论】:

    标签: ios object 3d augmented-reality arkit


    【解决方案1】:

    要旋转汽车节点,您只需调整 eulerAngles 直到汽车面向相机。

      node?.eulerAngles = SCNVector3Make(0,Float(degToRadians(degrees:180 )),Float(degToRadians(degrees: 90)))
    

    将这辆面包车旋转到正面。

    eulerAngles 以弧度为单位,因此可以方便地转换为度数:

    public func degToRadians(degrees:Double) -> Double
     {
        return degrees * (M_PI / 180);
      }
    

    您也可以使用动画在 van 节点上进行相同的旋转

        let rotate = SCNAction.rotateBy(x: CGFloat(degToRadians(degrees: -90)), y: 0, z: 0, duration: 1)
        node.runAction(rotate)
    

    您可以使用 SCNLookAtConstraint,它沿着 parentNode 的负 z 轴跟随 pointOfView。

    因此,如果汽车的负 z 轴是面向侧门的摄像头...当您围绕汽车旋转摄像头时...汽车将始终保持该视图旋转。

      let constraint = SCNLookAtConstraint(target:sceneView.pointOfView)
        constraint.isGimbalLockEnabled = true
        node.constraints = [constraint]
    

    在 Xcode 中,下面的屏幕截图显示了如何使用欧拉角(以红色突出显示)更改货车的旋转。视图应该是“前置”摄像头(也以红色突出显示)。动画也可以通过动画面板在 Xcode 中完成,选择“旋转动作”并拖动到底部-中间的动作时间轴中

    【讨论】:

    • 我必须制作一个示例项目,将 3D 模型放置在飞机上或空中取决于用户选择(即 canPlaceOnPlane: Bool)。放置对象时,它必须面向相机,以便我可以移动手机以查看模型的另一面。能帮我写代码吗??如果可能的话,你能分享一下样本吗?
    • 还有一个功能,如果是 3D 动画,点击它来制作动画。
    • 如果您查看我最近的一些答案,您会发现几个很好的代码示例可以做这些事情。
    • 请帮我提供样品。了解 ARKit 对我很有用。我只是 AR 的 1 周大的孩子。 :(
    • 在 ARKit 中,将模型放置在 (0, 0, 0) 通常意味着模型不在 AR 摄像头的中心。你知道如何确保 (a) AR 相机指向 (0, 0, 0) 或 (b) 将模型放在中心吗?感谢您的帮助!
    猜你喜欢
    • 2018-01-30
    • 2018-03-26
    • 2015-01-08
    • 1970-01-01
    • 2018-08-23
    • 2023-03-28
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    相关资源
    最近更新 更多