Ios ARKit:如何将一个导入的三维模型放置在另一个模型之上?
我正在使用ARKit进行AR项目 如果仅在点上触摸导入的三维对象,则希望在其上方放置另一个三维对象。 (例如,我放了一张桌子,我必须在上面的接触点上放置一个花瓶之类的东西) 当我触摸第一个3D对象时,如何解决仅放置第二个对象的问题Ios ARKit:如何将一个导入的三维模型放置在另一个模型之上?,ios,swift,arkit,hittest,Ios,Swift,Arkit,Hittest,我正在使用ARKit进行AR项目 如果仅在点上触摸导入的三维对象,则希望在其上方放置另一个三维对象。 (例如,我放了一张桌子,我必须在上面的接触点上放置一个花瓶之类的东西) 当我触摸第一个3D对象时,如何解决仅放置第二个对象的问题 对象的表面不是平坦的,因此我不能使用带边界框的hittest。一种方法是为第一个导入的3D对象指定节点名 firstNode.name = “firstObject” 在你点击手势功能的内部,你可以做这样的点击测试 let tappedNode = self.s
对象的表面不是平坦的,因此我不能使用带边界框的hittest。一种方法是为第一个导入的3D对象指定节点名
firstNode.name = “firstObject”
在你点击手势功能的内部,你可以做这样的点击测试
let tappedNode = self.sceneView.hitTest(location, options: [:])
let node = tappedNode[0].node
if node.name == “firstObject” {
let height = firstNode.boundingBox.max.y -firstNode.boundingBox.min.y
let position2ndNode = SCNVector3Make(firstNode.worldPosition.x, (firstNode.worldPosition.y + height), firstNode.worldPosition.z)
2ndNode.position = position2ndNode
sceneView.scene.rootNode.addChildNode(2ndNode)
} else {
return
}
这样,当您点击其他任何位置时,第二个对象将不会被放置。仅当您点击节点本身时,才会放置该节点。点击节点的位置无关紧要,因为我们只需要高度&我们可以从它的边界框max-min中确定高度,然后将其添加到firstnode.worldPosition.y
确保设置在ArsknView类的顶部
var firstNode = SCNNode!
通过这种方式,我们可以访问轻触手势功能中的第一个节点
编辑:如果第一个三维模型有多个节点。您可以在场景图中展平父节点上的节点(下面的照片可以很好地说明这一点)。这将从场景图中删除所有子节点和换行。然后,您可以只使用parentNode
非常感谢!我有一个关于边界框的问题。我的第一个对象有多个节点。在将每个节点添加为childnode后,我是否应该为每个节点执行if-else条件?我更新了关于如何将节点展平(删除所有childnode)只保留parentNode的答案。让我知道这是否解决了你的问题。如果没有,我可能有另一种方法来解决边界框问题。注意:如果在dae上执行xcode时发生崩溃。。。首先将dae文件转换为scn文件。那就行了。