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

4 3d object augmented-reality ios arkit

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

  1. 如果创建了一个3D对象(例如Car)作为照相机的正面面对汽车的门侧,如何旋转3D对象使其正常?像这样旋转汽车,使汽车的引擎侧成为相机的正面。

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

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

Cla*_*lay 5

在此处输入图片说明

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

  node?.eulerAngles = SCNVector3Make(0,Float(degToRadians(degrees:180 )),Float(degToRadians(degrees: 90)))
Run Code Online (Sandbox Code Playgroud)

旋转这辆货车到前面。

在此处输入图片说明

eulerAngles以弧度表示,因此方便地转换为度:

public func degToRadians(degrees:Double) -> Double
 {
    return degrees * (M_PI / 180);
  }
Run Code Online (Sandbox Code Playgroud)

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

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

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

因此,如果汽车的负Z轴是摄像头面向侧门,则……在旋转摄像头时,它绕着汽车……会旋转,从而始终保持该视图不变。

  let constraint = SCNLookAtConstraint(target:sceneView.pointOfView)
    constraint.isGimbalLockEnabled = true
    node.constraints = [constraint]
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明