【问题标题】:How to attach SCNNode fixed to ARKit's pointOfView?如何将 SCNNode 固定到 ARKit 的 pointOfView?
【发布时间】:2018-01-30 08:18:03
【问题描述】:

我正在尝试做一些简单的事情,但遇到了一个破坏 ARKit 体验的问题。

我想将 3d 模型 (SCNNode) 附加到手机屏幕上的某个位置。我能够做到这一点,但目前的体验似乎很糟糕。当我将我的节点添加到场景中时,我的节点有大约一秒钟左右的时间可以移动,然后才会冻结到位。这种初始移动非常糟糕,因为节点可能会冻结在相机的视野之外(因此您不会在屏幕上看到它)。

我正在使用的代码:

let scene = SCNScene(named: "resources.scnassets/model.scn")!
let node = scene.rootNode.childNode(withName: "model", recursively: true)!

// this puts the node in front & slightly below the camera
let orientation = SCNVector3(x: 0, y: -0.4, z: -1)

node.position = orientation

let physicsBody = SCNPhysicsBody(
    type: .static,
    shape: SCNPhysicsShape(geometry: SCNSphere(radius: 0.1))
)
node.physicsBody = physicsBody

sceneView.pointOfView?.addChildNode(node)

这段代码很简单,它在场景的相机节点前面添加了节点。但是我遇到了一个问题,当节点被添加到场景中时,它有一秒钟的时间在屏幕上移动(当我移动手机时),然后它就会冻结在适当的位置。我需要做的是让节点出现在屏幕上的固定位置(固定到相机的视点)。

我不想将我的节点锚定到现实世界中的某个位置。我希望我的节点位置取决于相机的视角。

附加节点以使其保持在手机屏幕上的同一位置的正确方法是什么?

【问题讨论】:

    标签: ios swift scenekit arkit


    【解决方案1】:

    您应该使用.kinematic 而不是.static

    将运动体用于您想直接控制但其运动会操纵其他元素的场景元素。例如,为了允许用户用手指推动物体,您可以创建一个运动体并将其附加到一个不可见的节点上,您可以移动该节点以跟随触摸事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-26
      • 2019-01-30
      • 2017-12-14
      • 2018-12-02
      • 2018-02-22
      • 2017-12-22
      • 2018-09-01
      相关资源
      最近更新 更多