我使用ARKit
来显示3D对象。我设法将节点放置在用户面前的真实世界中(也就是相机)。但是,当我放下它们时,我无法让它们面对相机。ARKit将SCNNode面向相机
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
但我没有设法做到这一点。
第二个:)当我放置它时,我希望节点面对相机,然后将它保留在此处(并且可以移动)。 –
当你说>设计你的3D资产时,我不明白你的意思,所以“前”总是在正Z轴方向。我有一个dae文件,我将其转换为xCode中的scn。节点位置是(0,0,0)。但我也把相机放在(0,0,0,0.9),以便将物体放在我面前。确定相机是否在节点层次结构中(我猜可能是一个子节点)可能很重要。 –
当我放下它们时,节点总是位于相机的正前方,它们是可见的(没有在相机后面)。如果我在房间中移动并放下几个节点,它们都是相似的。当我放下第一个节点时,它正在“看着我”。但不是下一个。我不知道我说的是否清楚...:/ –