【问题标题】:How to change orientation of a SCNNode to the Camera with ARKit如何使用 ARKit 将 SCNNode 的方向更改为相机
【发布时间】:2017-09-24 12:26:31
【问题描述】:

下面的代码将 SCNPlane 放置在所触摸的点上,但平面的方向(旋转)到应用启动时手机所在的位置。理想情况下,我希望将节点定向到物理墙或相机的当前方向。 ARKit 是如何做到的?

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    guard let touch = touches.first else {return}
    let result = sceneView.hitTest(touch.location(in: sceneView), types: [ARHitTestResult.ResultType.featurePoint])
    guard let hitResult = result.last else {return}
    let hitTransform = SCNMatrix4.init(hitResult.worldTransform)

    let hitVector = SCNVector3Make(hitTransform.m41, hitTransform.m42, hitTransform.m43)
    createPlane(position: hitVector)
}

func createPlane(position: SCNVector3) {

    let background = SCNNode()
    background.geometry = SCNPlane.init(width: 0.12, height: 0.10) // better set its size
    background.geometry?.firstMaterial?.diffuse.contents = "odinBW2.jpeg"
    background.position = position

    sceneView.scene.rootNode.addChildNode(background)

}

【问题讨论】:

  • 你找到解决办法了吗??
  • 最后,我决定让用户在开始 arkit 视图之前准备好将手机朝向正确方向的说明。

标签: ios arkit xcode9 scnnode


【解决方案1】:

如果您想将节点与相机的方向对齐,只需使用SCNBillboardConstraint

let yourNode = SCNNode()

let billboardConstraint = SCNBillboardConstraint()
billboardConstraint.freeAxes = [.X, .Y, .Z]
yourNode.constraints = [billboardConstraint]

【讨论】:

  • 这太棒了。谢谢!
  • billboardConstraint.freeAxes = [.X, .Y, .Z] 是多余的,这是默认设置 (SCNBillboardAxis.all)。可以做yourNode.constraints = [SCNBillboardConstraint()]
【解决方案2】:

1 - 这是您首先获得相机旋转的方式:

俯仰 - 绕 X 轴旋转

let pitch = sceneView.session.currentFrame?.camera.eulerAngles.x 

打哈欠 - 绕 Y 轴旋转

let yawn = sceneView.session.currentFrame?.camera.eulerAngles.y

滚动 - 绕 Z 轴旋转

let roll = sceneView.session.currentFrame?.camera.eulerAngles.z

2 - 然后您可以创建与您想要保留的旋转相匹配的 SCNVector3(如果您不想在轴上进行任何旋转,则为 0):

let newRotation = SCNVector3Make(pitch, yawn, roll)

3 - 然后将此 eulerAngles 归因于您的节点:

whateverNode.eulerAngles = newRotation

【讨论】:

  • 这在手机处于横向模式而不是纵向模式时效果很好。
  • @Alan_s 这适用于横向和纵向,我认为您将 AR 锁定为横向,这就是原因。
  • 这是 ARSceneView 上的设置还是类似的设置?
  • 纵向模式不适合我。您所说的“将您的 AR 锁定为横向”是什么意思
猜你喜欢
  • 2018-02-22
  • 2018-08-24
  • 1970-01-01
  • 2018-01-30
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 2017-12-28
  • 2020-04-27
相关资源
最近更新 更多