你知道如何使用ARKIT将3D模型旋转到面部相机吗?

时间:2018-01-12 09:22:59

标签: ios object 3d augmented-reality arkit

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

  1. 如果创建的3D对象(例如Car)面向汽车的车门侧作为相机的正面,我该如何旋转3D对象以使其正常?比如,旋转汽车使汽车的发动机侧作为摄像机的正面。
  2. 2.如何通过将物体朝向相机放置在平面上。移动手机摄像头以查看对象的背面。

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

1 个答案:

答案 0 :(得分:3)

enter image description here

要旋转汽车节点,您只需调整eulerAngles直到汽车朝向摄像头。

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

将这辆面包车转向前方。

enter image description here

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)

你可以使用沿着parentNode的负z轴的pointOfView之后的SCNLookAtConstraint。

因此,如果汽车的负Z轴是面向侧门的摄像机......当您旋转摄像机时,在汽车周围......汽车将旋转始终保持该视野。

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

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

enter image description here