ARKit放置一个SCNNode面向相机

我正在使用ARKit来显示3D对象。 我设法把节点放在用户面前的现实世界中(也就是相机)。 但是,当我放下它们的时候,我并没有设法使它们面对相机。

 let tap_point=CGPoint(x: x, y: y) let results=arscn_view.hitTest(tap_point, types: .estimatedHorizontalPlane) guard results.count>0 else{ return } guard let r=results.first else{ return } let hit_tf=SCNMatrix4(r.worldTransform) let new_pos=SCNVector3Make(hit_tf.m41, hit_tf.m42+Float(0.2), hit_tf.m43) guard let scene=SCNScene(named: file_name) else{ return } guard let node=scene.rootNode.childNode(withName: "Mesh", recursively: true) else{ return } node.position=new_pos arscn_view.scene.rootNode.addChildNode(node) 

节点位于摄像机前的平面上。 但他们都在朝着同一个方向看。 我想我应该旋转 SCNNode但我没有设法做到这一点。

即使照相机移动,您是否也希望节点始终面向相机? 这就是SceneKit的约束条件 。 SCNLookAtConstraintSCNBillboardConstraint可以使节点始终指向摄像头。

你想让节点在放置时面对相机,但是保持不动(这样你可以移动相机并看到它的背面)? 有几种方法可以做到这一点。 一些涉及有趣的math,但更简单的方法来处理它可能只是devise你的3D资产,使“前”总是在正Z轴的方向。 根据相机变换设置放置对象的变换,其初始方向将与相机匹配。