ARKit:如何将一个导入的3D模型放在另一个上面?

问题描述 投票:1回答:1

我正在使用ARKit开展AR项目。

如果我只触摸点上导入的3D对象,我想在其上方放置另一个3D对象。 (例如,我已经放置了一张桌子,我必须在触摸点上放置一些像花瓶一样的东西)。

当我触摸第一个3D对象时,如何解决第二个对象应该只放置的问题?

物体的表面不平坦,所以我不能使用最小的边界框。

ios swift arkit hittest
1个回答
0
投票

一种方法是为第一个导入的3D对象提供节点名称。

 firstNode.name = “firstObject”

在你内部轻拍手势功能你可以做这样的hitTest

 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
 }

这样当您点击其他任何地方时,第二个对象将无法放置。它只会在您点击节点本身时放置。点击节点的位置并不重要,因为我们只想要高度,我们可以从它的boundingBox max-min确定,然后我们将其添加到firstnode.worldPosition.y

确保将其设置在ARSCNView类的顶部

 var firstNode = SCNNode! 

这样我们就可以在tap手势功能中访问firstNode。

编辑:如果第一个3D模型有许多节点。您可以在sceneGraph中的父节点上flattenNode(最好用下面的照片说明)。这将从sceneGraph中删除所有childNodes和wrap。然后,您可以使用parentNode。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.